如何在SOAP PHP中选择端口?我正在开发一个TravelPort作为GDS的旅行预订网站。 我刚刚开始查看他们的WSDL,我正在尝试使用它们用PHP调用他们的服务器。我无法做到。我知道服务器可以工作,因为如果我制作一个请求并通过cURL发送它,我会得到我期望的响应,但是通过使用和调整他们自己的sample code(接受保密协议,然后点击“示例”代码“看”,我不会去任何地方。
通过查看SOAP PHP模块生成的请求,我认为问题在于它使用了错误的函数。我认为我不能透露整个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)"
看起来唯一的“功能”就是“服务”。但我不知道我会把这些东西放在括号中。
我没有其他想法。希望你能够提供帮助!
更新
我发现this article暴露了问题。但是,它指的是自己的模块,称为PHP Web Services。我需要用SOAP做同样的事情。我真的需要你的帮助......
答案 0 :(得分:5)
加载WSDL后,您应该能够使用__setLocation手动设置端点。
示例:
$client = new SoapClient('http://localhost/supplied_path?wsdl');
$client->__setLocation('http://localhost:8080/kestrel/AirService');
print_r($client->__getfunctions());