SoapClient - подключение

masterlelik

Новичок
Создаю объект
$client = new SoapClient($url);
и надо получить ответ
$result = $client->__doRequest($data, $location, $action, "1.1");

читал на php.net документацию и примеры, но так и не понял
что надо передавать в $location
а что в $action

Тех. поддержка, сервис к которому необходимо подключиться, написала, что для получения информации надо использовать функцию
http://site.com/OTA2004AService/GetHotelDetails
и не ясно что из данного урла передавать как $location, а что как $action
 

dadoc

Новичок
в конструкторе какое значение $url подсовываете?

если ссылка на WSDL, то попробуйте $client->getHotelDetails($data) вызвать.

по существу вопроса, $location это адрес веб сервиса аля url, а $action будет http://site.com/OTA2004AService/GetHotelDetails, где подозреваю http://site.com/OTA2004AService пространство имен их веб сервиса, а GetHotelDetails метод.
 

masterlelik

Новичок
$url="https://site.com/interface/channelconnect.asmx?wsdl";
попробовал
$client->getHotelDetails($data)
вернуло:
stdClass Object
(
[PrimaryLangID] => en
[Errors] => stdClass Object
(
[Error] => stdClass Object
(
[_] =>
[ShortText] => Error processing message. Please check to ensure all required elements and attributes have been passed.
)
)
)
в $data отправляется XML-пакет, в котором все правильно, тех. поддержка проверила, сказала с пакетом все ок.
При использовании метода $client->__getFunctions(); в одной из ячеек получаем:
[8] => OTA_HotelDescriptiveInfoRS GetHotelDetails(OTA_HotelDescriptiveInfoRQ $hotelDescReq)
 

dadoc

Новичок
Судя по всему сервис document/literal, вообще реализация работы с веб сервисами document/literal в php клиенте отсутвует.

Уверен, Вы подсовываете XML уже в ввиде строки ($data) поэтому и не работает. Попробуйте вместо строки $data подсунуть пхпшный stdClass в котором установлены свойства такие же как атрибуты/элементы в XML запросe (ноды в XML будут тоже stdClass), не факт что это сработает, потому что soap клиент может не правильно сериолизовать объект в запросе.

Проще будет отказаться от php soap, формировать soap пакеты вручную (они тут будут простые) и посылать запросы используя curl указав правильный SOAPAction.
 

jkhsdgf

Новичок
Вообще-то проще работать в wsdl режиме:
1) $client = new SoapClient ('wsdlFile');
объект создает уже с нужными свойствами и методами.

2) Затем присвоение нужным свойствам объекта нужных значений и после этого

3) $client->__soapCall("Метод", параметры)
или $client->Метод(параметры)

ответ сервера будет в свойстве $client->__last_response
 
Сверху