Шлюз поиска туров (xml)
Содержание
- 1 Описание сервиса
- 2 Подключение к сервису
- 3 Версионность
- 4 Логика работы с сервисом
- 5 Методы
Описание сервиса
API поиска туров позволит вам создать собственную туристическую поисковую систему. Используя методы этого сервиса, вы сможете:
- Загружать справочники городов вылета, стран, курортов, отелей, категорий отелей, видов питания, туроператоров;
- Искать продукты более чем 130 крупнейших туроператоров России.
- Настроить автоматическое SMS- и email-оповещение менеджеров о заказах.
| Внимание! На момент написания настоящего руководства функция онлайн бронирования сервисом не предусмотрена. |
| Внимание! Доступ к данным отдельных операторов может быть ограничен лицензией. По всем вопросам, пожалуйста, обращайтесь в Службу технической поддержки Слетать.ру по тел. 8(800)700-33-09 или по электронной почте support@sletat.ru. |
Это стандартный веб-сервис, предоставляющий WSDL-документ с описанием всех методов и типов данных. Версия, выпущенная на момент написания настоящего руководства, работает только по протоколу HTTP/2+TLS/1.2. Для большей совместимости с различными клиентами сервис основан на SOAP версии 1.1.
Взаимодействие с сервисом возможно одним из двух способов:
- Как с обычным веб-сервисом посредством SOAP-запросов, WSDL доступен.
- Как с сервисом WCF (Windows Communication Foundation) – самый простой способ, если клиент под .NET Framework 3.5 или выше.
Логика обработки запросов не зависит от способа работы с сервисом.
При передаче строк и XML-пакетов используется кодировка UTF-8.
Работа сервиса не требует сессий, и методы не зависят друг от друга с точки зрения очередности вызова. Таким образом, очередность вызова методов диктуется реализуемым алгоритмом работы с поисковым сервисом.
| Внимание! Сервис требует авторизации. Для работы используйте логин и пароль от личного кабинета на сайте sletat.ru. |
| Внимание! Работа с поисковым запросом (создание, запрос состояния и загрузка туров) должна выполняться с одного IP-адреса. При выполнении этого условия взаимодействие с сервисом возможно с нескольких IP адресов. |
Подключение к сервису
Чтобы начать работу с сервисом, зарегистрируйтесь на сайте sletat.ru и получите тестовую лицензию, обратившись по электронной почте info@sletat.ru. После получения лицензии можно начинать работать с API.
Для работы с сервисом используйте WSDL-документ, расположенный по адресу:
https://module.sletat.ru/XmlGate.svc?singlewsdl
Современные среды разработки позволяют автоматически создавать все необходимые классы, используя WSDL-документ. Это избавляет разработчика от необходимости работать с SOAP-конвертами вручную.
Ниже подробно описаны алгоритмы работы с сервисом для клиентов, использующих .NET Framework.
Старый клиент на .NET 1.0 - 2.0
Добавьте в проект ссылку на WSDL документ, используя Web Reference. После добавления ссылки ваш проект готов к работе с сервисом. Ниже приведен пример вызова метода для получения списка городов вылета:
using System; using WebClient.Gate; namespace WebClient { class Program { static void Main() { // создаём экземпляр обёртки для работы с поисковым сервисом using (var gate = new Soap11Gate()) { // указываем данные для авторизации на сервисе gate.AuthInfo = new AuthData() { Login = "********", Password = "********" }; // далее нам доступен вызов любых методов сервиса var cities = gate.GetDepartCities(); } } } }
Не забудьте указать логин и пароль вашей учетной записи на сайте sletat.ru. Данные авторизации передаются первым параметром для всех методов сервиса.
Клиент на .NET 3.5 или выше
Добавьте в проект ссылку на WSDL-документ, используя Service Reference. После добавления ссылки ваш проект готов к работе с сервисом, ниже приведен пример вызова метода для получения списка городов вылета:
using System; using WcfClient.Gate; namespace WcfClient { class Program { static void Main() { // создаём экземпляр обёртки для работы с поисковым сервисом using (var gate = new Soap11GateClient()) { // указываем данные для авторизации на сервисе var authInfo = new AuthData() { Login = "********", Password = "********" }; // далее нам доступен вызов любых методов сервиса var cities = gate.GetDepartCities(authInfo); } } } }
Не забудьте указать логин и пароль вашей учетной записи на сайте sletat.ru. Данные авторизации передаются первым параметром для всех методов сервиса.
Версионность
Сервис может содержать несколько контрактов. Каждое изменение, несовместимое с предыдущей, публикацией будет вести к созданию контракта новой версии. Описание контрактов всех поддерживаемых версий включено в WSDL.
Каждый контракт веб-сервиса имеет уникальное имя, используемое для его идентификации. В имени любым удобным образом указывается его версия (например, в виде даты публикации). Для обозначения имени контракта используется URN (Uniform Resource Name).
Версия, выпущенная на момент написания настоящего руководства, состоит из одного контракта, использующего следующее имя:
urn:SletatRu:Soap11Gate:v1
Все разрабатываемые сервисы имеют префикс SletatRu, после которого указывается название контракта и его версия. Следующие версии контракта Soap11Gate будут иметь другое значение версии в последней части URN. Например:
urn:SletatRu:Soap11Gate:v2
Чтобы использовать нужную версию контракта, укажите её номер в SOAP конверте:
<soap:Envelope> <soap:Body> <GetDepartCities xmlns="urn:SletatRu:Soap11Gate:v1"> ... </GetProductKeys> </soap:Body> </soap:Envelope>
Если вы используете автоматически создаваемую обёртку, то при изменении текущего контракта или создании контракта новой версии заново создайте обёртку к поисковому сервису.
Новые версии контрактов будут создаваться только при наличии обратно несовместимых изменений. Все обратно совместимые изменения (добавление новых методов, добавление новых параметров в методы, добавление новых полей в структуры данных) будут добавляться в текущую версию контракта.
Версионность также соблюдается для всех типов данных.
Создание новых версий может быть сопряжено с иными задачами в ходе развития сервиса, например, группированием методов в контракты новых версий таким образом, чтобы в дальнейшем можно было отказаться от устаревших методов.
Логика работы с сервисом
Метод поиска туров CreateRequest использует идентификаторы городов вылета, стран, отелей и т.д., поэтому сначала нужно загрузить все соответствующие справочники, используя методы:
- GetDepartCities – список городов вылета;
- GetCountries – список доступных стран;
- GetCities – список курортов;
- GetHotelStars – список категорий отелей;
- GetMeals – список типов питания;
- GetHotels – список отелей;
- GetTourOperators – список туроператоров.
- GetTourDates – список дат вылета для выбранного города.
После того как все справочники загружены и отображены пользователю, можно приступать к поиску туров. Для этого используются следующие методы:
- CreateRequest – создание поискового запроса;
- GetRequestState – получение данных о статусе загрузки туров для каждого туроператора;
- GetRequestResult – возвращает результаты поиска;
- ContinueSearch – продолжает поиск с использованием данных указанного запроса среди предложений с более высокой ценой.
Сервис производит асинхронный поиск туров. После получения ответа от метода CreateRequest (обычно не более секунды) нужно отслеживать состояние поискового запроса, поскольку туроператоры отдают данные за разное время – от 1 секунды до 2 минут.
В ответе CreateRequest приходит идентификатор созданного поискового запроса, который в дальнейшем используется для отслеживания состояния поискового запроса методом GetRequestState и получения результатов поиска методом GetRequestResult.
Логика работы с сервисом зависит от того, нужно ли вам получать данные до полного завершения поискового запроса. Возможны два варианта – единовременное получение полной поисковой выдачи и получение данных о турах по мере их поступления.
Получение полного набора туров
- Создаётся поисковый запрос методом CreateRequest. Сохраняется идентификатор запроса, полученный в ответе.
- Создаётся цикл для получения статуса поискового запроса. В цикле вызывается метод GetRequestState с использованием идентификатора запроса. В итерации цикла обязательно должна быть пауза (рекомендованное минимальное значение – 1,5 секунды). В результате вызова GetRequestState проверяется, все ли туроператоры обработали запрос (т.е. значение поля IsProcessed = “true”). На основе проверки принимается решение о продолжении цикла или (если все туроператоры обработали запрос) о переходе к методу получения туров.
- Вызывается метод GetRequestResult с использованием идентификатора, полученного в ответе метода CreateRequest. Метод вернет все найденные туры в рам-ках поискового запроса.
| Внимание! Сервер не хранит результаты поискового запроса продолжительное время. Данные должны быть получены и сохранены локально. |
| Внимание! В цикле получения статуса поискового запроса должен быть внутренний таймаут, чтобы ни при каких обстоятельствах не могли возникнуть бесконечные циклы. |
Получение данных по мере их поступления
- Создаётся поисковый запрос методом CreateRequest. Сохраняется полученный идентификатор.
- Создаётся цикл для получения статуса поискового запроса. В цикле вызывается метод GetRequestState с использованием идентификатора запроса. В итерации цикла обязательно должна быть пауза (рекомендованное минимальное значе-ние – 1,5 секунды). В результате вызова GetRequestState проверяется, есть ли найденные туры по поисковому запросу (т.е. как минимум один туроператор имеет значение поля RowsCount более нуля). Если найденных туров нет и не все туроператоры обработали запрос, цикл повторяется; если хотя бы один туропе-ратор сообщил о наличии туров, можно перейти к методу получения туров.
- Вызывается метод GetRequestResult с использованием идентификатора запроса. Метод вернет все туры, найденные на момент вызова, а также состояние обра-ботки поискового запроса (аналогично методу GetRequestState). Состояние обра-ботки поискового запроса сохраняется, а найденные туры отображаются поль-зователю.
- Создаётся новый цикл, который работает до тех пор, пока все туроператоры не обработают запрос. В цикле вызывается метод GetRequestState с использованием идентификатора запроса. В итерации цикла обязательно должна быть пауза (рекомендованное минимальное значение – 1,5 секунды). Результат вызова GetRequestState сравнивается с сохранённым состоянием обработки запроса. Если результат сравнения показывает наличие новых туров, то пользователь уведомляется о новых найденных турах. Если пользователь хочет обновить результат, то необходимо повторить действия, описанные в п. 3. Если для всех туропе-раторов значение поля IsProcessed = “true”, то цикл завершается, и пользователь получает уведомление об окончании поиска.
| Внимание! Сервер не хранит результаты поискового запроса продолжительное время. Данные должны быть получены и сохранены локально. |
| Внимание! В цикле получения статуса поискового запроса должен быть внутренний таймаут, чтобы ни при каких обстоятельствах не могли возникнуть бесконечные циклы. |
Актуализация и сохранение данных
После того, как пользователь выбрал понравившийся тур, необходимо актуализировать данные с помощью метода ActualizePrice. Метод возвращает не только наиболее актуальную информацию по туру, но и его подробное описание (на момент написания настоящего руководства функция реализована не для всех туроператоров).
Последний шаг – вызов метода SaveTourOrder, который сохраняет информацию о заказе в системе sletat.ru и позволяет использовать средства оповещения для информирования ваших менеджеров о новом заказе. На момент написания настоящего руководства в личном кабинете на сайте sletat.ru можно настроить оповещения по электронной почте и SMS. Также доступна утилита SletatRu Agent для Windows, которая уведомляет обо всех новых заказах.
Методы
В этом разделе описаны все методы поискового сервиса, приведены примеры запросов и ответов в SOAP.
Все используемые методы требуют авторизации. Данные авторизации (логин и пароль от личного кабинета на сайте sletat.ru) передаются в заголовке SOAP:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <soap:Header> <AuthInfo xmlns="urn:SletatRu:DataTypes:AuthData:v1" > <Login> ******** </Login> <Password> ******** </Password> </AuthInfo> </soap:Header> <soap:Body> <GetDepartCities xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" /> </soap:Body> </soap:Envelope>
В примерах SOAP- запросов и ответов, которые приводятся ниже для каждого метода, элемент soap:Header убран для лучшей читаемости документа.
Все идентификаторы в методах используют тип Int32 (если не указано иного), который может принимать значения от -2 147 483 648 до 2 147 483 647.
Справочник c системными идентификаторами доступен по ссылке:
https://module.sletat.ru/Dictionaries.xml
GetDepartCities
Метод возвращает список всех городов вылета, который вы можете отредактировать в личном кабинете на сайте sletat.ru.
Сигнатура:
CityCollection GetDepartCities()
Параметры отсутствуют.
Пример SOAP-запроса:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" > <soap:Body> <GetDepartCities xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" /> </soap:Body> </soap:Envelope>
Пример SOAP ответа:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" > <s:Body> <GetDepartCitiesResponse xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <GetDepartCitiesResult xmlns:a="urn:SletatRu:DataTypes:CityCollection:v1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" > <a:City> <Id xmlns="urn:SletatRu:DataTypes:DbObject:v1" > 1264 </Id> <Name xmlns="urn:SletatRu:DataTypes:NamedDbObject:v1" > Санкт-Петербург </Name> </a:City> ... </GetDepartCitiesResult> </GetDepartCitiesResponse> </s:Body> </s:Envelope>
Коллекция городов вылета CityCollection содержит n элементов City.
Поля элемента City:
| Поле | Тип | Описание |
| Name | String | Город вылета |
GetCountries
Метод GetCountries возвращает список доступных направлений для любого данного города вылета. В личном кабинете на сайте sletat.ru вы можете поставить на этот список различные фильтры, чтобы в ответ возвращались данные только о тех странах, с которыми вы работаете. Список городов вылета получается методом GetDepartCities.
Сигнатура:
CountryCollection GetCountries(
Int32 townFromId)
Параметр townFromId – идентификатор города вылета.
Пример SOAP-запроса доступных направлений для Санкт-Петербурга:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" > <soap:Body> <GetCountries xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <townFromId>1254</townFromId> </GetCountries> </soap:Body> </soap:Envelope>
Пример SOAP-ответа:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <GetCountriesResponse xmlns="urn:SletatRu:Contracts:Soap11Gate:v1"> <GetCountriesResult xmlns:a="urn:SletatRu:DataTypes:CountryCollection:v1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:b="urn:SletatRu:DataTypes:Country:v1" > <a:Country> <Id xmlns="urn:SletatRu:DataTypes:DbObject:v1" > 1 </Id> <Name xmlns="urn:SletatRu:DataTypes:NamedDbObject:v1" > Абхазия </Name> </a:Country> ... </GetCountriesResult> </GetCountriesResponse> </s:Body> </s:Envelope>
В ответ возвращается коллекция направлений CountryCollection, содержащая n элементов Country.
Поля элемента Country:
| Поле | Тип | Описание |
| id | Int32 | Идентификатор страны |
| Name | String | Наименование страны |
| IsProVisa | Bool | Требуется ли в страну про-виза. Если в страну требуется про-виза, параметр принимает значение “true”; в противном случае — “false”. |
| IsVisa | bool | Требуется ли виза гражданам РФ для въезда. Возможные значения: «false» — не требуется, «true» — требуется. |
| Alias | String | Текстовый код направления. |
| Flags | byte | Дополнительные параметры страны (направления вылета). Возможные значения: 0 = None, Exotic = 1 (экзотическая страна), SeaShore = 2 (Подходит для отдыха на море), Schengen = 4 (Является страной шенгенского соглашения). |
| HasTickets | Int32 | Наличие билетов. Если билеты есть в наличии, параметр принимает значение “true”; в противном случае — “false”. |
| HotelIsNotInStop | Int32 | Наличие мест в отеле. Если в отеле есть места, параметр принимает значение “true”; в противном случае — “false”. |
| Rank | Int32 | Ранг страны (0 — самый высокий). |
| TicketsIncluded | Int32 | Объём турпакета. Если перелёт включён в стоимость тура, параметр принимает значение “true”; в противном случае — “false”. |
GetCities
Метод GetCities возвращает список курортов для выбранного направления. Список направлений получается методом GetCountries.
Сигнатура:
CityCollection GetCities(
Int32 countryId)
Параметр countryId – идентификатор страны.
Пример SOAP-запроса списка курортов для Египта:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" > <soap:Body> <GetCities xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <countryId> 40 </countryId> </GetCities> </soap:Body> </soap:Envelope>
Пример SOAP-ответа:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" > <s:Body> <GetCitiesResponse xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <GetCitiesResult xmlns:a="urn:SletatRu:DataTypes:CityCollection:v1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" > <a:City> <Id xmlns="urn:SletatRu:DataTypes:DbObject:v1" > 26 </Id> <Name xmlns="urn:SletatRu:DataTypes:NamedDbObject:v1" > Айн Сохна </Name> </a:City> ... </GetCitiesResult> </GetCitiesResponse> </s:Body> </s:Envelope>
В ответ возвращается коллекция курортов CityCollection, содержащая n элементов City.
Поля элемента City:
| Поле | Тип | Описание. |
| id | Int32 | Идентификатор курорта. |
| Name | String | Название курорта. |
| CountryId | Int | Идентификатор направления. |
| Default | Bool | Устаревший параметр |
| DescriptionUrl | String | Ссылка на описание курорта. Поле может быть пустым, если курорт не имеет описания. |
| IsPopular | Bool | Популярность курорта. Если курорт был признан популярным на основе статистики поисковых запросов, сделанных на сайте sletat.ru и сайтах партнёров, поле принимает значение “true”; в противном случае — “false”. |
| OriginalName | String | Название страны на латинице. |
| ParentId | Int | Идентификатор родительского курорта. Например, для греческих курортов Ираклиона, Лассити и Ретимно идентификатором родительского курорта будет 3071 - идентификатор о. Крит. Поле может быть пустым, если курорт не имеет родительского курорта. |
GetHotelStars
Метод GetHotelStars возвращает список доступных категорий отелей в выбранных курортах.
Сигнатура:
HotelStarsCollection GetHotelStars(
Int32 countryId,
Int32[] towns)
Параметры:
| Параметр | Тип | Описание |
| countryId | Int32 | Идентификатор страны. |
| towns | Int32[] | Массив идентификаторов курортов. Если пуст, результаты возвращаются для всех курортов выбранной страны. |
Пример SOAP-запроса списка категорий отелей для Хургады и Шарм-Эль-Шейха (идентификаторы взяты из GetCities):
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" > <soap:Body> <GetHotelStars xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <countryId>40</countryId> <towns> <int xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" > 1592 </int> <int xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" > 1642 </int> </towns> </GetHotelStars> </soap:Body> </soap:Envelope>
Пример SOAP-ответа:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" > <s:Body> <GetHotelStarsResponse xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <GetHotelStarsResult xmlns:a="urn:SletatRu:DataTypes:HotelStarsCollection:v1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:b="urn:SletatRu:DataTypes:HotelStars:v1" > <a:HotelStars> <Id xmlns="urn:SletatRu:DataTypes:DbObject:v1" > 401 </Id> <Name xmlns="urn:SletatRu:DataTypes:NamedDbObject:v1" > 2* </Name> </a:HotelStars> ... </GetHotelStarsResult> </GetHotelStarsResponse> </s:Body> </s:Envelope>
В ответ возвращается коллекция категорий отелей HotelStarsCollection, содержащая n элементов HotelStars.
Поля элемента HotelStars:
| Поле | Тип | Описание |
| Id | Int32 | Идентификатор категории отеля. |
| Name | String | Категория отеля. |
GetMeals
Метод GetMeals возвращает список типов питания.
Сигнатура:
MealCollection GetMeals()
Параметры отсутствуют.
Пример SOAP-запроса:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" > <soap:Body> <GetMeals xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" /> </soap:Body> </soap:Envelope>
Пример SOAP-ответа:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" > <s:Body> <GetMealsResponse xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <GetMealsResult xmlns:a="urn:SletatRu:DataTypes:MealCollection:v1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:b="urn:SletatRu:DataTypes:Meal:v1" > <a:Meal> <Id xmlns="urn:SletatRu:DataTypes:DbObject:v1" > 115 </Id> <Name xmlns="urn:SletatRu:DataTypes:NamedDbObject:v1" > AI </Name> </a:Meal> ... </GetMealsResult> </GetMealsResponse> </s:Body> </s:Envelope>
В ответ возвращается коллекция типов питания MealCollection, содержащая n элементов Meal.
Поля элемента Meal:
| Поле | Тип | Описание |
| Id | Int32 | Идентификатор типа питания. |
| Name | String | Тип питания |
GetHotels
Метод GetHotels возвращает список доступных отелей в выбранной стране. Дополнительно, список отелей может быть отфильтрован по массиву курортов и категорий отелей, а также по названию самого отеля.
Сигнатура:
HotelCollection GetHotels(
Int32 countryId,
Int32[] towns,
Int32[] stars,
String filter,
Int32 count)
Параметры:
| Параметр | Тип | Описание |
| countryId * | Int32 | Идентификатор страны, обязательный параметр. |
| towns | Int32[] | Массив идентификаторов курортов. Если пуст, возвращается результат по всем курортам выбранной страны. |
| stars | Int32[] | Массив идентификаторов категорий отелей. Если пуст, возвращается результат по всем категориям. |
| filter | String | Фильтр для поиска отелей по названию. Если пуст, параметр игнорируется. |
| count * | Int32 | Максимальное количество отелей в ответе (отели отбираются по рейтингу, потом сортируются по названию), обязательный параметр. При значении “-1” возвращаются данные по всем отелям. |
Пример SOAP-запроса списка 4- и 5-звёздочных 500 отелей Хургады и Шарм-Эль-Шейха:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" > <soap:Body> <GetHotels xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <countryId>40</countryId> <towns> <int xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" > 1592 </int> <int xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" > 1642 </int> </towns> <stars> <int xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" > 403 </int> <int xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" > 404 </int> </stars> <filter xsi:nil="true" /> <count>500</count> </GetHotels> </soap:Body> </soap:Envelope>
Пример SOAP-ответа:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" > <s:Body> <GetHotelsResponse xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <GetHotelsResult xmlns:a="urn:SletatRu:DataTypes:HotelCollection:v1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:b="urn:SletatRu:DataTypes:Hotel:v1" > <a:Hotel> <Id xmlns="urn:SletatRu:DataTypes:DbObject:v1" > 14646 </Id> <Name xmlns="urn:SletatRu:DataTypes:NamedDbObject:v1" > Four Seasons Resort </Name> <b:Rate>4.94</b:Rate> <b:StarName>5*</b:StarName> </a:Hotel> ... </GetHotelsResult> </GetHotelsResponse> </s:Body> </s:Envelope>
В ответ возвращается коллекция отелей HotelsCollection, содержащая n элементов Hotel.
Поля элемента Hotel:
| Поле | Тип | Описание |
| Id | Int32 | Идентификатор отеля. |
| Name | String | Название отеля. |
| BeachLineId | Int32 | Пляжная линия. Варианты значений: 1, 2, 3 (первая, вторая или третья пляжная линия соответственно). |
| CommonRate | Float | Рейтинг отеля. На момент написания настоящего руководства параметр не используется, и данные не обновляются. |
| IsInBonusProgram | Bool | Бонусная программа Слетать.ру. Если отель предлагает турагентам бонусы за туристов, поле принимает значение “true”; в противном случае – “false”. |
| OriginalName | Str | Название отеля на латинице. |
| Phone | Int | Устаревший параметр. |
| PhotosCount | Int | Общее количество фотографий отеля. |
| PopularityLevel | Int | Уровень популярности отеля. Определяется на основе количества поисков в отель. 0 - Low, 1 - Normal, 2 - High |
| Rate | Float | Ранг отеля. |
| SearchCount | int | Количество поисков по отелю за период (1 месяц). |
| StarId | Int | Идентификатор категории отеля. |
| StarName | Str | Категория отеля |
| TownId | Int | Идентификатор курорта. |
GetTourOperators
Метод GetTourOperators возвращает список доступных туроператоров. Последний может быть ограничен лицензией. Кроме того, вы можете настроить фильтрацию туроператоров в личном кабинете на сайте sletat.ru.
Метод всегда возвращает полный список туроператоров, отмечая тех, у кого есть туры, соответствующие параметрам города вылета и направления.
Сигнатура:
TourOperatorCollection GetTourOperators(
Int32 townFromId,
Int32 countryId)
Параметры:
| Параметр | Тип | Описание |
| townFromId | Int32 | Идентификатор города вылета. |
| countryId | Int32 | Идентификатор страны. |
Пример SOAP-запроса списка туроператоров c отметкой тех, у кого есть туры из Санкт-Петербурга в Египет:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" > <soap:Body> <GetTourOperators xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <townFromId>1264</townFromId> <countryId>40</countryId> </GetTourOperators> </soap:Body> </soap:Envelope>
Пример SOAP-ответа:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" > <s:Body> <GetTourOperatorsResponse xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <GetTourOperatorsResult xmlns:a="urn:SletatRu:DataTypes:TourOperatorCollection:v1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:b="urn:SletatRu:DataTypes:TourOperator:v1" > <a:TourOperator> <Id xmlns="urn:SletatRu:DataTypes:DbObject:v1" > 7 </Id> <Name xmlns="urn:SletatRu:DataTypes:NamedDbObject:v1" > Biblio Globus </Name> <b:Enabled>True</b:Enabled> </a:TourOperator> ... </GetTourOperatorsResult> </GetTourOperatorsResponse> </s:Body> </s:Envelope>
В ответ возвращается коллекция туроператоров TourOperatorCollection, содержащая n элементов TourOperator.
Поля элемента TourOperator:
| Поле | Тип | Описание |
| Id | Int32 | Идентификатор туроператора |
| Name | String | Наименование туроператора |
| Enabled | String | Отметка о наличии туров. Возможные значения: “true” – есть туры; “false” – нет туров. |
GetTourDates
Метод GetTourDates возвращает список доступных дат вылета для выбранных города вылета, страны и курорта, используя внутреннюю статистику, собранную по ранее найденным турам.
Сигнатура:
XmlTourDates GetTourDates(
Int32 dptCityId,
Int32 countryId,
Int32[] resorts,
Int32[] sources,
Bool checkLicenseSources)
Параметры:
| Параметр | Тип | Описание |
| dptCityId | Int32 | Идентификатор города вылета. |
| countryId | Int32 | Идентификатор страны. |
| resorts | Int32[] | Массив идентификаторов курортов. Если ни один курорт не выбран, значение поля равно нулю. |
| sources | Int32[] | Массив идентификаторов туроператоров. Если ни один туроператор не выбран, значение поля равно нулю. |
| checkLicenseSources | Bool | Используется для внутренних сервисов Слетать.ру |
Пример SOAP-запроса доступных дат начала тура из Екатеринбурга в Тироль (Австрия):
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" > <s:Body> <GetTourDates xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <dptCityId>1265</dptCityId> <countryId>3</countryId> <resorts xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" > <a:int>1442</a:int> </resorts> </GetTourDates> </s:Body> </s:Envelope>
Пример SOAP-ответа:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" > <s:Body> <GetTourDatesResponse xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <GetTourDatesResult xmlns:a="urn:SletatRu:DataTypes:XmlTourDates:v1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" > <a:Dates xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays" > <b:string>09.03.2013</b:string> <b:string>09.02.2013</b:string> <b:string>23.02.2013</b:string> <b:string>02.03.2013</b:string> <b:string>16.03.2013</b:string> <b:string>02.02.2013</b:string> <b:string>16.02.2013</b:string> <b:string>06.04.2013</b:string> </a:Dates> </GetTourDatesResult> </GetTourDatesResponse> </s:Body> </s:Envelope>
XmlTourDates содержит элемент Dates – коллекцию дат начала тура.
GetSourseAssurances
Метод GetSourseAssurances возвращают массивы юрлиц по идентификатору туроператора в справочнике Слетать.ру
Сигнатура: SourceRequisite[] GetSourseAssurances(int sourceId)
каждый элемент массива содержит следующие поля
string Number - Номер туроператора в реестре
string Name - Полное название
string Site - Сайт
string NameShort - Сокращенное наименование
string PhysicalAddress - Юридический адрес
string PostAddress - Почтовый адрес
SourceFinSecurityDocument[] FinSecurityDocuments - массив документов о предоставлении финансовых гарантий данному оператору
Каждый элемент массива FinSecurityDocuments имеет следующие поля:
int FinSecurityAmount - Размер финансового обеспечения
string WayToFinSecurity - Тип документа
string DocumentNumber - Номер документа в реестре
DateTime? DocumentDate - Номер документа в реестре
DateTime? DateOfFinSecurityFrom - Дата начала действия документа
DateTime? DateOfFinSecurityTo - Дата окончания действия документа
string OrgName - Название организации, предоставившей ТО финансовые гарантии
string OrgAddress - Юридический адрес организации, предоставившей ТО финансовые гарантии
string OrgPostAddress - Почтовый адрес организации, предоставившей ТО финансовые гарантии
Методы загрузки туров
Так как разные туроператоры возвращают результаты запроса в разные интервалы времени (до 90 секунд), в сервисе реализован асинхронный поиск туров. Для загрузки туров используются три метода:
- CreateRequest используется для создания поискового запроса. Метод принимает все необходимые поисковые параметры.
- GetRequestState отслеживает прогресс обработки поискового запроса туроператорами.
- GetRequestResult возвращает все данные, найденные по запросу на момент вызова.
- ContinueSearch позволяет продолжить поиск по параметрам исходного поискового запроса среди предложений с более высокой ценой.
В этом разделе приведено подробное описание всех методов.
| Внимание! Варианты взаимодействия методов CreateRequest, GetRequestResult и ContinueSearch описана в разделе «Логика работы с сервисом». |
| Внимание! Работа с поисковым запросом (создание, запрос состояния и загрузка туров) должна выполняться с одного IP-адреса. При выполнении указанного условия взаимодействие с сервисом возможно с нескольких IP-адресов. |
CreateRequest
Метод CreateRequest используется для создания поискового запроса. Ответ состоит из единственного элемента CreateRequestResult, содержащего идентификатор созданного запроса. Присвоенный запросу идентификатор используется методами GetRequestState, GetRequestResult и ContinueSearch в продолжение всего процесса поиска.
| Внимание! Варианты взаимодействия методов CreateRequest, GetRequestResult и ContinueSearch описана в разделе «Логика работы с сервисом». |
Сигнатура:
Int32 CreateRequest(
Int32 countryId,
Int32 cityFromId,
Int32[] cities,
Int32[] meals,
Int32[] stars,
Int32[] hotels,
Int32 adults,
Int32 kids,
Int32[] kidsAges,
Int32 nightsMin,
Int32 nightsMax,
Int32 priceMin,
Int32 priceMax,
String currencyAlias,
String departFrom,
String departTo,
Boolean hotelIsNotInStop,
Boolean hasTickets,
Boolean ticketsIncluded,
Boolean useFilter,
Int32[] f_to_id,
Boolean useTree,
Boolean includeDescriptions,
Boolean showEconomOnly,
Int32 cacheMode)
Параметры (обязательные отмечены знаком *):
|
Параметр |
Тип |
Описание | |
|
countryId * |
Int32 |
Идентификатор страны. | |
|
cityFromId * |
Int32 |
Идентификатор города вылета. | |
|
cities |
Int32[] |
Список идентификаторов курортов, по которым должен быть произведён поиск.
| |
|
meals |
Int32[] |
Список идентификаторов типов питания, по которым должен быть произведён поиск. | |
|
stars |
Int32[] |
Список идентификаторов категорий отелей, по которым должен быть произведён поиск. | |
|
hotels |
Int32[] |
Список идентификаторов отелей, по которым должен быть произведён поиск. Не более 10 идентификаторов отелей в одном запросе.
| |
|
adults |
Int32 |
Количество туристов (взрослых). Значение по умолчанию «2». | |
|
kids |
Int32 |
Количество туристов (детей). Значение по умолчанию «0». | |
|
kidsAges |
Int32 |
Возраст каждого ребёнка. Если параметр используется, количество элементов в массиве должно быть равным значению параметра kids. | |
|
nightsMin |
Int32 |
Минимальная продолжительность тура (ночей). Значение по умолчанию «7». | |
|
nightsMax |
Int32 |
Максимальная продолжительность тура (ночей). Значение по умолчанию «7». | |
|
priceMin |
Int32 |
Минимальная цена тура. | |
|
priceMax |
Int32 |
Максимальная цена тура. | |
|
currencyAlias |
String |
Валюта для параметров priceMin и priceMax. Поддерживаются значения USD, EUR, RUB, BYN и UAH. Указанная валюта будет использована в поисковой выдаче. | |
|
departFrom |
String |
Начальная дата диапазона дат вылета в формате dd.MM.yyyy. Значение по умолчанию — текущая дата +1 день. | |
|
departTo |
String |
Конечная дата диапазона дат вылета в формате dd.MM.yyyy. Значение по умолчанию — значение параметра dateFrom +7 дней. Допустимый интервал между начальной и конечной датой диапазона — 45 дней. | |
|
hotelIsNotInStop |
Boolean |
Фильтрация результатов поиска по наличию мест в отеле. Если значение равно «true», в выдачу попадут только отели со статусом «под запрос» и «есть места»; если «false», фильтр не применяется. Значение по умолчанию «false». | |
|
hasTickets |
Boolean |
Фильтрация результатов поиска по наличию билетов (туда и обратно, без учёта класса). Если значение равно «true», в результаты поиска попадут только туры, в которых ещё остались в наличии билеты; если «false», фильтр не применяется. Значение по умолчанию — «false». | |
|
ticketsIncluded |
Boolean |
Фильтрация результатов поиска по составу турпакета. Если значение параметра равно «true», в выдачу попадут только туры с перелётами; если «false», фильтр не применяется. Значение по умолчанию — «false». | |
|
useFilter |
Boolean |
Фильтрация результатов поиска по туроператорам. Если значение равно «true», в выдачу попадают продукты туроператоров, перечисленных в параметре f_to_id; если «false», фильтр не применяется. Фильтр применяется только после создания поискового запроса. Значение по умолчанию — «false». Использование параметра ограниченно лицензией. | |
|
f_to_id |
Int32[] |
Список идентификаторов туроператоров для параметра useFilter. Использование параметра ограниченно лицензией. | |
|
includeDescriptions |
Boolean |
Если значение равно «true», в выдаче будут подробно описаны отели, типы размещения и питания. | |
|
showEconomOnly |
Boolean |
Возвращает туры в которые есть билеты на эконом рейсы, если значение параметра равно «true»; если «false», фильтр не применяется. Значение по умолчанию — «false». (Данный параметр является устаревшим. Не рекомендуется к использованию). | |
|
cacheMode |
Int32 |
Режим обращения к кешу системы поиска. Возможные значения: 0 – не использовать кеш; 1 – использовать кеш при ошибках поиска у туроператора; 2 – режим SmartCache (на основе статистики поисковых запросов и наполнения кеша будет принято решение об использовании кеша; если поиск по кешу не даёт достоверного результата, запрос направляется туроператору); 3 – запрос будет направлен только в кеш, без использования алгоритма SmartCache; 4 – запрос будет направлен только в кеш, алгоритм SmartCache используется для поиска наиболее актуального набора туров. |
В приведённом ниже примере создаётся поисковый запрос со следующими параметрами:
- город вылета Санкт-Петербург;
- направление Египет;
- курорты Хургада и Шарм-Эль-Шейх;
- отели Albatros Aqua Park Sharm и Akassia Swiss Resort;
- вид питания All Included;
- 2 взрослых туриста без детей;
- продолжительность тура 14 ночей;
- цены отобразить в рублях;
- дата начала вылета в диапазоне от 10 до 17 октября 2011 года;
- не выводить отели в стопе;
- выводить только туры с включенным перелётом;
- выводить только туры с наличием билетов туда и обратно.
Пример SOAP-запроса:
<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:SletatRu:Contracts:Soap11Gate:v1" xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:urn1="urn:SletatRu:DataTypes:AuthData:v1"> <x:Header> <urn1:AuthInfo> <urn1:Login>****</urn1:Login> <urn1:Password>****</urn1:Password> </urn1:AuthInfo> </x:Header> <x:Body> <urn:CreateRequest> <urn:countryId>40</urn:countryId> <urn:cityFromId>1264</urn:cityFromId> <urn:cities> <arr:int>1592</arr:int> <arr:int>1642</arr:int> </urn:cities> <urn:meals> <arr:int>115</arr:int> </urn:meals> <urn:hotels> <arr:int>109930</arr:int> <arr:int>772</arr:int> </urn:hotels> <urn:adults>2</urn:adults> <urn:kids>0</urn:kids> <urn:kidsAges> <arr:int>0</arr:int> </urn:kidsAges> <urn:nightsMin>7</urn:nightsMin> <urn:nightsMax>7</urn:nightsMax> <urn:priceMin>10000</urn:priceMin> <urn:priceMax>1000000</urn:priceMax> <urn:currencyAlias>RUB</urn:currencyAlias> <urn:departFrom>10.04.2011</urn:departFrom> <urn:departTo>17.04.2011</urn:departTo> <urn:hotelIsNotInStop>true</urn:hotelIsNotInStop> <urn:hasTickets>true</urn:hasTickets> <urn:ticketsIncluded>true</urn:ticketsIncluded> <urn:includeDescriptions>true</urn:includeDescriptions> </urn:CreateRequest> </x:Body> </x:Envelope>
Пример SOAP-ответа:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" > <s:Body> <CreateRequestResponse xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <CreateRequestResult>4355852</CreateRequestResult> </CreateRequestResponse> </s:Body> </s:Envelope>
Элемент CreateRequestResult содержит идентификатор поискового запроса (Int32).
GetRequestState
Метод GetRequestState возвращает статус обработки запроса для каждого туроператора.
| Внимание! Варианты взаимодействия методов CreateRequest, GetRequestResult и ContinueSearch описаны в разделе «Логика работы с сервисом». |
Сигнатура:
OperatorLoadStateCollection GetRequestState(
Int32 requestId)
Метод принимает единственный параметр requestId – идентификатор поискового запроса, выданный методом CreateRequest при создании.
Пример SOAP-запроса:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" > <soap:Body> <GetRequestState xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <requestId>4355852</requestId> </GetRequestState> </soap:Body> </soap:Envelope>
Пример SOAP-ответа:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" > <s:Body> <GetRequestStateResponse xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <GetRequestStateResult xmlns:a="urn:SamoSoft:DataTypes:OperatorLoadStateCollection:v1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:b="urn:SamoSoft:DataTypes:OperatorLoadState:v1" > <a:OperatorLoadState> <Id xmlns="urn:SletatRu:DataTypes:DbObject:v1" > 7 </Id> <Name xmlns="urn:SletatRu:DataTypes:NamedDbObject:v1" > Biblio Globus </Name> <b:ErrorMessage i:nil="true"/> <b:ExecutionTimeMs>1561</b:ExecutionTimeMs> <b:IsCached>false</b:IsCached> <b:IsError>false</b:IsError> <b:IsProcessed>true</b:IsProcessed> <b:IsSkipped>false</b:IsSkipped> <b:IsTimeout>false</b:IsTimeout> <b:RowsCount>150</b:RowsCount> </a:OperatorLoadState> ... </GetRequestStateResult> </GetRequestStateResponse> </s:Body> </s:Envelope>
На примере видно, что туроператор Biblio Globus вернул 150 туров за 1,5 секунды, состояния загрузки по другим операторам из примера были убраны.
В ответ возвращается коллекция состояний обработки запроса OperatorLoadStateCollection, содержащая n элементов OperatorLoadState, каждый из которых описывает статус для одного оператора.
Описание полей элемента OperatorLoadState:
| Поле |
Тип |
Описание |
|
Id |
Int32 |
Идентификатор туроператора. |
|
Name |
String |
Наименование туроператора. |
|
IsPersistentCacheUsed |
Boolean |
Параметр принимает значение “true” если туры найдены из временного кэша. |
|
IsProcessed |
Boolean |
Статус обработки запроса. Принимает значение “true”, даже если запрос обработан с ошибкой. |
|
IsSkipped |
Boolean |
Параметр принимает значение “true” если поиск по туроператору не был произведен. |
|
IsCached |
Boolean |
Принимает значение “true”, если ответ выдан из кеша. |
|
IsError |
Boolean |
Принимает значение “true”, если. При обработке запроса произошла ошибка. |
|
ErrorMessage |
String |
Описание ошибки при IsError = true. |
|
IsTimeout |
Принимает значение “true”, если запрос завершен по таймауту. Поле IsError также принимает значение “true”. | |
|
ExecutionTimeMs |
Время обработки запроса в миллисекундах. | |
|
RowsCount |
Количество найденных туров. | |
| OnlineErrorMessage | Сервисное сообщение от туроператора | |
| MinPrice | Минимальная цена найденных туров | |
| MaxPrice | Максимальная цена найденных туров |
| Внимание! Поисковый запрос считается обработанным, когда для каждого туроператора поле IsProcessed принимает значение “true”. |
GetRequestResult
Метод GetRequestResult возвращает все туры, найденные в рамках обработки поискового запроса.
| Внимание! Базовый алгоритм работы сервиса подразумевает асинхронную обработку поискового запроса. Если поисковый запрос не был обработан до конца (в результате метода GetRequestState не все туроператоры получили флаг IsProcessed = true), то метод GetRequestResult возвращает набор туров, доступный на момент его вызова. Итоговый набор туров постоянно обновляется по мере обработки запроса каждым туроператором. Если вы хотите, чтобы результаты поиска появлялись в выдаче одновременно, воспользуйтесь информацией, приведённой в разделе «Логика работы с сервисом». |
Сигнатура:
TourData GetRequestResult(
Int32 requestId
Int32 pageSize
Int32 pageNumber)
Метод принимает параметр requestId – идентификатор запроса, возвращённый методом CreateRequest при создании запроса.
Параметры (обязательные отмечены знаком *):
| Параметр | Тип | Описание |
| requestId* | Int32 | Идентификатор запроса. |
| pageSize | Int32 | Количество туров в ленте выдачи на одной странице. По умолчанию: не задан. |
| pageNumber | Int32 | Номер страницы в ленте выдачи. По умолчанию: не задан. |
Пример SOAP-запроса:
<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:SletatRu:Contracts:Soap11Gate:v1">
<x:Body>
<urn:GetRequestResult>
<urn:requestId>4355852</urn:requestId>
<urn:pageSize>10</urn:pageSize>
<urn:pageNumber>2</urn:pageNumber>
</urn:GetRequestResult>
</x:Body>
</x:Envelope>
</source>
Пример SOAP-ответа:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" > <s:Body> <GetRequestResultResponse xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <GetRequestResultResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:a="urn:SletatRu:DataTypes:XmlTourData:v1" > <a:HotelCount>374</a:HotelCount> <a:LoadState xmlns:c="urn:SamoSoft:DataTypes:OperatorLoadState:v1" xmlns:b="urn:SamoSoft:DataTypes:OperatorLoadStateCollection:v1" > <b:OperatorLoadState> <Id xmlns="urn:SletatRu:DataTypes:DbObject:v1" > 1819010031 </Id> <Name xmlns="urn:SletatRu:DataTypes:NamedDbObject:v1" > Туроператор #1819010031 </Name> <c:ErrorMessage i:nil="true"/> <c:ExecutionTimeMs>2812</c:ExecutionTimeMs> <c:IsCached>false</c:IsCached> <c:IsError>false</c:IsError> <c:IsPersistentCacheUsed>false</c:IsPersistentCacheUsed> <c:IsProcessed>true</c:IsProcessed> <c:IsSkipped>false</c:IsSkipped> <c:IsTimeout>false</c:IsTimeout> <c:MaxPrice>30952</c:MaxPrice> <c:MinPrice>19424</c:MinPrice> <c:RowsCount>40</c:RowsCount> </b:OperatorLoadState> </a:LoadState> <a:OilTaxes xmlns:b="urn:SletatRu:DataTypes:XmlTourOilTax:v1"> <b:XmlTourOilTax> <b:AirCompanyName i:nil="true"/> <b:AirportName i:nil="true"/> <b:CurrencyName i:nil="true"/> <b:Date1>2013-11-25T00:00:00</b:Date1> <b:Date2>2014-12-31T00:00:00</b:Date2> <b:FlightNumber i:nil="true"/> <b:PartnerName i:nil="true"/> <b:ResortId i:nil="true"/> <b:ResortName i:nil="true"/> <b:SourceId>1819010041</b:SourceId> <b:Tax>0</b:Tax> </b:XmlTourOilTax> </a:OilTaxes> <a:RequestId>539037314</a:RequestId> <a:Rows xmlns:b="urn:SletatRu:DataTypes:XmlTourRecord:v1"> <b:XmlTourRecord> <b:Adults>2</b:Adults> <b:BusinessTicketsDpt>Stop</b:BusinessTicketsDpt> <b:BusinessTicketsRtn>Stop</b:BusinessTicketsRtn> <b:CheckInDate>07.05.2014</b:CheckInDate> <b:CityFromId>832</b:CityFromId> <b:CityFromName>Москва</b:CityFromName> <b:CountryId>35</b:CountryId> <b:CountryName>Греция</b:CountryName> <b:CreditMonthlyPay i:nil="true"/> <b:CreditMonths i:nil="true"/> <b:Currency>RUB</b:Currency> <b:Description> 1, Касторья, Хлои-Фундукли, Esperos Palace 4*+, Double Classical, _, 2Ad, Half Board 1, Халкидики-Афон, Урануполи, Dioni Apartments Apartments, Apartment 1 Broom, _, 2Ad, Room Rate </b:Description> <b:DiscountCaption/> <b:DiscountExpires i:nil="true"/> <b:DiscountPercent i:nil="true"/> <b:EarlyBookingValidTill i:nil="true"/> <b:EconomTicketsDpt>Available</b:EconomTicketsDpt> <b:EconomTicketsRtn>Available</b:EconomTicketsRtn> <b:FewBusinessTicketsDpt>0</b:FewBusinessTicketsDpt> <b:FewBusinessTicketsRtn>0</b:FewBusinessTicketsRtn> <b:FewEconomTicketsDpt>-1</b:FewEconomTicketsDpt> <b:FewEconomTicketsRtn>0</b:FewEconomTicketsRtn> <b:FewPlacesInHotel>0</b:FewPlacesInHotel> <b:Flags>3072</b:Flags> <b:Found i:nil="true"/> <b:GiftCaption/> <b:HotelDescription/> <b:HotelDescriptionUrl> https://hotels.sletat.ru/?id=13298 </b:HotelDescriptionUrl> <b:HotelId>13298</b:HotelId> <b:HotelIsInStop>Available</b:HotelIsInStop> <b:HotelName>Esperos Palace</b:HotelName> <b:HotelPhotosCount>45</b:HotelPhotosCount> <b:HotelRating>9.62</b:HotelRating> <b:HotelTitleImageUrl> https://hotels.sletat.ru/i/p/13298_0.jpg </b:HotelTitleImageUrl> <b:HtPlaceDescription/> <b:HtPlaceId>13103</b:HtPlaceId> <b:HtPlaceName>DBL</b:HtPlaceName> <b:IsDemoMode>false</b:IsDemoMode> <b:Kids>0</b:Kids> <b:MealDescription/> <b:MealId>113</b:MealId> <b:MealName>HB</b:MealName> <b:Nights>2</b:Nights> <b:OfferId>985863881</b:OfferId> <b:OfferIdStr>985863881</b:OfferIdStr> <b:OriginalHotelName>Esperos Palace</b:OriginalHotelName> <b:OriginalHtPlaceName>2Ad</b:OriginalHtPlaceName> <b:OriginalMealName>Half Board</b:OriginalMealName> <b:OriginalRoomName>Double Classical,_ </b:OriginalRoomName> <b:OriginalStarName>4*</b:OriginalStarName> <b:OriginalTownName>Касторья, Хлои-Фундукли</b:OriginalTownName> <b:Price>50</b:Price> <b:PriceType>0</b:PriceType> <b:ReceivingParty/> <b:ResortDescriptionUrl/> <b:ResortId>546</b:ResortId> <b:ResortName>Кастория</b:ResortName> <b:RoomId>0</b:RoomId> <b:RoomName>Double Classical, _</b:RoomName> <b:SourceId>1819010039</b:SourceId> <b:SourceImageUrl/> <b:SourceName/> <b:SourceSearchFormUrl/> <b:StarId>403</b:StarId> <b:StarName>4*</b:StarName> <b:TicketsIncluded>Included</b:TicketsIncluded> <b:TourArchiveHash>AsBcr96RHxUv1810cTI28A==</b:TourArchiveHash> <b:TourHash>ZdVTLJ1FPydJIFpekzdUXg==</b:TourHash> <b:TourName>_МСК_Шоп-тур с обяз._2014_+Отд.</b:TourName> <b:TourUrl/> </b:XmlTourRecord> </a:Rows> <a:RowsCount>2318</a:RowsCount> <a:SourcesVisas xmlns:b="urn:SletatRu:DataTypes:XmlVisaRange:v1" > <b:CurrencyName>EUR</b:CurrencyName> <b:Items xmlns:c="urn:SletatRu:DataTypes:XmlVisaRangeItem:v1" > <c:XmlVisaRangeItem> <c:MaxPrice>70</c:MaxPrice> <c:MinPrice>30</c:MinPrice> <c:SourceId>1819010049</c:SourceId> </c:XmlVisaRangeItem> </b:Items> </a:SourcesVisas> <a:Visa xmlns:b="urn:SletatRu:DataTypes:XmlVisa:v1" i:nil="true" /> </GetRequestResultResult> </GetRequestResultResponse> </s:Body> </s:Envelope>
В ответ возвращается структура GetRequestResultResult, состоящая из следующих полей:
- HotelCount – общее количество отелей в поисковой выдаче;
- LoadState – массив данных о состоянии обработки поискового запроса, в котором каждый элемент OperatorLoadState описывает состояние обработки запроса одним оператором (структура OperatorLoadState описана в разделе “GetRequestSate”);
- OilTaxes – массив данных о топливных сборах, в котором каждый элемент информация о топливных сборах.
- RequestId – идентификатор поискового запроса;
- Rows – состоит из структур XmlTourRecord, которые описывают найденные туры;
- RowsCount – количество туров, найденных в рамках поискового запроса на момент формирования ответа (в примере по заданному запросу найдено 410 цен);
- SourcesVisas – необходимо описание;
- Visa – информация о стоимости визы;
Поля структуры XmlTourRecord:
| Поле | Тип | Описание |
| Adults | Int32 | Количество туристов (взрослых). |
|
BusinessTicketsDpt |
Enum |
Наличие билетов бизнес-класса (туда). Возможные значения: Stop – нет билетов, Available – есть билеты, Request – под запрос, и Unknown – нет данных. |
|
BusinessTicketsRtn |
Enum |
Наличие билетов бизнес-класса (обратно). Возможные значения: Stop – нет билетов, Available – есть билеты, Request – под запрос, и Unknown – нет данных. |
|
CheckInDate |
String |
Дата вылета в формате dd.MM.yyyy. |
|
CityFromId |
Int32 |
Идентификатор города вылета. |
|
CityFromName |
String |
Город вылета. |
|
CountryId |
Int32 |
Идентификатор направления. |
|
CountryName |
String |
Направление. |
|
CreditMonthlyPay |
Данный параметр устарел. | |
|
CreditMonths |
Данный параметр устарел. | |
|
Currency |
String |
Валюта, в которой отображены цены. Возможные значения: RUB, USD, EUR, BYN и UAH. |
|
Description |
||
|
DiscountCaption |
Данный параметр устарел. | |
|
DiscountExpires |
Данный параметр устарел. | |
|
DiscountPercent |
Данный параметр устарел. | |
|
EarlyBookingValidTill |
Данный параметр устарел. | |
|
EconomTicketsDpt |
Enum |
Наличие билетов эконом-класса (туда). Возможные значения: Stop – нет билетов, Available – есть билеты, Request – под запрос, и Unknown – нет данных. |
|
EconomTicketsRtn |
Enum |
Наличие билетов эконом-класса (обратно). Возможные значения: Stop – нет билетов, Available – есть билеты, Request – под запрос, и Unknown – нет данных. |
|
FewBusinessTicketsDpt |
Int32 |
Если есть билеты бизнес-класса (поле BusinessTicketsDpt имеет значение “Available”) и значение этого поля отлично от нуля, то билетов МАЛО. Если туроператор сообщает о том, что билетов мало, но не указывает точного количества, поле принимает значение “-1”. Если передано любое иное число, отличное от нуля, то это точное количество оставшихся билетов. |
|
FewBusinessTicketsRtn |
Int32 |
Если есть билеты бизнес-класса обратно (поле BusinessTicketsRtn имеет значение “Available”) и значение этого поля отлично от нуля, то билетов МАЛО. Если туроператор сообщает о том, что билетов мало, но не указывает точного количества, поле принимает значение “-1”. Если передано любое иное число, отличное от нуля, то это точное количество оставшихся билетов. |
|
FewEconomTicketsDpt |
Int32 |
Если есть билеты эконом-класса (поле EconomTicketsDpt имеет значение “Available”) и значение этого поля отлично от нуля, то билетов МАЛО. Если туроператор сообщает о том, что билетов мало, но не указывает точного количества, поле принимает значение “-1”. Если передано любое иное число, отличное от нуля, то это точное количество оставшихся билетов. |
|
FewEconomTicketsRtn |
Int32 |
Если есть места на перелёт эконом-классом обратно (поле EconomTicketsRtn имеет значение “Available”) и значение этого поля отлично от нуля, то билетов МАЛО. Если туроператор сообщает о том, что билетов мало, но не указывает точного количества, поле принимает значение “-1”. Если передано любое иное число, отличное от нуля, то это точное количество оставшихся билетов. |
|
FewPlacesInHotel |
Int32 |
Если есть места в отеле (поле HotelIsInStop имеет значение “Available”) и значение этого поля отлично от нуля, то мест в отеле МАЛО. Если туроператор сообщает о том, что мест мало, но не указывает точного количества, поле принимает значение “-1”. Если передано любое иное число, отличное от нуля, то это точное количество оставшихся мест. |
|
Flags |
UInt64 | Набор битовых флагов тура. Тур может иметь несколько установленных флагов одновременно, данное значение является их суммой. Возможные флаги тура:
1 – туроператор рекомендует данный тур; 2 – доступно мгновенное подтверждение; 4 – туроператор считает данный тур лучшим предложением; 8 – тур раннего бронирования; 16 – тур позднего бронирования; 32 – туроператор предоставляет скидку на данный тур; 64 – VIP предложение; 128 – тур доступен в кредит; 256 – тур является эксклюзивным предложением туроператора; 512 – при покупке тура туристу подарок; 1024 – тур является комбинированным; 2048 – тур с обязательством (шоп-тур); 4096 – зарезервировано для использования системой; 8192 – экскурсионный тур; 16384 - Промо цена на тур; 32768 - Тур где перелёт осуществляется на регулярных рейсах 65536 - Тур где перелёт осуществляется на чартерных рейсах 131072 - Туры на транспорте в виде Автобуса 262144 - Туры на транспорте в виде ЖД дороги |
|
Found |
||
|
GiftCaption |
Данный параметр устарел. | |
|
HotelDescription |
String |
Краткое описание отеля. Выдаётся только если параметр includeDescriptions имеет значение “true”. Может быть пустым, если отель не слинкован или не имеет описания. |
|
HotelDescriptionUrl |
String |
Ссылка на описание отеля. |
|
HotelId |
Int32 |
Идентификатор отеля. Если отель не слинкован, принимает значение “0”. |
|
HotelIsInStop |
Enum |
Наличие мест в отеле. Возможные значения: Stop – нет мест, Available – есть места, Request – под запрос, и Unknown – нет данных. |
| IncludeServices | array | Данное поле представляет собой массив id включенных в тур услуг. |
|
HotelName |
String |
Название отеля. |
|
HotelPhotosCount |
Int32 |
Количество фотографий отеля. |
|
HotelRating |
Single |
Рейтинг отеля по десятибалльной шкале. Если рейтинг отсутствует, поле принимает значение “0”. |
|
HotelTitleImageUrl |
String |
Ссылка на титульное изображение отеля в уменьшенном виде (115x80). Размеры изображения могут быть указаны самостоятельно с используется следующего шаблона ссылки: https://hotels.sletat.ru/i/p/{hotel_id}_{image_index}_{h}_{w}.jpg – где:
Изображения не предоставляются для неслинкованных отелей, а также для отелей с отсутствующим описанием. |
|
HtPlaceDescription |
String |
Описание размещения, выдаётся только если параметр includeDescriptions имеет значение “true”. Может быть пустым, если размещение не слинковано или не имеет описания. |
|
HtPlaceId |
Int32 |
Идентификатор типа размещения. Если данные не слинкованы, поле принимает значение “0”. |
|
HtPlaceName |
String |
Тип размещения. |
|
IsDemoMode |
Boolean |
Если выдача производится в демо-режиме, поле принимает значение “true”. В демо-режиме не отображаются цены, а также все результаты поиска заполнены демонстрационными данными. |
|
Kids |
Int32 |
Количество туристов (детей). |
|
MealDescription |
String |
Описание типа питания. Выдаётся только если параметр includeDescriptions имеет значение “true”. Может быть пустым, если данные не слинкованы или тип питания не описан. |
|
MealId |
Int32 |
Идентификатор типа питания. Если данные не слинкованы, поле принимает значение “0”. |
|
MealName |
String |
Тип питания. |
|
Nights |
Int32 |
Продолжительность тура (ночей). |
|
OfferId |
Int64 |
Идентификатор ценового предложения. Используется вместе с SourceId для актуализации тура и оформлении заказа. |
|
OfferIdStr |
String |
Идентификатор ценового предложения в строковом формате. |
|
OriginalHotelName |
String |
Название отеля по данным туроператора. |
|
OriginalStarName |
String |
Категории отеля по данным туроператора. |
|
OriginalTownName |
String |
Название курорта по данным туроператора. |
|
OriginalMealName |
String |
Тип питания по данным туроператора. |
|
OriginalHtPlaceName |
String |
Тип размещения по данным туроператора. |
|
OriginalRoomName |
String |
Типа номера по данным туроператора. |
|
Price |
Int32 |
Цена тура в запрошенной валюте. |
|
PriceType |
Int32 |
Тип цены. Возможные значения: 0 – полная цена тура, 1- цена в пересчёте на человека. Независимо от типа цены стоимость тура выдаётся конечной. |
|
RawPrice |
Int32 |
Цена тура без скидок и наценок, задаваемых в личном кабинете sletat.ru |
|
ReceivingParty |
Данный параметр устарел. | |
|
ResortDescriptionUrl |
String |
Ссылка на описание курорта. Строка может быть пустой, если курорт не слинкован или не имеет ссылки на описание. |
|
ResortId |
Int32 |
Идентификатор курорта. Если курорт не слинкован, поле принимает значение “0”. |
|
ResortName |
String |
Курорт. |
|
RoomId |
Int32 |
Идентификатор типа номера. Если тип номера не слинкован, поле принимает значение “0”. |
|
RoomName |
String |
Тип номера. |
|
SourceId |
Int32 |
Зашифрованный идентификатор туроператора, значение используется вместе с OfferId при актуализации и заказе туров. В расширенной версии сервиса предоставляется оригинальный идентификатор туроператора (по всем вопросам обращайтесь в Службу технической поддержки Слетать.ру по тел. 8(800)700-33-09 или по электронной почте support@sletat.ru). |
|
SourceImageUrl |
String |
Ссылка на логотип туроператора. Поле заполняется только при покупке расширенной версии сервиса (по всем вопросам обращайтесь в Службу технической поддержки Слетать.ру по тел. 8(800)700-33-09 или по электронной почте support@sletat.ru). |
|
SourceName |
String |
Наименование туроператора. Поле заполняется только при покупке расширенной версии сервиса (по всем вопросам обращайтесь в Службу технической поддержки Слетать.ру по тел. 8(800)700-33-09 или по электронной почте support@sletat.ru). |
|
SourceSearchFormUrl |
String |
Ссылка на форму поиска туроператора. Поле заполняется только при покупке расширенной версии сервиса (по всем вопросам обращайтесь в Службу технической поддержки Слетать.ру по тел. 8(800)700-33-09 или по электронной почте support@sletat.ru). |
|
StarId |
Int32 |
Идентификатор категории отеля. Если данные не слинкованы, поле принимает значение “0”. |
|
StarName |
String |
Категория отеля. |
|
TicketsIncluded |
Enum |
Состав турпакета. Возможные значения: NotIncluded – авиаперелёт не включён в стоимость тура, Included – авиаперелёт включён, и Unknown – нет данных. |
|
TourArchiveHash |
Хэш тура для поиска цены в сервисе аналитики | |
|
TourHash |
Уникальный хэш тура. | |
|
TourName |
String |
Название тура. Поле может быть пустым, если туроператор не предоставляет таких данных. |
|
TourUrl |
String |
Ссылка на описание / бронирование тура на сайте туроператора, Поле заполняется только при покупке расширенной версии сервиса (по всем вопросам обращайтесь в Службу технической поддержки Слетать.ру по тел. 8(800)700-33-09 или по электронной почте support@sletat.ru). На момент написания настоящего руководства некоторые туроператоры не имеют ссылок в сервисе Слетать.ру. |
Элемент Visa содержит информацию о стоимости визы.
Поля элемента Visa:
|
Поле |
Тип |
Описание |
|
Price |
Int32 |
Размер визового сбора |
|
CurrencyName |
String |
Валюта поля Price. Возможные значения: RUB, USD, EUR, BYN, UAH. |
Элемент Visa может быть пустым (NULL), если в системе нет информации о стоимости визы. Если элемент Visa не пустой, то все вложенные элементы обязательно имеют значение.
Структура OilTaxes заполняется информацией о топливных сборах (элементы XmlTourOilTax) для туров в результате поиска.
Поля элемента XmlTourOilTax (знаком * отмечены обязательные поля):
|
Поле |
Тип |
Описание |
| AgeFrom | Int32 | Возраст туриста, от которого включается данный топливный сбор. |
| AgeTo | Int32 | Возраст туриста, до которого включается данный топливный сбор. |
|
AirCompanyName |
String |
Название авиакомпании, к которой относится информация по топливному сбору. Если информация относится ко всем авиакомпаниям, поле остаётся пустым. Может быть несколько элементов OilTax с одинаковыми значениями всех полей, кроме AirCompanyName и Tax. Таким образом сообщается информация о размерах топливных сборов у разных авиакомпаний. Если у одного из элементов OilTax поле AirCompanyName оставлено пустым, то информация этого элемента относится ко всем авиакомпаниям, а остальные элементы OilTax описывают исключения. |
|
AirportName |
String |
Название аэропорта. |
|
CurrencyName* |
String |
Валюта поля Tax. Возможные значения: RUB, USD, EUR, BYN, UAH. |
|
Date1* |
DateTime |
Дата начала действия топливного сбора. |
|
Date2* |
DateTime |
Дата окончания действия топливного сбора. |
|
FlightNumber |
Int32 |
Номер рейса, к которому применяется сбор. Если информация относится ко всем авиакомпаниям, поле остаётся пустым. |
|
PartnerName |
String |
Принимающая сторона. Если поле заполнено, топливный сбор действителен только для туров с указанной принимающей стороной. Если топливный сбор действителен для всех принимающих сторон, поле остаётся пустым. Может быть несколько элементов OilTax с одинаковыми значениями всех полей, кроме PartnerName и Tax. |
|
ResortId |
Int32 |
Идентификатор курорта. |
|
ResortName |
Название курорта. | |
|
SourceId* |
Int32 |
Идентификатор туроператора в зашифрованном виде. В расширенной версии сервиса поле содержат оригинальные идентификаторы туроператоров (по всем вопросам обращайтесь в Службу технической поддержки Слетать.ру по тел. 8(800)700-33-09 или по электронной почте support@sletat.ru). |
|
Tax * |
Int32 |
Размер топливного сбора. Если топливный сбор отсутствует, поле принимает значение “0”. |
Если в системе нет информации по топливным сборам для тура, то множество элементов OilTax будет пустым (NULL).
Чтобы сопоставить туры из выдачи и элементы XmlTOilTax, нужно отфильтровать элементы OilTax по параметру SouceId, и отобрать туры, даты вылета которых попадают в диапазон, заданный полями Date1 и Date2.
ContinueSearch
Метод ContinueSearch создаёт новый поисковый запрос с использованием данных предыдущего. Логика работы метода:
- Проверяется статус обработки исходного поискового запроса (значение requestId последнего указывается в запросе метода ContinueSearch). Если поиск по проверяемому запросу ещё не завершён (т. е. если хотя бы один оператор ещё не выставил значение поля IsProcessed “true”), возвращается текст с описанием ошибки.
- Если проверяемый запрос обработан, то максимальная цена в его выдаче увеличивается на единицу и становится минимальной для нового запроса.
- Метод ContinueSearch создаёт новый поисковый запрос (в статистике такие запросы также учитываются как новые) и возвращает его идентификатор. Все параметры нового поискового запроса, кроме цены, остаются теми же, что и параметры исходного.
- Полученный запрос обрабатывается методами GetRequestState и GetRequestResult.
| Важно! Продолжение поиска возможно в течение 20 минут c начала предыдущего поиска. |
Сигнатура:
XmlContinueSearchData ContinueSearch(
Int32 requestId)
Метод принимает единственный параметр requestId – идентификатор завершённого поискового запроса.
Пример SOAP-запроса:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" > <s:Body> <ContinueSearch xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <requestId>69587384</requestId> </ContinueSearch> </s:Body> </s:Envelope>
Пример SOAP-ответа:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" > <s:Body> <ContinueSearchResponse xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <ContinueSearchResult xmlns:a="urn:SletatRu:DataTypes:XmlContinueSearchData:v1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" > <a:RequestId>69587436</a:RequestId> </ContinueSearchResult> </ContinueSearchResponse> </s:Body> </s:Envelope>
Структура XmlContinueSearchData содержит поле RequestId с идентификатором нового поискового запроса.
ActualizePrice
Метод ActualizePrice необходим для актуализации предложений туроператоров.
Сигнатура:
XmlActualPriceData ActualizePrice(
Int32 sourceId,
Int64 offerId,
Int32 requestId)
Параметры:
|
Параметр |
Тип |
Описание |
|
requestId |
Int32 |
Идентификатор поискового запроса. Выдаётся методами CreateRequest или ContinueSearch. |
|
offerId |
Int64 |
Идентификатор ценового предложения. Выдаётся каждому туру методом GetRequestResult. |
|
sourceId |
Int32 |
Зашифрованный идентификатор туроператора. Выдаётся каждому туру методом GetRequestResult. |
|
login |
Логин от личного кабинета туроператора. | |
|
password |
Пароль от личного кабинета туроператора. |
| Важно! При отсутствии в запросе логина и пароля от личного кабинета туроператора актуализация цены тура может быть не проведена. Ошибки при этом не возникнет. |
Пример SOAP-запроса:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ActualizePrice xmlns="urn:SletatRu:Contracts:Soap11Gate:v1"> <sourceId>14173204</sourceId> <offerId>1287318711</offerId> <requestId>2862432</requestId> <login>****</login> <password>***</password> </ActualizePrice> </soap:Body> </soap:Envelope>
Пример SOAP-ответа:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" > <s:Body> <ActualizePriceResponse xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <ActualizePriceResult xmlns:a="urn:SletatRu:DataTypes:XmlActualPriceData:v1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <a:ErrorMessage i:nil="true"/> <a:IsError>false</a:IsError> <a:IsFound>true</a:IsFound> <a:NextPossibleCommands i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> <a:OilTaxes xmlns:b="urn:SletatRu:DataTypes:XmlOilTax:v1"> <b:XmlOilTax> <b:AgeFrom i:nil="true"/> <b:AgeTo i:nil="true"/> <b:AirCompanyName i:nil="true"/> <b:AirportName i:nil="true"/> <b:CurrencyName i:nil="true"/> <b:FlightNumber i:nil="true"/> <b:HostName i:nil="true"/> <b:PartnerName>Good Time Travel</b:PartnerName> <b:PeriodEndDate>31.12.2020</b:PeriodEndDate> <b:PeriodStartDate>21.12.2018</b:PeriodStartDate> <b:ResortName i:nil="true"/> <b:Tax>0</b:Tax> </b:XmlOilTax> </a:OilTaxes> <a:RandomNumber>2661</a:RandomNumber> <a:ResourceData xmlns:b="urn:SletatRu:DataTypes:XmlResourceData:v1"> <b:XmlResourceData> <b:Name>AIRLINE</b:Name> <b:ResourceId>-591287990</b:ResourceId> <b:Value>Turkish Airlines</b:Value> </b:XmlResourceData> <b:XmlResourceData> <b:Name>FLIGHT</b:Name> <b:ResourceId>-591287990</b:ResourceId> <b:Value>TK 420</b:Value> </b:XmlResourceData> <b:XmlResourceData> <b:Name>AIRPORT_FROM</b:Name> <b:ResourceId>-591287990</b:ResourceId> <b:Value>VKO</b:Value> </b:XmlResourceData> <b:XmlResourceData> <b:Name>AIRPORT_TO</b:Name> <b:ResourceId>-591287990</b:ResourceId> <b:Value>IST</b:Value> </b:XmlResourceData> <a:Resources xmlns:b="urn:SletatRu:DataTypes:XmlResource:v1"> <b:XmlResource> <b:Exclude/> <b:GroupId>-759022283</b:GroupId> <b:Id>-591287990</b:Id> <b:IsChecked>true</b:IsChecked> <b:IsEnabled>true</b:IsEnabled> <b:LinkGroupsId>1146194747</b:LinkGroupsId> <b:Name>TK 420 Москва VKO 08:40 - Стамбул IST 00:55</b:Name> <b:Surcharge>0</b:Surcharge> <b:SurchargeCurrencyId>5</b:SurchargeCurrencyId> <b:SurchargeCurrencyIdOriginal i:nil="true"/> <b:SurchargeOriginal i:nil="true"/> <b:Type>4</b:Type> </b:XmlResource> <b:XmlResource> <b:Exclude/> <b:GroupId>1252486320</b:GroupId> <b:Id>-591287988</b:Id> <b:IsChecked>false</b:IsChecked> <b:IsEnabled>true</b:IsEnabled> <b:LinkGroupsId>895852864</b:LinkGroupsId> <b:Name>TK 420 Москва VKO 08:40 - Стамбул IST 00:55</b:Name> <b:Surcharge>0</b:Surcharge> <b:SurchargeCurrencyId>5</b:SurchargeCurrencyId> <b:SurchargeCurrencyIdOriginal i:nil="true"/> <b:SurchargeOriginal i:nil="true"/> <b:Type>4</b:Type> </b:XmlResource> <b:XmlResource> <b:Exclude/> <b:GroupId>281026895</b:GroupId> <b:Id>-591287986</b:Id> <b:IsChecked>false</b:IsChecked> <b:IsEnabled>true</b:IsEnabled> <b:LinkGroupsId>-380643850</b:LinkGroupsId> <b:Name>TK 420 Москва VKO 08:40 - Стамбул IST 00:55</b:Name> <b:Surcharge>0</b:Surcharge> <b:SurchargeCurrencyId>5</b:SurchargeCurrencyId> <b:SurchargeCurrencyIdOriginal i:nil="true"/> <b:SurchargeOriginal i:nil="true"/> <b:Type>4</b:Type> </b:XmlResource> <b:XmlResource> <b:Exclude/> <b:GroupId>-730380720</b:GroupId> <b:Id>-971584364</b:Id> <b:IsChecked>false</b:IsChecked> <b:IsEnabled>true</b:IsEnabled> <b:LinkGroupsId>-764732685</b:LinkGroupsId> <b:Name>TK 412 Москва VKO 02:50 - Стамбул IST 00:55</b:Name> <b:Surcharge>11632.44</b:Surcharge> <b:SurchargeCurrencyId>5</b:SurchargeCurrencyId> <b:SurchargeCurrencyIdOriginal i:nil="true"/> <b:SurchargeOriginal i:nil="true"/> <b:Type>4</b:Type> </b:XmlResource> <b:XmlResource> <b:Exclude/> <b:GroupId>398232089</b:GroupId> <b:Id>792404789</b:Id> <b:IsChecked>false</b:IsChecked> <b:IsEnabled>true</b:IsEnabled> <b:LinkGroupsId>1087744587</b:LinkGroupsId> <b:Name>TK 414 Москва VKO 12:10 - Стамбул IST 00:55</b:Name> <b:Surcharge>11632.44</b:Surcharge> <b:SurchargeCurrencyId>5</b:SurchargeCurrencyId> <b:SurchargeCurrencyIdOriginal i:nil="true"/> <b:SurchargeOriginal i:nil="true"/> <b:Type>4</b:Type> </b:XmlResource> <a:SessionId>fUEmNh59tkadYw+IZdd1jQ==</a:SessionId> <a:TourInfo xmlns:b="urn:SletatRu:DataTypes:XmlActualTourInfo:v1"> <b:Adults>2</b:Adults> <b:BusinessTicketsDpt>Stop</b:BusinessTicketsDpt> <b:BusinessTicketsRtn>Stop</b:BusinessTicketsRtn> <b:CheckIn>20.09.2019</b:CheckIn> <b:CheckOut>27.09.2019</b:CheckOut> <b:CityFromName>Москва</b:CityFromName> <b:CountryName>Египет</b:CountryName> <b:EconomTicketsDpt>Available</b:EconomTicketsDpt> <b:EconomTicketsRtn>Available</b:EconomTicketsRtn> <b:ExactOriginalPrice>126051</b:ExactOriginalPrice> <b:ExactPrice>126051</b:ExactPrice> <b:Flags>0</b:Flags> <b:Hash>WP9Rc2J6mxoVkL/sd2XX+w==</b:Hash> <b:HotelDesc/> <b:HotelDescriptionUrl>https://hotels.sletat.ru/?id=104601</b:HotelDescriptionUrl> <b:HotelIsInStop>Request</b:HotelIsInStop> <b:HotelName>Mazar Resort & Spa</b:HotelName> <b:HotelPhotosCount>9</b:HotelPhotosCount> <b:HotelTitleImageUrl>https://hotels.sletat.ru/i/p/104601_0.jpg</b:HotelTitleImageUrl> <b:HtPlaceDesc>двухместный номер</b:HtPlaceDesc> <b:HtPlaceName>DBL</b:HtPlaceName> <b:Kids>0</b:Kids> <b:MealDesc>Завтраки и ужины</b:MealDesc> <b:MealName>HB</b:MealName> <b:Nights>7</b:Nights> <b:OfferId>1359485512</b:OfferId> <b:OriginalCurrencyId>5</b:OriginalCurrencyId> <b:OriginalPrice>126051</b:OriginalPrice> <b:OriginalPriceCurrency>USD</b:OriginalPriceCurrency> <b:Price>126051</b:Price> <b:PriceCurrency>RUB</b:PriceCurrency> <b:Rating>0</b:Rating> <b:RequestId>592411141</b:RequestId> <b:ResortName>Sharks Bay</b:ResortName> <b:RoomName>STANDARD</b:RoomName> <b:SourceId>304</b:SourceId> <b:SourceName>Good Time Travel</b:SourceName> <b:SourceSearchFormUrl>http://online.goodtimetravel.ru/search_tour</b:SourceSearchFormUrl> <b:StarName>3*</b:StarName> <b:SysCityFromId>832</b:SysCityFromId> <b:SysCityFromName>Москва</b:SysCityFromName> <b:SysCountryId>40</b:SysCountryId> <b:SysCountryName>Египет</b:SysCountryName> <b:SysHotelId>104601</b:SysHotelId> <b:SysHotelName>Mazar Resort & Spa</b:SysHotelName> <b:SysHtPlaceId>13103</b:SysHtPlaceId> <b:SysHtPlaceName>DBL</b:SysHtPlaceName> <b:SysMealId>113</b:SysMealId> <b:SysMealName>HB</b:SysMealName> <b:SysResortId>1642</b:SysResortId> <b:SysResortName>Шарм-Эль-Шейх</b:SysResortName> <b:SysRoomId>5283</b:SysRoomId> <b:SysRoomName>Standard</b:SysRoomName> <b:SysStarId>402</b:SysStarId> <b:SysStarName>3*</b:SysStarName> <b:TicketsIncluded>Included</b:TicketsIncluded> <b:TourName>Шарм-Эль-Шейх.Рег.рейсы SH1</b:TourName> <b:TourUrl>https://sletat.ru/book/Good Time Travel/MzA0fDEzNTk0ODU1MTJ8ODMyfDU5MjQxMTE0MXw%3d</b:TourUrl> </a:TourInfo> </ActualizePriceResult> </ActualizePriceResponse> </s:Body> </s:Envelope>
В ответ возвращается структура ActualizePriceResult, состоящая из следующих полей:
- IsError – принимает значение “true”, если при актуализации тура возникла ошибка.
- IsFound – поле принимает значение “false”, если тур не был найден в базе туроператора;
- RandomNumber – случайное четырехзначное число, по которому можно просмотреть информацию о туре в личном кабинете на сайте sletat.ru или в программе SletatRu Agent, используется для того, чтобы ваши менеджеры могли точно идентифицировать тур, который клиент нашёл самостоятельно;
- ResourceId
- TourInfo – структура, содержащая основную информацию о туре;
В полях массива Resources представлены данные о перелетах с type = 4 (в сторону курорта) и с type = 10 (в обратную). По-данному id в массиве ResourceData можно найти описание перелетов (Имена аэропортов, городов вылета и т.д.)
Пример:
Путь в структуре ответа до данных о наличии перелета обратно: ActualizePriceResult.Resources [1] (где type = 10, id = 1)
Путь в структуре ответа до подробной информации о перелете обратно: ActualizePriceResult.ResourceData[0] (где resourceId = 1)
Сопоставление данных перелета и записи о его наличии происходит через id == resourceId.
Поля структуры ResourceId
|
Параметр |
Тип |
Описание |
|
id |
long |
Идентификатор перелета |
|
linkGroupsId |
long |
Идентификатор группы перелетов |
|
surcharge |
int |
Cумма доплат за выбранные перелеты |
|
surchargeCurrencyId |
byte |
Валюта доплаты за авиаперелеты |
Поля структуры TourInfo:
|
Поле |
Тип |
Описание |
|
CountryName |
String |
Название страна по данным туроператора. |
|
CityFromName |
String |
Название города вылета по данным туроператора. |
|
ResortName |
String |
Название курорта по данным туроператора. |
|
TourName |
String |
Название тура по данным туроператора. |
|
TourDate |
String |
Дата вылета в формате dd.MM.yyyy. |
|
Nights |
Int32 |
Продолжительность тура (ночей). |
|
HotelName |
String |
Название отеля по данным туроператора. |
|
StarName |
String |
Категория отеля по данным туроператора. |
|
RoomName |
String |
Тип номера по данным туроператора. |
|
MealName |
String |
Тип питания по данным туроператора. |
|
TicketsIncluded |
Enum |
Состав турпакета. Возможные значения: NotIncluded – авиаперелёт в стоимость тура не включён, Included – авиаперелёт включён, и Unknown – нет данных. |
|
HotelIsInStop |
Enum |
Наличие мест в отеле. Возможные значения: Stop – нет мест, Available – есть места, Request – под запрос, и Unknown – нет данных. |
|
EconomTicketsDpt |
Enum |
Наличие билетов эконом-класса (туда). Возможные значения: Stop – нет билетов, Available – есть билеты, Request – под запрос, и Unknown – нет данных. |
|
EconomTicketsRtn |
Enum |
Наличие билетов эконом-класса (обратно). Возможные значения: Stop – нет билетов, Available – есть билеты, Request – под запрос, и Unknown – нет данных. |
|
BusinessTicketsDpt |
Enum |
Наличие билетов бизнес-класса (туда). Возможные значения: Stop – нет билетов, Available – есть билеты, Request – под запрос, и Unknown – нет данных. |
|
BusinessTicketsRtn |
Enum |
Наличие билетов бизнес-класса (обратно). Возможные значения: Stop – нет билетов, Available – есть билеты, Request – под запрос, и Unknown – нет данных. |
|
HtPlaceName |
String |
Тип размещения по данным туроператора. |
|
Price |
Int32 |
Цена тура в запрошенной валюте (со скидкой и наценкой). |
|
PriceCurrency |
String |
Обозначение валюты. Возможные значения: RUB, EUR, USD, BYN, UAH. |
|
OriginalPrice |
Int32 |
Оригинальная цена тура в исходной валюте (со скидкой и наценкой). |
|
OriginalPriceCurrency |
String |
Обозначение валюты (по данным туроператора) поля OriginalPrice. |
|
SourceId |
Int32 |
Идентификатор туроператора. Поле заполняется только при покупке расширенной версии сервиса (по всем вопросам обращайтесь в Службу технической поддержки Слетать.ру по тел. 8(800)700-33-09 или по электронной почте support@sletat.ru). |
|
SourceName |
String |
Наименование туроператора. Поле заполняется только при покупке расширенной версии сервиса (по всем вопросам обращайтесь в службу поддержки support@sletat.ru). |
|
SourceSearchFormUrl |
String |
Ссылка на форму поиска туроператора. Поле заполняется только при покупке расширенной версии сервиса (по всем вопросам обращайтесь в Службу технической поддержки Слетать.ру по тел. 8(800)700-33-09 или по электронной почте support@sletat.ru). |
|
SysCountryId |
Int32 |
Идентификатор страны по справочнику стран. |
|
SysCountryName |
String |
Название страны по справочнику стран. |
|
SysCityFromId |
Int32 |
Идентификатор города вылета по справочнику городов вылета. |
|
SysCityFromName |
String |
Название города вылета по справочнику городов вылета. |
|
SysResortId |
Int32 |
Идентификатор курорта по справочнику курортов. Если курорт туроператора не слинкован, поле принимает значение “0”. |
|
SysResortName |
String |
Название курорта по справочнику курортов. Если курорт туроператора не слинкован, поле принимает пустое значение. |
|
SysHotelId |
Int32 |
Идентификатор отеля по справочнику отелей. Если отель туроператора не слинкован, поле принимает значение “0”. |
|
SysHotelName |
String |
Название отеля по справочнику отелей. Если отель туроператора не слинкован, поле принимает пустое значение. |
|
SysStarId |
Int32 |
Идентификатор категории отеля по справочнику. Если категория отеля туроператора не слинкована, поле принимает значение “0”. |
|
SysStarName |
String |
Категория отеля по справочнику. Если категория отеля туроператора не слинкована, поле принимает пустое значение. |
|
SysRoomId |
Int32 |
Идентификатор типа номера по справочнику. Если тип номера туроператора не слинкован, поле принимает значение “0”. |
|
SysRoomName |
String |
Тип номера по справочнику. Если тип номера туроператора не слинкован, поле принимает пустое значение. |
|
SysMealId |
Int32 |
Идентификатор типа питания по справочнику. Если тип питания туроператора не слинкован, поле принимает значение “0”. |
|
SysMealName |
String |
Тип питания по справочнику. Если тип питания туроператора не слинкован, поле принимает пустое значение. |
|
SysHtPlaceId |
Int32 |
Идентификатор типа размещения по справочнику. Если тип размещения туроператора не слинкован, поле принимает значение “0”. |
|
SysHtPlaceName |
String |
Тип размещения. Если размещение туроператора не слинковано, поле принимает пустое значение. |
|
HotelDescriptionUrl |
String |
Ссылка на описание отеля. |
|
HotelTitleImageUrl |
String |
Ссылка на титульное изображение отеля в уменьшенном виде (115x80). Вы можете изменить размеры изображения, используя шаблон ссылки: https://hotels.sletat.ru/i/p/{hotel_id}_{image_index}_{h}_{w}.jpg – где:
Изображения не предоставляются для неслинкованных отелей, а также для отелей с отсутствующим описанием. |
|
HotelPhotosCount |
Int32 |
Количество фотографий отеля. |
|
TourUrl |
String |
Ссылка на описание / бронирование тура на сайте туроператора. Поле заполняется только при покупке расширенной версии сервиса (по всем вопросам обращайтесь в Службу технической поддержки Слетать.ру по тел. 8(800)700-33-09 или по электронной почте support@sletat.ru). На момент написания настоящего руководства некоторые туроператоры не имеют ссылок в сервисе Слетать.ру. |
|
OriginalCurrencyId |
Int32 |
Идентификатор валюты тура по данным туроператора. Возможные значения: 2 – USD, 3 – EUR, 5 – RUR. |
| Adults | Int32 | Количество туристов (взрослых). |
| Kids | Int32 | Количество туристов (детей). |
| BAGGAGE_PLACES | string | Количество мест. |
| BAGGAGE_WEIGHTS | string | Веса багажа для каждого из мест (по порядку). |
| BAGGAGE_INCLUDED | string | Идентификатор, показывающий, включён ли багаж в рейс. Возможные значения: true - включен, false - не включен. |
| Параметр BAGGAGE_INCLUDED может иметь значение "true", но если параметр BAGGAGE_PLACES = 0 - то трактовать надо так, что багаж не включен. |
ActualizePriceByCode
Метод ActualizePriceByCode позволяет получать информацию о туре по пятизначному коду с сайта sletat.ru или по четырёхзначному коду, полученному с помощью метода актуализации расширенного сервиса поиска XML/JSON. Пятизначные коды отображаются на сайте sletat.ru в поиске, а также в разделе «Горящие туры».
Сигнатура:
XmlActualPriceData ActualizePriceByCode(
Int32 code)
Метод принимает единственный параметр code – пятизначный код тура с сайта Sletat.Ru (целое число 10000-99999) или четырёхзначный код (целое число 1000-9999).
Пример SOAP-запроса:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" > <soap:Body> <ActualizePriceByCode xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <code>9999</code> </ActualizePriceByCode> </soap:Body> </soap:Envelope>
Ответ идентичен выдаче метода ActualizePrice.
Выполнение метода может быть завершено с ошибкой по следующим причинам:
- код тура устарел (действителен сутки с момента получения);
- код тура указан неверно (принимаются только четырёхзначные коды с сайта sletat.ru);
- нет подходящей лицензии для выполнения запроса (был указан трёхзначный код тура, но у клиента нет действительной лицензии на сервис актуализации или на расширенный сервис XML/JSON.
Описание ошибок всегда возвращается.
SaveTourOrder
Метод SaveTourOrder добавляет заказ тура в систему Слетать.ру. В вашем личном кабинете на сайте sletat.ru вы можете настроить SMS- и email-уведомления о новых заказах. Приложение SletatRu Agent для Windows также отслеживает новые заказы и присылает вам оповещения.
Сигнатура:
void SaveTourOrder(
Int32 requestId,
Int64 offerId,
Int32 sourceId,
String user,
String email,
String phone,
String info
Int32 officeId)
Параметры:
|
Параметр |
Тип |
Описание |
|
requestId |
Int32 |
Идентификатор поискового запроса. Выдаётся методами CreateRequest или ContinueSearch при создании нового поискового запроса; |
|
offerId |
Int64 |
Идентификатор ценового предложения. Выдаётся каждому туру методом GetRequestResult. |
|
sourceId |
Int32 |
Идентификатор туроператора. Выдаётся каждому туру методом GetRequestResult. |
|
user |
String |
Имя туриста. |
|
|
String |
Контактный e-mail. |
|
phone |
String |
Контактный телефон. |
| info | String | Комментарий туриста (необязательное поле). |
| officeId | Int | Идентификатор офиса, к которому привяжется созданная заявка. Получить список идентификаторов активных офисов можно обратившись к справочнику GetOffices: https://module.sletat.ru/Main.svc/GetOffices?login=login&password=pass |
| originType | Служебный параметр. Используется для внутренних сервисов Слетать.ру | |
| touristId | Служебный параметр. Используется для внутренних сервисов Слетать.ру | |
| subwayIds | Служебный параметр. Используется для внутренних сервисов Слетать.ру |
Пример SOAP-запроса:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <SaveTourOrder xmlns="urn:SletatRu:Contracts:Soap11Gate:v1"> <requestId>2857817</requestId> <offerId>225355464</offerId> <sourceId>14146146</sourceId> <user>John Doe</user> <email>johndoe@sample.com</email> <phone>+7 905 555 55 55</phone> <info>any additional information here</info> </SaveTourOrder> </soap:Body> </soap:Envelope>
Пример SOAP-ответа:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <SaveTourOrderResponse xmlns="urn:SletatRu:Contracts:Soap11Gate:v1"/> </s:Body> </s:Envelope>
В случае успешного добавления заказа никакой информации метод не возвращает.
AddLargeComment
Метод AddLargeComment добавляет отзыв к отелю.
Параметры:
| Параметр | Тип | Описание |
| rate | Рейтинг (оценка отелю). | |
| positive | Что понравилось в отеле. | |
| negative | Что не понравилось в отеле. | |
| touristName | Имя туриста. | |
| startRest | Начало проживание в отеле. | |
| endRest | Окончание проживание в отеле. | |
| hotelId | Идентификатор отеля |