Использование сложной структуры с SOAP - PullRequest
1 голос
/ 12 декабря 2011

Проблема в том, что мне не удается отправить массив класса через SOAP конкретному веб-сервису, который я не могу изменить его структуру.

Здесь ниже вы увидите схему функции Soap:

enter image description here http://www.elyotech.com/share/yoni/forum/developpeznet-soap.jpg

Здесь вы найдете соответствующий мне код:

$s = new soapclient($URL_WEBSERVICE,array('wsdl'=>true,"trace"=>true));
$params = new stdClass();
$params->loginInfo = new stdClass();
$params->loginInfo->UserName =  'username';

    $params->loginInfo->Password =  'password';
    $params->loginInfo->LanguageCode =  'en';
    $params->reservation = new stdClass();
    $params->reservation->EmailRecipient2 = 'yonia@yopmail.com';
    $params->reservation->EmailRecipient3 = 'yonia2@yopmail.com';
    $params->reservation->FirstName = 'Yoni'
    foreach($extras as $id=>$extra)
    {
        $params->Extras[$id]= new stdClass();
        $params->Extras[$id]->SelectedExtra = new stdClass();
        $params->Extras[$id]->ExtensionData = new stdClass();
        $params->Extras[$id]->SelectedExtra->Amount = 1;
        $params->Extras[$id]->SelectedExtra->ID = $extra;
    }

Вот отправленный SOAP-запрос:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/">
  <SOAP-ENV:Body>
    <ns1:CreateReservation>
      <ns1:loginInfo>
        <ns1:UserName>monusername</ns1:UserName>
        <ns1:Password>monpass</ns1:Password>
        <ns1:LanguageCode>en</ns1:LanguageCode>
      </ns1:loginInfo>
      <ns1:reservation>
        <ns1:EmailRecipient2>yonia@yopmail.com</ns1:EmailRecipient2>
        <ns1:EmailRecipient3>yonia2@yopmail.com</ns1:EmailRecipient3>
        <ns1:FirstName>Yoni</ns1:FirstName>
      </ns1:reservation>
    </ns1:CreateReservation>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

В этом запросе Soap я не могу найти массив объектов Extras.

Есть ли у вас какие-либо идеи о том, как мне создать свой объект для его правильной отправки?

1 Ответ

1 голос
/ 21 декабря 2011

Я решил проблему, используя другой пост, и много предположительных.

$params->Extras = array_to_objecttree($params->Extras);

здесь описывается array_to_objecttree Передача массива в функцию SOAP в PHP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...