Autor Zpráva
Pavel9876
Profil *
Ahoj,
mám problém s výše uvedeným problémem. Potřebuji odeslat na vzdálený server se SOAPem xml požadavek (níže uvedený). Nejdříve je ale nutné odeslat autorizační údaje, jenže nemůžu nikde najít nějaký blbuvzdorný zápis, všude po internetu jsou ty zápisy až moc složitý (odvozují se nové metody, vytvářejí nějaké vzdálené funkce atd.) a já se v tom ztrácím.

když už by se mi nějak podařila použít třída SoapClient, která je implementovaná v PHP, tak se zadrhnu na tom, co dál. na netu jsem našel, že vytvořit spojení by mělo jít takhle:

$soapClient = new SoapClient("https://soapserver.example.com/blahblah.asmx?wsdl");
   
        // Prepare SoapHeader parameters
        $sh_param = array(
                    'Username'    =>    'username',
                    'Password'    =>    'password');
        $headers = new SoapHeader('http://soapserver.example.com/webservices', 'UserCredentials', $sh_param);
   
        // Prepare Soap Client
        $soapClient->__setSoapHeaders(array($headers)); 


zde by asi mělo následovat odeslání toho xml requestu, ale v dokumentaci jsou u metody __doRequest () požadovány 4 parametry (request - etn vim, ale location, action a version), se kterými se nevím rady, navíc já ani nevím, jak ověřit, zda to spojení funguje

neumíte někdo poradit? vím, že tu už pár takových vláken je, ale nejčastěji se týkaj něčeho jiného, nebo jsou přesně o tom samém, leč bez odpovědí a několik let staré na to, aby se znovu oživovala.


xml požadavek:
===
POST /variows/Service.asmx HTTP/1.1
Host: {nějakej host}
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://server/variows/ExportFull"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ExportFull xmlns="http://server/variows/">
      <Export>string</Export>
    </ExportFull>
  </soap:Body>
</soap:Envelope>

===

předem děkuji, Pavel
joe
Profil
Tady je tutoriál, kde je to trochu rozepsané, co jsou ty parametry co píšeš.

http://www.herongyang.com/PHP/php_soap.html
Pavel Strejček
Profil
Víš určitě, že služba podporuje tento způsob přihlašování? Může používat třeba NTLM. Co je v dokumentaci a ve wsdl?
PHP SoapClient si s některými web servicemi neumí vůbec poradit. Může pomoci úprava requestu pomocí přetížené metody __doRequest().
Pavel9876
Profil *
problém byl v tom, že jsem neuměl správně nastavit SoapClienta, v mém případě pomohly tyto parametry

$options = array(
'soap_version'=>SOAP_1_2,
'exceptions'=>true,
'trace'=>1,
'cache_wsdl'=>WSDL_CACHE_NONE,
'login' => '{login}',
'password' => '{pass}',
'location' => "{host}/variows/ExportFull",
'uri' => "{host}/"
);

$soap = new SoapClient(null, $options);


takže problém byl jak v těch parametrech, tak asi i v tom, že jsem se pokoušel cpát adresu souboru s koncovkou .asmx (jak jsem to nekde viděl na php.net) jako prvni parametr SoapClient místo null

autentizace byla právě nějaká windowsácká, basic autentizaci mi správce zapnul až teď, takže už ani ten SOAP nepotřebuju, ale aspoň sem se naučil něco nového :-)

Díky všem za reakce

Pavel

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0