3

我将提供程序 wsdl 与 SoapClient 一起使用,但是当我使用命令 __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>

网络服务的位置与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 回答