сложное SOAP-сообщение с использованием файла, созданного wsd2php - PullRequest
1 голос
/ 10 января 2011

привет стека переполнения.

Я возился с клиентом SOAP с использованием собственного расширения PHP5. Сообщение SOAP, которое я пытаюсь создать, использует сложные типы данных.

До сих пор я создал файл класса с помощью инструмента wsdl2php (http://www.urdalen.no/wsdl2php/). Однако я успешно создал части моего сообщения SOAP, я уверен, что я делаю это неправильно. См. Ниже:

Сообщение, которое я хочу создать:

<soap:Envelope>
 <soap:Body>
  <OTA_HotelAvailRQ Version="1.0" AvailRatesOnly="true" TimeStamp="2010-10-06T16:14:26+08:00">
   <POS>
    <Source>
     <RequestorID ID="test" Type="10"/>
    </Source>
   </POS>
   <AvailRequestSegments>
    <AvailRequestSegment AvailReqType="NonRoom">
     <HotelSearchCriteria AvailableOnlyIndicator="1">
      <Criterion>
       <HotelRef HotelCode="PCBCMS"/>
       <StayDateRange Start="2010-10-06" End="2010-11-06"/>
      </Criterion>
     </HotelSearchCriteria>
    </AvailRequestSegment>
   </AvailRequestSegments>
  </OTA_HotelAvailRQ>
 </soap:Body>
</soap:Envelope>

С помощью следующего кода я могу создать часть сообщения, однако, когда дело доходит до:

// Hotel Availability
$qOTAhrq = new OTA_HotelAvailRQ();

$qOTAhrq->AvailRequestSegments['AvailRequestSegment'] = array('AvailReqType' => 'NonRoom');
$qOTAhrq->AvailRequestSegments['AvailRequestSegment']['HotelSearchCriteria'] = array();
$qOTAhrq->AvailRequestSegments['AvailRequestSegment']['HotelSearchCriteria']['Criterion'] = array();

Следующее сообщение выдается с помощью кода выше. Что происходит не так: (

<ns1:AvailRequestSegments>
 <ns1:AvailRequestSegment AvailReqType="NonRoom">
   <ns1:HotelSearchCriteria/>
 </ns1:AvailRequestSegment>
</ns1:AvailRequestSegments>

needs to be


<ns1:AvailRequestSegments>
 <ns1:AvailRequestSegment AvailReqType="NonRoom">
   <ns1:HotelSearchCriteria AvailOnlyIndicator="1"/>
 </ns1:AvailRequestSegment>
</ns1:AvailRequestSegments>

Надеюсь, мой вопрос достаточно обширный, чтобы понять, чего я пытаюсь достичь. Использую ли я правильный метод для создания моего сообщения XML-мыла, или я не должен использовать массивы таким образом? Есть ли способ, где я могу напечатать что-то вроде:

$ qOTAhrq-> В наличииRequestSegments-> В наличииRequestSegment = array ('AvailabilityReqType =' nonRoom ');

ссылки: мой файл классов: файл классов wsdl (создан wsdl2php)

, пожалуйста, помогите - возможно, мое сообщение поможет кому-то еще в будущем:)

1 Ответ

2 голосов
/ 10 января 2011

Я не совсем уверен, но я не вижу ни одного сегмента кода, который оценил бы: <ns1:HotelSearchCriteria AvailOnlyIndicator="1"/> Возможно, вы хотите что-то вроде

$qOTAhrq->AvailRequestSegments['AvailRequestSegment']['HotelSearchCriteria'] = array("AvailOnlyIndicator"=>"1");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...