PHP SoapClient:当service具有相同的方法名时,如何调用另一个方法

时间:2016-02-19 09:49:12

标签: php web-services soap wsdl soap-client

我正在使用带有WSDL的PHP​​ SoapClient。 Web服务返回这样的功能:

0. BaseHotelSearchRsp service(HotelSearchAvailabilityReq $parameters)
1. HotelMediaLinksRsp service(HotelMediaLinksReq $parameters)
2. HotelDetailsRsp service(HotelDetailsReq $parameters)

当我以这种方式调用服务时:

$mySoapClient = new \SoapClient($wsdl_location);
$mySoapClient->__soapCall('service', array($params));

始终使用0. BaseHotelSearchRsp service(HotelSearchAvailabilityReq $parameters)参数调用方法HotelSearchAvailabilityReq

甚至$mySoapClient$params个合适的参数上验证HotelSearchAvailabilityReq(即它不包含在SOAP请求传递的参数中,这些参数对HotelSearchAvailabilityReq数据类型无效)。

问题将如何调用另一种服务方法?即2. HotelDetailsRsp service(HotelDetailsReq $parameters)

2 个答案:

答案 0 :(得分:2)

我假设每个参数HotelSearchAvailabilityReqHotelMediaLinksReqHotelDetailsReq都是从基础结构继承的,或者可能不是。但是,如果为每个结构类型使用不同的类并使用classmap选项,它可能会起作用。

如果它不起作用,那么我已经遇到了这个问题并且必须覆盖SoapClient::__doRequest方法以更新发送的XML请求,以确保发送的元素具有良好的类型。

您是否使用WSDL到php生成器来简化请求创建和发送过程?你试过PackageGenerator吗?

答案 1 :(得分:-2)

简单,称之为功能:

$client = new SoapClient ($wsdl_location);
$response = $client->HotelDetails($params);