问候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)
请帮助 - 也许我的信息将在未来帮助其他人:)
答案 0 :(得分:2)
我不完全确定,但我似乎找不到任何可评估为:<ns1:HotelSearchCriteria AvailOnlyIndicator="1"/>
的代码段
也许你想要类似的东西,
$qOTAhrq->AvailRequestSegments['AvailRequestSegment']['HotelSearchCriteria'] = array("AvailOnlyIndicator"=>"1");