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

Gio*_* B. 6 php soap wsdl

如何在SOAP PHP中选择端口?我正在开发一个TravelPort作为GDS的旅行预订网站.我刚刚开始查看他们的WSDL,我正在尝试使用它们用PHP调用他们的服务器.我无法做到.我知道服务器工作,因为如果我制作一个请求并通过cURL发送它,我得到我期望的响应,但通过使用和调整他们自己的示例代码(接受保密协议,然后单击"示例代码"到看),我不会去任何地方.

通过查看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>
Run Code Online (Sandbox Code Playgroud)

显然,脚本总是基于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)"
Run Code Online (Sandbox Code Playgroud)

看起来唯一的"功能"就是"服务".但我不知道我会把这些东西放在括号中.

我没有其他想法.希望你能够提供帮助!

更新:

我发现这篇文章揭露了这个问题.但是,它指的是自己的模块,称为PHP Web Services.我需要用SOAP做同样的事情.我真的需要你的帮助..

Ska*_*son 5

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

例:

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

print_r($client->__getfunctions());
Run Code Online (Sandbox Code Playgroud)