jak wygenerować żądanie mydła w php z tego xml?
Jestem zmęczony próbą wysłania żądania za pomocą SOAP. to jest mój xml
<code><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:bpf="http://schemas.datacontract.org/2004/07/Bpf.Security.Common" xmlns:bpf1="http://schemas.datacontract.org/2004/07/Bpf.Security.Authentication.Common"> <soapenv:Header> <InfoTag xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.w3.org/BaufestProductivityFramework"> <ClientIp xmlns="http://schemas.datacontract.org/2004/07/Bpf.Common.Service">200.125.145.10</ClientIp> <CompanyId xmlns="http://schemas.datacontract.org/2004/07/Bpf.Common.Service">1</CompanyId> <UserName xmlns="http://schemas.datacontract.org/2004/07/Bpf.Common.Service">someUser</UserName> </InfoTag> </soapenv:Header> <soapenv:Body> <tem:LogIn> <tem:token> <bpf:type> <bpf1:Description>someDesc</bpf1:Description> <bpf1:Id>1</bpf1:Id> <bpf1:Name>someDesc</bpf1:Name> </bpf:type> <bpf:password>somePass</bpf:password> <bpf:userName>someUser</bpf:userName> </tem:token> </tem:LogIn> </soapenv:Body> </soapenv:Envelope> </code>
ta funkcja wysyła nagłówek z przestrzenią nazw, ale jest ich więcej ... Muszę je wysłać?
<code> private function __getHeaders() { $ns = 'http://schemas.xmlsoap.org/soap/envelope/'; //Namespace of the WS. $ip = $_SERVER['REMOTE_ADDR']; //Body of the Soap Header. $headerbody = array('ClientIp' => $ip, 'CompanyId' => 1, 'UserName' => 'someUser' ); //Create Soap Header. $header = new SOAPHeader($ns, 'InfoTag', $headerbody); return $header; } public function prepareWs(){ $wsdl="the web service"; $client = new SoapClient($wsdl, array('trace' => true)); //Set the Headers of Soap Client. $header = $this->__getHeaders(); $client->__setSoapHeaders($header); </code>
Próbuję wysłać ten obiekt, sprawdziłem wyjątek za pomocą błędu mydła, ale komunikat zwraca tylko „złe żądanie NULL NULL NULL”.
<code>$params = new stdClass(); $params = new SoapVar("<tem:token> <bpf:type xmlns:bpf="http://schemas.datacontract.org/2004/07/Bpf.Security.Common"> <bpf1:Description xmlns:bpf1="http://schemas.datacontract.org/2004/07/Bpf.Security.Authentication.Common">someDesc</bpf1:Description> <bpf1:Id xmlns:bpf1="http://schemas.datacontract.org/2004/07/Bpf.Security.Authentication.Common">1</bpf1:Id> <bpf1:Name xmlns:bpf1="http://schemas.datacontract.org/2004/07/Bpf.Security.Authentication.Common">someName</bpf1:Name> </bpf:type> <bpf:password xmlns:bpf="http://schemas.datacontract.org/2004/07/Bpf.Security.Common">somePass</bpf:password> <bpf:userName xmlns:bpf="http://schemas.datacontract.org/2004/07/Bpf.Security.Common">someUser</bpf:userName> </tem:token>", XSD_ANYXML); $response = $client->Login($params); } </code>
Z CURL mogę wysłać ten XML i odebrać również odpowiedź XML, ale z SOAPClient nie mogę wysłać tego żądania.
Mam nadzieję, że ktoś może mi pomóc, dzięki.
To jest kod, który widzę w firebugu, jedyne co dostaję to „złe żądanie”. Kiedy używam __getLastRequest () widzę to samo ... Chyba nagłówki nie powinny być wysyłane poprawnie, jednak funkcja __setSoapHeaders zwraca true. To jest wyjście:
<code><soap-env:envelope xmlns:ns1="http://tempuri.org/" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"> <soap-env:header> <soap-env:contextinformation> <item> <key>ClientIp</key> <value>127.0.0.1</value> </item> <item> <key>CompanyId</key> <value>1</value> </item> <item> <key>UserName</key> <value>someUser</value> </item> </soap-env:contextinformation> </soap-env:header> <soap-env:body> <tem:login> <tem:token> <bpf:type> <bpf1:description>someDesc</bpf1:description> <bpf1:id>1</bpf1:id> <bpf1:name>someName</bpf1:name> </bpf:type> <bpf:password>somePass</bpf:password> <bpf:username>someUser</bpf:username> </tem:token> </tem:login> </soap-env:body> </soap-env:envelope> </code>