Php 具有相同名称的WSDL函数。如何选择?
我将提供程序wsdl与SoapClient一起使用,但当我使用命令_getFunctions时,我得到如下结果:Php 具有相同名称的WSDL函数。如何选择?,php,xml,wsdl,Php,Xml,Wsdl,我将提供程序wsdl与SoapClient一起使用,但当我使用命令_getFunctions时,我得到如下结果: method1Rsp service(method1Req $parameters) method2Rsp service(method2Req $parameters) method3Rsp service(method3Req $parameters) method4Rsp service(method4Req $parameters) method5Rsp service(me
method1Rsp service(method1Req $parameters)
method2Rsp service(method2Req $parameters)
method3Rsp service(method3Req $parameters)
method4Rsp service(method4Req $parameters)
method5Rsp service(method5Req $parameters)
因此,我只能调用函数“service()”或使用\u soapCall('service',$info)
,但我总是得到“method1”模式。
如果我使用\uu doRequest()
我可以用一个自写的xml发送我想要的方法,并且效果很好,但是很遗憾。。。
如果我在$info数组中发送方法名,它也会使用第一个方法
问题:是否有方法使用\uuuSOAPCALL()
或服务函数调用特定方法,或者我必须修改wsdl
编辑:
下面是一个与\uu 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>
Web服务的位置是http://webservicename/AirService
尽管您必须使用这种方法。
这可以正常工作,但响应也是xml和字符串。此外,如果在将来的更新中更改wsdl文件,则不会更新模式。使用
\uuuSOAPCALL
返回stdClass对象并自动获取模式。我认为您可以使用自定义参数(method1Req或method2Req等)调用服务。PHPSoap库确定必要的方法本身假设您使用的是内部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。我如何做到这一点?你能给我举个例子来测试它吗?@castledom04你能提供WSDL吗?WSDL在这个链接中:在文件夹Air_v21_0中被称为Air.WSDL,这是API文档@castledom04:好的,复制/粘贴错误,但是我认为这个答案更多的是猜测,而不是基于知识的“真实”(tm)答案。我想知道,如果这不起作用,为什么会有人投赞成票。即使所有这些服务名称都是相同的(在所有不同的绑定中),此文档样式SOAP服务的服务URI也会因每个绑定和每个请求而有所不同。因此,如果位置和/或uri SoapClient选项在这里有用,我会尝试。请参见位置始终相同,
http://webservicename/AirService
根据xml请求,它返回正确的服务响应。但正如我所说,使用$client->\uuuSOAPCALL('service',$info)代码>或$client->service($info)
它总是生成第一个方法xml(method1Req),不管我在$info
中有什么值。嗯,我得到了不同的位置(但不是前两个,对),稍后例如:http://localhost:8080/kestrel/FlightService
-但是检查绑定,它们总是不同的,例如AirCreateReservationBinding
,airraysbinding
,FlightDetailsBinding
,airrowfaresearchbinding
,airreyvelowfaresearchbinding
,airreyvelowfaresearchbinding
。。。(名为service的操作比那些服务方法要多。看起来您需要指定绑定。很抱歉,到目前为止,还不知道它是如何工作的。甚至不知道这意味着什么。我也很困惑,我将尝试找到方法。我想关键在于wsdl和SOAP客户端如何读取它,以及\u doRequest
发送写入十个xml工作正常。是的,通过_doRequest,你可以“做任何事情”:)你能在你的问题中添加这样一个工作请求的示例xml吗?这可能会帮助我(和其他人)发现一些东西。