0

SOAP 経由で Web サービスを呼び出そうとしています。PHPリクエストはほぼ正しいように見えます。以下は、SOAP PHP コードと XML です。何が間違っているのか教えてください。私は技術的にオブジェクトの応答を取得し続けていますが、プロパティはありません。

これはエラーメッセージです:

致命的なエラー: キャッチされない SoapFault 例外: [Client] SOAP-ERROR: Encoding: object has no 'schema' プロパティ

$client = new SoapClient(
    'Link.asmx?wsdl',
    array(
        'soap_version' => SOAP_1_1,
        'trace'        => 1,
    )
);

$result = $client->OTA_VehAvailRate(
    array(
        'OTA_VehAvailRateRQ' => array(
            'VehAvailRQCore' => array(
                'VehRentalCore' => array(
                    'type'           => 'VehicleRentalCoreType',
                    'PickUpLocation' => array(
                        'LocationCode' => 'ERLAX01',
                    ),
                    'PickUpDateTime' => '2013-03-14T12:00:00',
                    'ReturnDateTime' => '2013-03-16T12:00:00',
                    'ReturnLocation' => array(
                        'LocationCode' => 'ERLAX01',
                    ),
                ),
                'VendorPrefs'   => array(
                    'VendorPref' => array(
                        'Code'        => '*****',
                        'CodeContext' => '******',
                    ),
                ),
                'VehPrefs'      => array(
                    'VehPref' => array(
                        'Code' => 'HFG',
                    ),
                ),

                'RateQualifier' => array(
                    'PromotionCode' => '',
                    'RateQualifier' => '',
                ),
            ),
        )
    )
);

print_r($result);

これが XML スキーマです。

<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <tns:OTA_VehAvailRate xmlns:tns="http://www.opentravel.org/OTA/2003/05" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:tnsC="http://www.w3.org/1999/xhtml" xmlns:vs="http://schemas.microsoft.com/Visual-Studio-Intellisense" xmlns:tnsB="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <AA:OTA_VehAvailRateRQ xmlns:AA="http://www.opentravel.org/OTA/2003/05" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" Version="0">
                <AA:VehAvailRQCore>
                    <AA:VehRentalCore xs:type="AA:VehicleRentalCoreType" PickUpDateTime="2013-03-14T12:00:00" ReturnDateTime="2013-03-16T12:00:00">
                        <AA:PickUpLocation LocationCode="ERLAX01" />
                        <AA:ReturnLocation LocationCode="ERLAX01" />
                    </AA:VehRentalCore>
                    <AA:VendorPrefs>
                        <AA:VendorPref Code="****" CodeContext="******" />
                    </AA:VendorPrefs>
                    <AA:VehPrefs>
                        <AA:VehPref Code="HEG" />
                    </AA:VehPrefs>
                    <AA:RateQualifier PromotionCode="" RateQualifier="" />
                </AA:VehAvailRQCore>
            </AA:OTA_VehAvailRateRQ>
        </tns:OTA_VehAvailRate>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

私が間違っていることを教えてください。どうもありがとう

POST /OTA2011A/OTASrvc.asmx HTTP/1.1
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.opentravel.org/OTA/2003/05/OTA_VehAvailRate"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <OTA_VehAvailRate xmlns="http://www.opentravel.org/OTA/2003/05">
      <OTA_VehAvailRateRQ>
        <xsd:schema>schema</xsd:schema>xml</OTA_VehAvailRateRQ>
    </OTA_VehAvailRate>
  </soap:Body>
</soap:Envelope>
4

1 に答える 1

0

OTA に取り組んでいる場合は、https://github.com/goetas-webservices/soap-clientを試すことを強くお勧めします。

PHP から完全に PHP に依存しない SOAP クライアントですext-soap。すでに PSR7、マルチクライアントをサポートしており、IDE を介してタイプヒント用のクラスを生成することができます。

https://github.com/goetas-webservices/soap-client-demoは、クライアントを使用して一般的な SOAP Web サービスを使用する方法を確認できるデモ プロジェクトです。

このプロジェクトは、内部で OTA をテスト スイートとして使用するhttps://github.com/goetas-webservices/xsd2phpに基づいています(テスト スイートは合格しています)。

于 2016-10-12T10:26:48.163 に答える