使用wsd2php生成的复杂SOAP消息

时间:2011-01-10 04:32:59

标签: php class soap wsdl

问候stackoverflow。

我一直在使用PHP5的原生扩展来修补SOAP客户端。我试图创建的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 soap消息,还是我不应该以这种方式使用数组?有没有办法可以输入类似的东西:

$ qOTAhrq-&gt; AvailRequestSegments-&gt; AvailRequestSegment = array('AvailReqType ='nonRoom');

links:我的类文件:wsdl class file (created by wsdl2php)

请帮助 - 也许我的信息将在未来帮助其他人:)

1 个答案:

答案 0 :(得分:2)

我不完全确定,但我似乎找不到任何可评估为:<ns1:HotelSearchCriteria AvailOnlyIndicator="1"/>的代码段 也许你想要类似的东西,

$qOTAhrq->AvailRequestSegments['AvailRequestSegment']['HotelSearchCriteria'] = array("AvailOnlyIndicator"=>"1");