Мыло: Конверт SOAP-ENV: Конверт PHP

Я пытаюсь войти в API с помощью встроенных мыльных функций PHP. Я получил такой результат.

[LoginResult]=> false, [ErrorMsg] => Login failed with the reason : The security object is invalid 

Это то, что требуется провайдером API.

 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <Login xmlns="http://tempuri.org/Example/Service1"> <objSecurity> <WebProviderLoginId>test</WebProviderLoginId> <WebProviderPassword>test</WebProviderPassword> <IsAgent>false</IsAgent> </objSecurity> <OutPut /> <ErrorMsg /> </Login> </soap:Body> </soap:Envelope> 

&, вот что я смог создать с помощью функций.

 <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/Example/Service1"> <SOAP-ENV:Body> <ns1:Login> <objSecurity> <WebProviderLoginId>test</WebProviderLoginId> <WebProviderPassword>test</WebProviderPassword> <IsAgent>false</IsAgent> </objSecurity> <OutPut/> <ErrorMsg/> </ns1:Login> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 

Вот код, который я использовал для отправки запроса.

 <?php class objSecurity { function objSecurity($s, $i, $f) { $this->WebProviderLoginId = $s; $this->WebProviderPassword = $i; $this->IsAgent = $f; } } class nextObject { function nextObject($objSecurity) { $this->objSecurity=$pobjSecurity; $this->OutPut=NULL; $this->ErrorMsg=NULL; } } $url = 'http://example.com/sampleapi/test.asmx?WSDL'; $client = new SoapClient($url, array("soap_version" => SOAP_1_1,"trace" => 1)); $struct = new objSecurity('test', 'test', false); $data = new nextObject($struct); $soapstruct2 = new SoapVar($data, SOAP_ENC_OBJECT); print_r( $client->__soapCall( "Login", array(new SoapParam($soapstruct2, "inputStruct")) ) ); echo $client->__getLastRequest(); ?> 

Это те различия, которые я нашел.

В моем запросе xmlns:xsi отсутствует.

Требование начинается с <soap:Envelope , но мой запрос начинается с <SOAP-ENV:Envelope .

В моем запросе есть дополнительный xmlns:ns1 .

& Тег имени функции начинается с ns1:

Пожалуйста, помогите мне сделать мой запрос в требуемом формате.

Я мало знаю о SOAP, и я использую PHP версии 5.3.13 с CakePHP 2.3.0. Извините за мой плохой английский.

Вот решение. :)

 <?php $url = 'http://example.com/sampleapi/test.asmx?WSDL'; $client = new SoapClient($url, array("soap_version" => SOAP_1_1,"trace" => 1)); $user_param = array ( 'WebProviderLoginId' => "test", 'WebProviderPassword' => "test", 'IsAgent' => false ); $service_param = array ( 'objSecurity' => $user_param, "OutPut" => NULL, "ErrorMsg" => NULL ); print_r( $client->__soapCall( "Login", array($service_param) ) ); echo $client->__getLastRequest(); ?> 

& запрос был:

 <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/Example/Service1"> <SOAP-ENV:Body> <ns1:Login> <ns1:objSecurity> <ns1:WebProviderLoginId>test</ns1:WebProviderLoginId> <ns1:WebProviderPassword>test</ns1:WebProviderPassword> <ns1:IsAgent>false</ns1:IsAgent> </ns1:objSecurity> </ns1:Login> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 

Благодаря этой ссылке. PHP SOAP Request не прав