簡體   English   中英

使用PHP肥皂消耗OpenTravel WSDL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM