我正在使用带有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)
我假设每个参数都HotelSearchAvailabilityReq
、HotelMediaLinksReq
和HotelDetailsReq
继承自基结构,或者可能不是。但是,如果对每种结构类型使用不同的类并使用类映射选项,则它可能会起作用。
如果它不起作用,那么我已经遇到了这个问题,并且不得不覆盖 SoapClient::__doRequest
方法以更新发送的 XML 请求,以确保发送的元素具有良好的类型。
您是否使用 WSDL 到 php 生成器来简化请求创建和发送过程?你试过包生成器吗?
很简单,把它称为函数:
$client = new SoapClient ($wsdl_location);
$response = $client->HotelDetails($params);