2013-06-14 3 views
1

У меня проблема с двумя краями с настройкой заголовков SOAP. Прежде всего, я никогда не делал этого раньше и двух, я не могу найти подходящее решение для этого. Приносим извинения, если есть точные дубликаты, и, пожалуйста, указывайте мне в правильном направлении.SOAP задает правильные заголовки xmlns

Мне нужно установить следующие 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-клиент. Любая помощь вообще очень ценится!

EDIT:

Я пошел с другим маршрутом, спасибо за все ваши ответы, хотя!

+0

Вы уверены, что заголовки SOAP - это правильный термин, который вы используете здесь? – hakre

+0

У меня вопрос не возникает. При настройке мыльного сервиса он создает WSDL для вас. Не нужно делать это самостоятельно. – Matheno

+0

Можете ли вы опубликовать код, который вы используете для создания мыльного запроса. – Perry

ответ

1

подробный пример правильной реализации с использованием РНР SoapClient можно найти здесь: http://www.php.net/manual/en/soapclient.soapclient.php#97273

+1

Я не мог заставить это работать с этими шагами. Мой запрос SOAP по-прежнему не имеет настройки xmlns. –

4

Я имел Двойники проблемы с конвертом, я сделал исправление для этого. Я буду размещать исправление с данными предоставленными вами, вы должны проверить, все ли в Оке:

Пользовательский класс для редактирования запроса:

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 

Я надеюсь, что это поможет :)

Смежные вопросы