Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具有相同名称的WSDL函数。如何选择?_Php_Xml_Wsdl - Fatal编程技术网

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

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

我将提供程序wsdl与SoapClient一起使用,但当我使用命令_getFunctions时,我得到如下结果:

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吗?这可能会帮助我(和其他人)发现一些东西。