如何在phpWSDL中指定端口名


How to specify port name in php WSDL

如何在SOAP PHP中选择端口?我正在开发一个以TravelPort为GDS的旅游预订网站。我刚刚开始研究他们的WSDL,并尝试使用它们来用PHP调用他们的服务器。我做不到。我知道服务器是有效的,因为如果我设计一个请求并通过cURL发送,我会得到我期望的响应,但通过使用和调整他们自己的示例代码(接受保密协议,然后单击"示例代码"查看),我哪儿也不会去。

通过查看SOAPPHP模块生成的请求,我认为问题在于它使用了错误的函数。我不认为我可以公开整个WSDL,但这里有一段摘录:

<!-- Service -->
<service name="AirService">
    <port name="AirRepriceSearchPort"
          binding="tns:AirRepriceSearchBinding">
        <soap:address
                location="http://localhost:8080/kestrel/AirService" />
    </port>
    <port name="AirScheduleSearchPort"
          binding="tns:AirScheduleSearchBinding">
        <soap:address
                location="http://localhost:8080/kestrel/AirService" />
    </port>
    <port name="AirLowFareSearchPort"
          binding="tns:AirLowFareSearchBinding">
        <soap:address
                location="http://localhost:8080/kestrel/AirService" />
    </port>

显然,脚本总是基于AirReprice模块而不是LowFareSearch模块生成请求。事实上,如果我编辑WSDL并将"AirLowFareSearchPort"作为第一个元素,那么请求就可以工作了。

我试过以下几种:

  • 使用$client->AirLowFareSearchPort($data)指定要执行的操作,但它不是有效的函数;

  • 我使用$client->__getfunctions():获得了所有的功能

 [0]=>
 string(48) "AirRepriceRsp service(AirRepriceReq $parameters)"
 [1]=>
 string(56) "ScheduleSearchRsp service(ScheduleSearchReq $parameters)"
 [2]=>
 string(54) "LowFareSearchRsp service(LowFareSearchReq $parameters)"
 [3]=>
 string(66) "LowFareSearchAsynchRsp service(LowFareSearchAsynchReq $parameters)"

看起来唯一的"功能"是"服务"。但我不知道该把这些东西放在括号里。

我没有其他想法。希望你能帮忙!

更新:

我发现这篇文章暴露了这个问题。然而,它引用了他们自己的模块,称为PHPWeb服务。我需要对SOAP做同样的事情。我真的需要你的帮助。。

加载WSDL后,您应该能够使用__setLocation手动设置端点。

示例:

$client = new SoapClient('http://localhost/supplied_path?wsdl');
$client->__setLocation('http://localhost:8080/kestrel/AirService');
print_r($client->__getfunctions());