Я использую провайдер wsdl с SoapClient, но когда я использую команду __getFunctions, я получаю что-то вроде этого:
method1Rsp service(method1Req $parameters) method2Rsp service(method2Req $parameters) method3Rsp service(method3Req $parameters) method4Rsp service(method4Req $parameters) method5Rsp service(method5Req $parameters)
Таким образом, я могу только вызвать функцию «service ()» или использовать __soapCall('service',$info)
но я всегда получаю схему «method1». Если я использую __doRequest()
я могу отправить метод, который я хочу, в self writen xml и отлично работает, но очень жаль … Если я отправлю имя метода в массив $ info, он также использует первый метод.
Вопрос : Есть ли способ вызвать определенные методы, используя __soapCall()
или служебную функцию, или мне нужно изменить wsdl?
Изменить :
Вот запрос xml, используемый с __doRequest
:
<?xml version="1.0" encoding="UTF-8"?> <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <LowFareSearchReq TargetBranch="" xmlns="http://www.travelport.com/schema/air_v20_0" xmlns:com="http://www.travelport.com/schema/common_v17_0"> <com:BillingPointOfSaleInfo OriginApplication="UAPI"/> <SearchAirLeg> <SearchOrigin> <CityOrAirport Code="LON" xmlns="http://www.travelport.com/schema/common_v17_0" /> </SearchOrigin> <SearchDestination> <CityOrAirport Code="MUC" xmlns="http://www.travelport.com/schema/common_v17_0" /> </SearchDestination> <SearchDepTime PreferredTime="2013-02-10" /> <AirLegModifiers> <PreferredCabins> <CabinClass Type="Economy" /> </PreferredCabins> </AirLegModifiers> </SearchAirLeg> <SearchPassenger Code="ADT" Age="30" xmlns="http://www.travelport.com/schema/common_v17_0"/> <AirPricingModifiers CurrencyType="EUR"> </AirPricingModifiers> </LowFareSearchReq> </s:Body> </s:Envelope>
Местоположение http://webservicename/AirService
несмотря на метод, который вы должны использовать. Это работает нормально, но ответ также есть и строка xml. Более того, схемы не обновляются, если я изменю файл wsdl в будущем обновлении. Использование __soapCall
возвращает объект stdClass и автоматически получает схемы.
Я думаю, вы можете позвонить в службу с помощью custom paramert (method1Req или method2Req и т. Д.). И библиотека PHPSoap сама определяет необходимый метод
Предполагая, что вы используете внутреннюю библиотеку SOAP, я думаю, что вы можете вызывать отдельные операции, используя правильные параметры. Вы можете сделать это, используя внутренний вспомогательный класс SoapParam. Предположим, что method3req нуждается в имени пользователя и параметрах входа. Если вы хотите использовать его, вы должны иметь что-то вроде:
$soap = new SoapClient( $wsdl ); class method3req{ public $username; public $password; } $m3r = new method3req(); $m3r->username = new SoapVar( 'user', SOAP_STRING, $namespace,...); $m3r->password = new SoapVar( 'pwd', SOAP_STRING, $namespace,...); $tmp = new SoapVar( $m3r, SOAP_ENV_OBJECT, $namespace, ...); $soap->__soapCall( 'service', $tmp );
Вы также можете найти вспомогательный класс SoapParam.