[英]What flavor of SOAP is defined by this WSDL, and how to consume it with PHP?
[英]Consume OpenTravel WSDL with php soap
如何處理此代碼並使用OTA WSDL? 模式定義為http://schemas.liquid-technologies.com/OpenTravel/2008B/?page=http___www_opentravel_org_ota_2003_05.html
我嘗試了這個:
$client = new \SoapClient('myservice?wsdl', array(
'trace'=>true
));
$data = [
'OTA_VehAvailRateRQ'=>[
'POS'=>[
'Source'=>[
'RequestorID'=>[
'ID'=>'myID',
'MessagePassword'=>'myPASSWORD'
]
]
],
'VehAvailRQCore'=>[
'VehRentalCore'=>[
'PickUpDateTime'=>'2018-05-25T08:30:00+00:00',
'ReturnDateTime'=>'2018-05-26T08:30:00+00:00',
'PickUpLocation'=>[
'LocationCode'=>'CODE',
],
'ReturnLocation'=>[
'LocationCode'=>'CODE',
]
]
]
]
];
$result = $client->__soapCall('OTA_VehAvailRate', $data);
並獲取此xml,其中item,key和value錯誤。
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.opentravel.org/OTA/2003/05">
<SOAP-ENV:Body>
<ns1:OTA_VehAvailRateRQ>
<ns1:POS>
<ns1:Source>
<item>
<key>RequestorID</key>
<value>
<item>
<key>ID</key>
<value>bookingservice</value>
</item>
<item>
<key>MessagePassword</key>
<value>123booking</value>
</item>
</value>
</item>
</ns1:Source>
</ns1:POS>
<ns1:VehAvailRQCore>
<ns1:VehRentalCore PickUpDateTime="2018-05-25T08:30:00+00:00" ReturnDateTime="2018-05-26T08:30:00+00:00">
<ns1:PickUpLocation/>
<ns1:ReturnLocation/>
</ns1:VehRentalCore>
</ns1:VehAvailRQCore>
</ns1:OTA_VehAvailRateRQ>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
謝謝!
首先編輯:
不,也許我的wsdl定義不正確。 我也嘗試過這個:
$data = '<OTA_VehAvailRateRQ>
<POS>
<Source>
<RequestorID ID="myID" MessagePassword="myPASSWORD">
<CompanyName>WEB001</CompanyName>
</RequestorID>
</Source>
</POS>
<VehAvailRQCore>
<VehRentalCore PickUpDateTime="2018-05-25T08:30:00+00:00" ReturnDateTime="2018-05-26T08:30:00+00:00">
<PickUpLocation LocationCode="APR" />
<ReturnLocation LocationCode="APR" />
</VehRentalCore>
</VehAvailRQCore>
</OTA_VehAvailRateRQ>';
$soapBody = new \SoapVar($data, \XSD_ANYXML, null, 'http://www.opentravel.org/OTA/2003/05');
$result = $client->__soapCall('OTA_VehAvailRate', [$soapBody]);
但這是回應
Cannot find dispatch method for {}OTA_VehAvailRateRQ
我猜測(太難測試了)它的行為不當,因為根據該架構, RequestorID
既沒有屬性,也沒有名為ID
的子元素。 嘗試這個 ...
$data = [
'OTA_VehAvailRateRQ'=>[
'POS'=>[
'Source'=>[
'RequestorID'=>[
'_'=>'myID',
'MessagePassword'=>'myPASSWORD'
]
]
],
...
_
必須是數組中的第一個元素。 我認為這應該給:
<RequestorID MessagePassword="myPASSWORD">myID</RequestorID>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.