我正在使用带有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对象并自动获取模式。
答案 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。