3

SoapClient でプロバイダー wsdl を使用していますが、コマンド __getFunctions を使用すると、次のような結果が得られます。

method1Rsp service(method1Req $parameters)
method2Rsp service(method2Req $parameters)
method3Rsp service(method3Req $parameters)
method4Rsp service(method4Req $parameters)
method5Rsp service(method5Req $parameters)

したがって、関数「service()」を呼び出すか使用することしかできません__soapCall('service',$info)が、常に「method1」スキーマを取得します。私が使用する場合__doRequest()、必要なメソッドを自己書き込みxmlで送信でき、正常に動作しますが、残念です... $info配列でメソッド名を送信すると、最初のメソッドも使用されます。

質問__soapCall():またはサービス関数を使用して特定のメソッドを呼び出す方法はありますか、それとも wsdl を変更する必要がありますか?

編集

で使用される xml リクエストを次に示します__doRequest

<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <LowFareSearchReq TargetBranch="" xmlns="http://www.travelport.com/schema/air_v20_0" xmlns:com="http://www.travelport.com/schema/common_v17_0">
            <com:BillingPointOfSaleInfo OriginApplication="UAPI"/>
            <SearchAirLeg>
                <SearchOrigin>
                    <CityOrAirport Code="LON" xmlns="http://www.travelport.com/schema/common_v17_0" />
                </SearchOrigin>
                <SearchDestination>
                    <CityOrAirport Code="MUC" xmlns="http://www.travelport.com/schema/common_v17_0" />
                </SearchDestination>
                <SearchDepTime PreferredTime="2013-02-10" />
                <AirLegModifiers>
                    <PreferredCabins>
                        <CabinClass Type="Economy" />
                    </PreferredCabins>
                </AirLegModifiers>
            </SearchAirLeg>
            <SearchPassenger Code="ADT" Age="30" xmlns="http://www.travelport.com/schema/common_v17_0"/>
            <AirPricingModifiers CurrencyType="EUR">
            </AirPricingModifiers>
        </LowFareSearchReq>
    </s:Body>
</s:Envelope>

Web サービスの場所は、http://webservicename/AirService使用する必要がある方法に関係なくあります。これは問題なく動作しますが、応答も xml 文字列です。さらに、将来の更新で wsdl ファイルを変更しても、スキーマは更新されません。Using__soapCallは stdClass オブジェクトを返し、スキーマを自動的に取得します。

4

2 に答える 2

1

カスタムパラメーター(method1Reqまたはmethod2Reqなど)でサービスを呼び出すことができると思います。そして PHPSoap ライブラリは必要なメソッド自体を決定します

于 2013-02-07T09:57:35.533 に答える
0

内部 SOAP ライブラリを使用していると仮定すると、正しいパラメーターを使用して個別の操作を呼び出すことができると思います。内部ヘルパー クラス SoapParam を使用して実行できます。method3req にユーザー名とログインのパラメーターが必要だと想像してみましょう。使用したい場合は、次のようなものが必要です。

 $soap = new SoapClient( $wsdl );

 class method3req{
   public $username;
   public $password;
 }

 $m3r = new method3req();

 $m3r->username = new SoapVar( 'user', SOAP_STRING, $namespace,...);
 $m3r->password = new SoapVar( 'pwd', SOAP_STRING, $namespace,...);

 $tmp = new SoapVar( $m3r, SOAP_ENV_OBJECT, $namespace, ...);
 $soap->__soapCall( 'service', $tmp ); 

ヘルパー クラス SoapParam も検索できます。

于 2013-02-20T22:18:38.057 に答える