Я пытаюсь вызвать веб-сервис из кода PHP, используя SoapClient
.
$service = new SoapClient($wsdl);
$service->myFunction('something', 'anotherthing', 'onemore');
Если я включу трассировку и получу последний запрос, я вижу, что первый параметр всегда отсутствует в сообщении Soap, т. Е. param0
никогда не существует. То же самое в функциях с меньшим или большим количеством параметров.
Запрос на мыло:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<myFunction />
<param1>anotherthing</param1>
<param2>onemore</param2>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Что я ожидаю (и что мой веб-сервис принимает при использовании soapUI):
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<myFunction>
<param0>something</param0>
<param1>anotherthing</param1>
<param2>onemore</param2>
</myFunction>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
То же самое с
__soapCall('myFunction', array($something, $anotherthing, $onemore));
Я использую xampplite в Windows XP.
Обновление: http://programming.itags.org/php/236781/ - ссылка на кого-то с такой же проблемой (опубликовано в 2008 году без ответов :().
Обновление 2: я также заметил, что он не помещает элементы xml, представляющие параметры, в качестве дочерних элементов элемента, представляющего функцию. Это не может быть правдой? !!?
Я сделал ужасное исправление, где я перегружаю функцию __doRequest и редактирую переменную $ request. Это работает, но это отстой. Я мог бы также скомпилировать весь запрос сам ......
Обновление 3: мне кажется, что PHP просто работает со сбоями. Но если бы это была ошибка в реализации мыла, я бы подумал, что в Интернете было бы больше информации об этом. Aaaargh. Следующая попытка - попробовать NuSoap и PEAR.
Обновление 4: для округления я не пробовал NuSoap и PEAR. Я просто пошел со своим «хаком», потому что он работал, и были другие действия, которые нужно было выполнить. Кроме того, демонстрация была дана и для следующего этапа PHP больше не будет использоваться. Таким образом, все это будет заново реализовано в любом случае.