У меня две проблемы с настройкой заголовков SOAP. Прежде всего, я никогда не делал этого раньше и двух, я не могу найти подходящее решение для этого. Приносим извинения, если есть точные дубликаты, и, пожалуйста, указывайте мне в правильном направлении.
Мне нужно установить следующие xmlns: xsi и xmlns: наборы данных xsd на мыло: Конверт. Мне также нужно установить атрибут xmlns для первого тега в XML (примерный пример).
Первая часть должна быть добавлена, вторая часть уже существует, когда я делаю __getLastRequest (). И третья часть должна быть добавлена (только атрибут SendPurchases xmlns).
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/ xmlns:ns1="urn:[taken out for security purposes]"> <soap:Body> <SendPurchases xmlns="urn:..."> </SendPurchases> </soap:Body>
Должен ли я использовать заголовок () для этого? Я использую PHP-SOAP-клиент. Любая помощь вообще очень ценится!
РЕДАКТИРОВАТЬ:
Я пошел с другим маршрутом, спасибо вам за все ваши ответы!
У меня была симулятивная проблема с конвертом, я сделал это для исправления. Я отправлю исправление с предоставленными вами данными, вам нужно будет проверить, все ли око:
Пользовательский класс для редактирования запроса:
class CustomSoapClient extends SoapClient { function __doRequest($request, $location, $action, $version) { $request = str_replace('<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema">', '', $request); // parent call return parent::__doRequest($request, $location, $action, $version); } }
Настройка клиента мыла:
$client = new CustomSoapClient($wsdl, array( 'features' => SOAP_SINGLE_ELEMENT_ARRAYS, 'exceptions' => true, 'trace' => 1, 'soap_version' => SOAP_1_2, ));
Запрос:
//notice that the envelope is in the request! also you need to change the urn $request = ' <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/xmlns:ns1="urn:[taken out for security purposes]"> <soap:Body> <SendPurchases xmlns="urn:..."> </SendPurchases> </soap:Body> </SOAP-ENV:Envelope>'; $xmlvar = new SoapVar($request, XSD_ANYXML); $result = $client->Controleer($xmlvar); print_r($result); // finally check the result
Я надеюсь, что это поможет вам 🙂
Подробный пример правильной реализации с использованием PHP SoapClient можно найти здесь: http://www.php.net/manual/en/soapclient.soapclient.php#97273