Как сгенерировать требуемый SOAP-запрос в PHP

#php #web-services #soap #wsdl

#php #веб-сервисы #soap #wsdl

Вопрос:

Я запускаю следующий код на php:

 <?php
$client  = new SoapClient('http://devapi.stellatravelgateway.stellatravelservices.co.uk/DirectoryService.svc?wsdl', array('trace' => 1));
$result = $client -> Authenticate(  array( 
                        'authenticateRequest' => array('BranchCode' => '6937', 
                        'UserName' => 'xxxx', 
                        'Password' => 'xxxx', 
                        'Application' => 'ExternalAPI',
                        'BranchID' => '1')));
echo $client->__getLastRequest();
?>
  

Результатом является этот SOAP-запрос

   <?xml version="1.0" encoding="UTF-8" ?> 
- <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://stellatravelgateway.stellatravelservices.co.uk/DirectoryService">
- <SOAP-ENV:Body>
- <ns1:Authenticate>
- <ns1:authenticateRequest BranchCode="6937" UserName="xxxx" Password="xxxx" Application="ExternalAPI">
  <ns1:BranchID>1</ns1:BranchID> 
  </ns1:authenticateRequest>
  </ns1:Authenticate>
  </SOAP-ENV:Body>
  </SOAP-ENV:Envelope>
  

Но я хочу этот результат…

 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://stellatravelgateway.stellatravelservices.co.uk/DirectoryService/IDirectoryService/Authenticate</Action>
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Authenticate xmlns="http://stellatravelgateway.stellatravelservices.co.uk/DirectoryService">
      <authenticateRequest Password="BREEZE2" Application="ExternalAPI" BranchCode="xxxx" UserName="xxxx">
        <BranchID>1</BranchID>
      </authenticateRequest>
    </Authenticate>
  </s:Body>
</s:Envelope>
  

Ответ №1:

Если вы возвращаете тип содержимого, который является XML, пользовательский интерфейс будет зависеть от вашего браузера. В IE9 и Firefox я понимаю это так, как вы хотите, включая и — для развертывания / свертывания тегов.

Если вы хотите отобразить это на веб-странице в вашем собственном формате, вам придется разобрать его самостоятельно. Вы можете использовать средства чтения XML.

Есть пара программ для чтения XML на PHP.net вы можете выбрать тот, который наиболее подходит для вас:http://us.php.net/xml