Задать вопрос

Как реализовать SOAP запрос на PHP?

День добрый.
С SOAP на PHP плотно не работал, потому решил обратиться сюда за советом.
Задача. Реализовать поиск тура через SOAP запрос.
Описание тут - https://www.natalie-tours.ru/webservices_RU/

Составить "один уровень" иерархии вроде понял как.
Т.е например код

<?php

$req_pms = new stdClass();
$req_pms->wsLoginPassword = new stdClass();
$req_pms->wsLoginPassword->wslogin = "MY_LOGIN";
$req_pms->wsLoginPassword->wspassword = "MY_PASSWORD";

$req_data = new SoapVar($req_pms, SOAP_ENC_OBJECT, 'wsLoginPassword', 'www.natalie-tours.ru/webservices');
$client = new SoapClient('www.natalie-tours.ru/webservice/BookingWS?WSDL');

echo '';
print_r($client->getAllAgeTypes($req_data));

?>

Все ясно. Все понятно.
А как реализовать, например, запрос addTourproduct?
Т.е там разные пространства имен. Вложенность и т.д.
Т.е так уже не написать.

$req_pms = new stdClass();
$req_pms->wsLoginPassword = new stdClass();
$req_pms->wsLoginPassword->wslogin = "MY_LOGIN";
$req_pms->wsLoginPassword->wspassword = "MY_PASSWORD";
$req_pms->addToOrderRequest = new stdClass();
$req_pms->addToOrderRequest->orderId = 123;

Заранее спасибо за любую помощь.
  • Вопрос задан
  • 8848 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
а почему вы таким путём пошли а не например так:
ini_set('soap.wsdl_cache_enabled', '0'); 
	ini_set('soap.wsdl_cache_ttl', '0'); 
		try { 
                // Создание SOAP-клиента
				
                $client = new SoapClient("http://www.natalie-tours.ru/webservice/BookingWS?WSDL");
		$params = array( 
				'wsLoginPassword' => array(
					'wslogin' => "MY_LOGIN",
					 'wspassword' => "MY_PASSWORD"
				));
				
                $request = $client->getAllAgeTypes($params);
		$result = $request->getAllAgeTypes->result;
		echo "$result";
		} 
		catch (SoapFault $exception) 
			{
				echo $exception->getMessage(); 
			}

Тогда проще организовывать любой уровень вложенности.
Ответ написан
Комментировать
@ChernovGV
А как реализовать, например, запрос addTourproduct?
Т.е там разные пространства имен. Вложенность и т.д.
Т.е так уже не написать.

Почему нет?
В этой статье подробно все рассказано, тм вот такой пример:
$req = new Request();
$req->messageList = new MessageList();
$req->messageList->message = new Message();
$req->messageList->message->phone = '79871234567';
$req->messageList->message->text = 'Тестовое сообщение 1';
$req->messageList->message->date = '2013-07-21T15:00:00.26';
$req->messageList->message->type = 15;

$client = new SoapClient(   "http://{$_SERVER['HTTP_HOST']}/smsservice.wsdl.php",
                            array( 'soap_version' => SOAP_1_2));
var_dump($client->sendSms($req));


Т.е. просто нужно собрать необходимый объект(см. документацию сервиса), и передать его в ваш метод:
$client->addTourproduct($object);
О пространстве имен, не беспокойтесь, они проставляются автоматически на основании WSDL.
Ответ написан
Комментировать
Добрый день! Удалось ли вам реализовать SOAP запрос? Не могли бы показать рабочий пример, если несложно, потому что у меня на локал не работает. Спасибо!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы