如何在php WSDL中指定端口名称

问题描述 投票:6回答:1

如何在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)"

似乎唯一的“功能”是“服务”。但是我不知道该把什么放在括号中。

我没有其他想法。希望您能为您提供帮助!

UPDATE:

我发现this article暴露了问题所在。但是,它引用了他们自己的名为PHP Web Services的模块。我需要对SOAP做同样的事情。我真的需要您的帮助。

php soap wsdl travelport-api
1个回答
6
投票

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

示例:

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

print_r($client->__getfunctions());
© www.soinside.com 2019 - 2024. All rights reserved.