WSDL函数具有相同的名称。如何选择一个?

时间:2013-02-07 09:52:54

标签: php xml wsdl

我正在使用带有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?

修改

以下是与__doRequest一起使用的xml请求:

<?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>

尽管您必须使用该方法,但网络服务的位置为http://webservicename/AirService。 这工作正常,但响应也是和xml字符串。此外,如果我在将来的更新中更改wsdl文件,则不会更新模式。使用__soapCall返回一个stdClass对象并自动获取模式。

2 个答案:

答案 0 :(得分:1)

我认为您可以使用自定义参数调用服务(方法1请求或方法2请求等)。而PHP Soap库确定了必要的方法本身

答案 1 :(得分: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。