Шлюз поиска туров (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 используется для поиска наиболее актуального набора туров. |
В приведённом ниже примере создаётся поисковый запрос со следующими параметрами:
- город вылета Санкт-Петербург;
- направление Египет;
- курорты Хургада и Шарм-Эль-Шейх;
- вид питания All Included;
- 2 взрослых туриста без детей;
- продолжительность тура 14 ночей;
- цены отобразить в рублях;
- дата начала вылета в диапазоне от 10 до 17 октября 2011 года;
- не выводить отели в стопе;
- выводить только туры с включенным перелётом;
- выводить только туры с наличием билетов туда и обратно.
Пример SOAP-запроса:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" > <s:Body> <CreateRequest xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <countryId>40</countryId> <cityFromId>1264</cityFromId> <cities> <int xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" > 1592 </int> <int xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" > 1642 </int> </cities> <meals> <int xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" > 115 </int> </meals> <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> <hotels xsi:nil="true" /> <adults>2</adults> <kids>0</kids> <kidsAges xsi:nil="true" /> <nightsMin>14</nightsMin> <nightsMax>14</nightsMax> <currencyAlias>RUB</currencyAlias> <departFrom>10.10.2011</departFrom> <departTo>17.10.2011</departTo> <hotelIsNotInStop>true</hotelIsNotInStop> <hasTickets>true</hasTickets> <ticketsIncluded>true</ticketsIncluded> <f_to_id xsi:nil="true" /> <includeDescriptions>true</includeDescriptions> </CreateRequest> </s:Body> </s: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)
Метод принимает единственный параметр requestId – идентификатор запроса, возвращённый методом CreateRequest при создании запроса.
Пример SOAP-запроса:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" > <s:Body> <GetRequestResult xmlns="urn:SletatRu:Contracts:Soap11Gate:v1" > <requestId>4355852</requestId> </GetRequestResult> </s:Body> </s:Envelope>
Пример 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, состоящая из следующих полей:
- TourInfo – структура, содержащая основную информацию о туре;
- RandomNumber – случайное четырехзначное число, по которому можно просмотреть информацию о туре в личном кабинете на сайте sletat.ru или в программе SletatRu Agent, используется для того, чтобы ваши менеджеры могли точно идентифицировать тур, который клиент нашёл самостоятельно;
- IsFound – поле принимает значение “false”, если тур не был найден в базе туроператора;
- IsError – принимает значение “true”, если при актуализации тура возникла ошибка.
Поля структуры 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 |
Оригинальная цена тура в исходной валюте. Поскольку параметр доступен не всегда, значение этого поля может дублировать значение поля Price. |
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 | Веса багажа для каждого из мест (по порядку) |
В полях массива Resources представлены данные о перелетах с type = 4 (в сторону курорта) и с type = 10 (в обратную). По данному id в массиве ResourceData можно найти описание перелетов (Имена аэропортов, городов вылета и т.д.) Пример: Путь в структуре ответа до данных о наличии перелета обратно: ActualizePriceResult.Resources [1] (где type = 10, id = 1) Путь в структуре ответа до подробной информации о перелете обратно: ActualizePriceResult.ResourceData[0] (где resourceId = 1) Сопоставление данных перелета и записи о его наличии происходит через id == resourceId.
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 | Идентификатор отеля |