Поэтому я пытаюсь подключиться к стороннему сервису и у меня возникают некоторые проблемы с ним в PHP.Когда я пытаюсь запросить сервис в WebService Studio, он работает нормально, и отправленный запрос выглядит так:
<?xml version="1.0" encoding="utf-16"?>
<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>
<createUser xmlns="http://ws.example.com">
<arg0 xmlns="">test@test.com</arg0>
<arg1 xmlns="">123</arg1>
<arg2 xmlns="">1234</arg2>
<arg3 xmlns="">1234567890abcdef</arg3>
<arg4 xmlns="">test</arg4>
<arg5 xmlns="">user</arg5>
<arg6 xmlns="">02472</arg6>
<arg7 xmlns="">test@test.com</arg7>
<arg8 xmlns="">A</arg8>
<arg9 xmlns="">0</arg9>
<arg10 xmlns="">true</arg10>
</createUser>
</soap:Body>
</soap:Envelope>
Теперь, когда я пытаюсь вызвать сервис из PHP с помощью следующей команды:
$this->web_service->createAccount('test@test.com', 123, 1234, '1234567890abcdef', 'test', 'user', '12345', 'test@test.com', 'A', 0, true)
и отладив запрос, я получаю следующее:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://ws.example.com">
<SOAP-ENV:Body>
<ns1:createUser/>
<param1>123</param1>
<param2>1234</param2>
<param3>1234567890abdcef</param3>
<param4>test</param4>
<param5>user</param5>
<param6>12345</param6>
<param7>test@test.com</param7>
<param8>A</param8>
<param9>0</param9>
<param10>true</param10>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Несколько вещей сразу бросаются в глаза при запросе, сгенерированном SoapClient в PHP.Во-первых, первый параметр (первый раз, когда я передаю test@test.com) не передается в param1, а второй параметр.Следующее, что запрос createUser - это самозакрывающийся тег, не включающий передаваемые параметры.Тогда очевидно, что вся структура немного отличается от используемого тега.
Я попытался использовать массив (который даже не доходит до момента выдачи запроса), оборачивая параметры в SoapParam, используя__call () и использование __soapCall (), но ни одно из них не решает эту проблему.
Кто-нибудь знает, что может решить эту проблему, поэтому запрос, сгенерированный SoapClient в PHP, совпадает с запросом, сгенерированным WebService Studio, если не сгенерировать вручнуюзапрос на мыло от руки?