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


PHP SoapClient: how to invoke another method when service has same method names

我正在使用带有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));

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

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

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

我假设每个参数都HotelSearchAvailabilityReqHotelMediaLinksReqHotelDetailsReq继承自基结构,或者可能不是。但是,如果对每种结构类型使用不同的类并使用类映射选项,则它可能会起作用。

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

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

很简单,把它称为函数:

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