Я столкнулся с проблемой, и я не могу понять, как ее исправить. Я создал клиент soap в php, который должен выполнить запрос xml к веб-службе – служба работает через SoapUI, но всякий раз, когда я отправляю один и тот же запрос через мой php-клиент, я получаю следующий код ошибки:
<?xml version="1.0" encoding="utf-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <soapenv:Fault> <faultcode>**soapenv:VersionMismatch**</faultcode> <faultstring>**Transport level information does not match with SOAP Message namespace URI**</faultstring> <detail></detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope>
Теперь, как клиент, так и служба работают с мыльной версией 1.2, я считаю, что проблема в клиенте, так вот как я ее определил:
$options = array( 'trace' => true, 'exceptions' => 1, 'style' => SOAP_DOCUMENT, 'use' => SOAP_LITERAL, 'soap_version' => SOAP_1_2, ); $client = new SoapClient("location_of_the_wsdl", $options);
В запросе я использую следующий код:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:soapenc="http://www.w3.org/2003/05/soap-encoding" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <env:Header/> <env:Body> <ns2:FunctionName xmlns:ns2="namespace_of_the_service"> <arg0> <data1>?</data1> </arg0> </ns2:FunctionName> </env:Body> </env:Envelope>
В soapUI это дает мне «ложный» результат, поскольку data1 остается с?, Когда я пишу в действительных данных, он возвращает true.
Я также заметил, что в soapUI я отправляю и получаю application/soap+xml
Content-type application/soap+xml
, но когда я делаю это через PHP-клиент, я отправляю и получаю заголовки с text/xml
Content-Type text/xml
;
В чем может быть проблема? Я использую nusoap.php
для клиента.