Autor | Zpráva | ||
---|---|---|---|
quatzael Profil |
#1 · Zasláno: 13. 4. 2015, 09:40:07
Když budu mít v proměnný již VYGENEROVANÝ SOAP request coby string, jak je prosím možné ho přímo odeslat? Nebo jak s tím nějak dál pracovat, aby šel odeslat?
$request = '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://ws.wsdomain.com"> <soap:Header/> <soap:Body> <web:mainFunction> <login> <loginData> <name>Freak</name> <password>qwerty</password> </loginData> </login> <xmlData> <![CDATA[ <data> <id>123456</id> <value>69</value> </data> ]]> </xmlData> </web:mainFunction> </soap:Body> </soap:Envelope>'; Co mám udělat, abych tohle odeslal v PHPku úplně stejně jako to odesílám v SoapUI? Předem díky moc za všechny odpovědi. |
||
blaaablaaa Profil |
#2 · Zasláno: 14. 4. 2015, 12:12:32
quatzael:
Proc to chces odeslat primo a nevyuzijes nejakou knihovnu? Jinak odeslat to muzes napr. pomoci curl. |
||
quatzael Profil |
blaaablaaa:
Dobrá otázka.. Protože mi to přes SoapClient prostě nějak nefunguje.. Rozchodil jsem to přes SoapUI. Tam to běží. Tak mě prostě napadlo, že bych to posílal přímo. Asi nejjednodušší řešení momentálně.. Hází mi to chybu: SOAP-ERROR: Encoding: object has no 'xmlData' property
Zkouším všechny varianty jak to tam zadat. Kód vypadá takto: $ws_result = $soapClient->Funkce($login,$xml,true); $xml->xmlData = $xml_content; $xml_content , jestli jen čistě string, tzn. nějak takto:
$xml_content = '<data> <id>123456</id> <value>69</value> </data>'; Nebo včetně <![CDATA[ (to ale moc logiku nemá), nebo taky s <?xml version="1.0" encoding="WINDOWS-1250"?> na začátku. Zkoušel jsem snad všechny varianty včetně simplexml_load_string($xml_content) nebo to celý dát nějak do SoapVar.
Prostě nic nefunguje.. V dokumentaci je uvedeno, že pro správné fungování je potřeba zakázat CHUNKED transfer-encoding. Jenže to nevím jak se dělá.. (navíc ani není jistý, jestli to je ten problém, který chybu způsobuje. Každopádně jsem zkoušel na to založit vlákno: Jak zakázat CHUNKED encoding?, jenže na to mi tady nikdo neodpověděl. Pátral jsem na netu, žádnej pořádnej návod jsem na to nenašel. Jediný co jsem zjistil, že se to dělá nějak tím, že se v hlavičce nastaví délka requestu. Na to jsem zase založil vlákno: Jak poslat header v SOAP requestu?, ale taky bez odpovědi. Už jsem naprosto zoufalej.. A jak se to teda prosímtě dá poslat přes to cURL? Já fakt nevím, jsem totální lama na tohle.. |
||
Časová prodleva: 1 měsíc
|
|||
quatzael Profil |
#4 · Zasláno: 25. 5. 2015, 23:42:24
Tak tady je řešení:
V dokumentaci byly položky login a xmlData popsány jako dva oddělené parametry, takže jsem to zadával takto: $ws_result = $soapClient->mainFunction($login,$xml); Ale ve skutečnosti se měl zadat jeden parametr. Zjednodušeně: $xml = '<![CDATA ... xml contents ... ]]>'; class loginData{var $name= 'Freak'; var $password= 'qwerty';} class login {var $loginData;} class input {var $login; var $xmlData;} $loginData= new loginData; $login = new login; $input = new input; $login->loginData= $loginData; $input->login = $login; $input->xmlData = $xml; $ws_result = $soapClient->mainFunction($input); Ale problém zůstává to chunkování. Nejspíš to SoapClient neumí. Nevím. Jde o to, že se musí nastavit header v odesílaném requestu a v něm přesně zadat délku requestu v položce content-length
To se mi podařilo vyřešit jedině pomocí cURL. Tady jsem našel řešení: stackoverflow.com/questions/7120586/soap-request-in-php-with-curl Trochu jsem to poupravil a funguje to!! End of story.. |
||
Kubo2 Profil |
quatzael:
> class loginData{var $name= 'Freak'; var $password= 'qwerty';}
> class login {var $loginData;}
> class input {var $login; var $xmlData;}
Nestačila by ti jednoducho stdClass ?
|
||
quatzael Profil |
#6 · Zasláno: 26. 5. 2015, 16:31:19
Normálně asi jo, prve jsem zkoušel všechny možnosti. Včetně toho std. A nic nefungovalo..
Některý webový služby vyžadují přímo std, některý se zmiňují jen o objektech obecně a někde se musí zase pro změnu data vkládat v poli. Mě by spíš zajímalo jak z wsdl souboru vyčtu jestli tam mám dávat pole nebo objekt.. Nemá to náhodou nějakou souvislost s rozdílem mezi complextype a sequence? Nevíte náhodou někdo? |
||
Časová prodleva: 9 let
|
0