Подключение туроператоров — различия между версиями

Материал из wiki.Sletat.ru
Перейти к: навигация, поиск
(Поиск туров)
(Поиск туров)
Строка 343: Строка 343:
  
 
Корневой элемент '''getToursResult''' содержит произвольное количество элементов '''tour''' (от 0 элементов, но не более количества указанного в параметре '''count'''), каждый из которых описывает тур следующими атрибутами:
 
Корневой элемент '''getToursResult''' содержит произвольное количество элементов '''tour''' (от 0 элементов, но не более количества указанного в параметре '''count'''), каждый из которых описывает тур следующими атрибутами:
 +
 +
{| class="wikitable"
 +
|Параметр; '''обязательный'''
 +
|Описание
 +
|-
 +
|'''offerId'''
 +
|Уникальный идентификатор предложения, по которому в дальнейшем можно провести актуализацию тура или бронирование.
 +
|-
 +
|'''tourName'''
 +
|Произвольное название тура.
 +
|-
 +
|'''hotelId'''
 +
|Идентификатор отеля.
 +
|-
 +
|hotelUrl
 +
|Ссылка на страницу с описанием отеля.
 +
|-
 +
|'''resortId'''
 +
|Идентификатор курорта, в котором расположен отель.
 +
|-
 +
|'''hotelCategoryId'''
 +
|Идентификатор категории отеля.
 +
|-
 +
|'''mealId'''
 +
|Идентификатор вида питания.
 +
|-
 +
|'''htPlaceName'''
 +
|Произвольное название размещения в номере (примеры: DBL, TRP, 2 ADL + 1 CH (212), 2 ADL + INF). Название должно отображать допустимые возрасты детей (если поиск был с указанием количества детей более 0) или то, что размещение с учетом инфанта (+ INF), в соответствующем случае.
 +
|-
 +
|roomTypeName
 +
|Название типа номера (примеры: standard, deluxe, family, deluxe super ocean view).
 +
|-
 +
|'''tourDate'''
 +
|Дата начала тура в формате dd.MM.yyyy (пример: 31.12.2015).
 +
|-
 +
|tourEndDate
 +
|Дата окончания тура (дата прилета) в формате dd.MM.yyyy (пример: 31.12.2015).
 +
|-
 +
|'''nights'''
 +
|Количество ночей в туре.
 +
|-
 +
|'''price'''
 +
|Цена тура в валюте, которая была указана во входном параметре '''currencyId'''.
 +
|-
 +
|'''hotelIsInStop'''
 +
|Наличие мест в отеле, допустимы значения: 0 – есть места, 1 – нет мест, 2 – запрос.
 +
|-
 +
|'''ticketsIncluded'''
 +
|Включена ли стоимость билетов в стоимость тура, допустимы значения: 0 – не включена (тур только отель), 1 – включена (пакетный тур).
 +
|-
 +
|'''hasEconomTicketsDpt'''
 +
|Наличие билетов эконом класса на место отдыха, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
 +
|-
 +
|'''hasEconomTicketsRtn'''
 +
|Наличие обратных билетов эконом класса, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
 +
|-
 +
|'''hasBusinessTicketsDpt'''
 +
|Наличие билетов бизнес класса на место отдыха, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
 +
|-
 +
|'''hasBusinessTicketsRtn'''
 +
|Наличие обратных билетов бизнес класса, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
 +
|-
 +
|'''tourUrl'''
 +
|Ссылка, при переходе по которой можно забронировать тур (ссылка может вести на страницу авторизации, но после авторизации должны автоматически попасть на страницу бронирования тура).
 +
|-
 +
|spoUrl
 +
|Ссылка на описание тура, его программы (если есть).
 +
|-
 +
|fewPlacesInHotel
 +
|Поле заполняется, если есть указание на то, что мест в отеле мало. Если нельзя указать точное количество оставшихся мест, то заполняется значением -1, иначе указывается точное количество оставшихся мест.
 +
|-
 +
|fewTicketsDptY
 +
|Поле заполняется, если есть указание на то, что мест эконом класса туда мало. Если нельзя указать точное количество оставшихся мест, то заполняется значением -1, иначе указывается точное количество оставшихся мест.
 +
|-
 +
|fewTicketsRtnY
 +
|Поле заполняется, если есть указание на то, что мест эконом класса обратно мало. Если нельзя указать точное количество оставшихся мест, то заполняется значением -1, иначе указывается точное количество оставшихся мест.
 +
|-
 +
|fewTicketsDptB
 +
|Поле заполняется, если есть указание на то, что мест бизнес класса туда мало. Если нельзя указать точное количество оставшихся мест, то заполняется значением -1, иначе указывается точное количество оставшихся мест.
 +
|-
 +
|fewTicketsRtnB
 +
|Поле заполняется, если есть указание на то, что мест бизнес класса обратно мало. Если нельзя указать точное количество оставшихся мест, то заполняется значением -1, иначе указывается точное количество оставшихся мест.
 +
|-
 +
|flags
 +
|Набор битовых флагов тура. Тур может иметь несколько установленных флагов одновременно, данное значение является их суммой. Возможные флаги тура:  1 – туроператор рекомендует данный тур;  2 – доступно мгновенное подтверждение;  4 – туроператор считает данный тур лучшим предложением;  8 – тур раннего бронирования;  16 – тур позднего бронирования;  32 – туроператор предоставляет скидку на данный тур;  64 – VIP предложение;  128 – тур доступен в кредит;  256 – тур является эксклюзивным предложением туроператора;  512 – при покупке тура туристу подарок;  1024 – тур является комбинированным (турист посещает несколько курортов);  2048 – тур с обязательством (шоп - тур);  4096 – зарезервировано для использования системой;  8192 – экскурсионный тур;
 +
|-
 +
|description
 +
|Дополнительная информация по туру, например, для комбинированных туров может содержать информацию о проживании в отелях.
 +
|-
 +
|receivingParty
 +
|Принимающая сторона.
 +
|-
 +
|earlyBookingValidTill
 +
|Если тур является туром раннего бронирования и известна последняя дата ранней брони, то в данном поле должна быть указана эта дата.
 +
|-
 +
|}

Версия 15:27, 20 января 2016

Описание сервиса

Для интеграции со Слетать.ру нужно создать веб-сервис, который будет выполнять следующие задачи:

  • Выгружать справочники: города вылета, страны, курорты, отели и т.д.
  • Осуществлять параметризованный поиск цен
  • Актуализировать выбранный тур по его идентификатору

Для упрощения, сервис можно представить веб-страничкой, которая принимает GET или POST параметры и выдаёт ответ в формате XML (не SOAP).

Для всех методов сервиса должен использоваться один адрес. Например, если вы реализуете сервис по адресу: http://mysite.com/services/sletatru.xml , то этот адрес должен быть общим для всех запросов.

Примеры:

Выдача результатов должна быть в формате XML, для каждого метода описан формат.

Для корневого элемента в результате должен быть указан атрибут version с указанием версии протокола. Атрибут нужен для определения версии провайдера туров сервисом Слетать.ру.

Пример:

<getCountriesResult version="1.0">
...
</getCountriesResult> 

Данный документ описывает версию прокола 1.0.

Все методы должны возвращать XML в кодировке UTF-8.

Все параметры запросов, не помеченные как обязательные, являются необязательными только для стороны, формирующей запрос. Для серверной стороны обработка всех полученных параметров запроса обязательна.

Результат выполнения запросов (поискового в частности) должен строго соответствовать указанным параметрам. Если параметр не обязателен и не указан, запрос его не учитывает и возвращает все варианты.

Пул IP адресов, с которых сервис Слетать.ру будет обращаться к реализуемому провайдеру туров уточняется отдельно. Для его уточнения необходимо написать на support@sletat.ru

Дополнительные требования к сервису

Максимально допустимое время при работе с любым методом сервиса не должно превышать 30 секунд. Рекомендуемая скорость ответов (в том числе для метода выдачи туров) до 5 секунд. Если какой-либо метод вернёт результат за период более 30 секунд, то сервис Слетать.ру не обработает эти данные.

Любой метод реализуемого сервиса может быть вызван одновременно различными потоками. Поэтому в реализации методов не должно быть блокировок, синхронизирующих доступ к методам. Метод выдачи туров должен поддерживать параллельное выполнение нескольких поисковых запросов.

Количество запросов в сутки к реализуемому сервису уточняется отдельно и зависит от следующих параметров:

  • количества и популярности направлений туроператора
  • количества городов вылета
  • количества поисковых запросов в сервисе Слетать.ру

Реализуемые методы

Для каждого метода указано назначение, список входящих параметров, формат выдачи, а также описание и типы данных в выдаче методов.

В методах используются следующие типы данных:

  • Int32 – целое число (32 бита со знаком) от 2, 147, 483, 648 до 2, 147, 483, 647
  • Int64 – целое число (64 бита со знаком)
  • UInt64 – целое число (64 бита без знака)
  • String - строка

Выгрузка списка стран

Метод производит выгрузку всех направлений туроператора.

Формат запроса: ?action=GetCountries

Параметры:

  • id – идентификатор страны (опциональный; если указан, то запрашивается только одна запись)

Формат выдачи:

<getCountriesResult version="1.0">
 <country id="{Int32}" name="{String}" />
 ...
</getCountriesResult>

Корневой элемент getCountriesResult содержит произвольное количество элементов country, каждый из которых описывает направление атрибутами id (идентификатор страны) и name (название страны, язык рус/анг).

Выгрузка списка городов вылета

Метод производит выгрузку всех доступных городов вылета, а также содержит данные о том, какие направления доступны из каждого города вылета. Сервис Слетать.ру периодически обращается к данному методу для обновления данных о доступных направлениях для каждого города вылета у туроператора.

Формат запроса: ?action=GetDepartCities

Параметры:

  • id – идентификатор города вылета (опциональный; если указан, то запрашивается только одна запись)

Формат выдачи:

<getDepartCitiesResult version="1.0">
 <city id="{Int32}" name="{String}">
 <countryTo id="{Int32}" />
 ...
 </city>...
</getDepartCitiesResult>

Корневой элемент getDepartCitiesResult содержит произвольное количество элементов city, каждый из которых описывает город вылета атрибутами id (идентификатор города) и name (название города, язык рус/анг). Каждый элемент city также должен содержать набор элементов countryTo, каждый из которых описывает доступное направление из города вылета. Для элемента countryTo указывается атрибут id с идентификатором страны.

Выгрузка списка курортов

Метод возвращает список всех доступных курортов.

Формат запроса: ?action=GetResorts

Параметры:

  • id – идентификатор курорта (опциональный; если указан, то запрашивается только одна запись)

Формат выдачи:

<getResortsResult version="1.0">
 <resort id="{Int32}" name="{String}" countryId="{Int32}" />
 ...
</getResortsResult>

Корневой элемент getResortsResult содержит произвольное количество элементов resort, каждый из которых описывает курорт атрибутами id (идентификатор курорта), name (название курорта, язык рус/анг) и countryId (идентификатор страны в котором расположен курорт).

Выгрузка списка категорий отелей

Метод возвращает список категорий отелей (примеры: 3*, 4*, Apts и т.д.).

Формат запроса: ?action=GetHotelCategories

Параметры:

  • id – идентификатор категории отеля (опциональный; если указан, то запрашивается только одна запись)

Формат выдачи:

<getHotelCategoriesResult version="1.0">
 <hotelCategory id="{Int32}" name="{String}" />
 ...
</getHotelCategoriesResult>

Корневой элемент getHotelCategoriesResult содержит произвольное количество элементов hotelCategory, каждый из которых описывает категорию отеля атрибутами id (идентификар) и name (название).

Выгрузка списка отелей

Метод возвращает список всех доступных отелей. В данном методе желательно возвращать только те отели, по которым в базе туроператора есть актуальные цены.

Формат запроса: ?action=GetHotels

Параметры:

  • id – идентификатор отеля (опциональный; если указан, то запрашивается только одна запись)

Формат выдачи:

<getHotelsResult version="1.0">
 <hotel id="{Int32}" name="{String}" hotelCategoryId="{Int32}" resortId="{Int32}" />
 ...
</getHotelsResult> 

Корневой элемент getHotelsResult содержит произвольное количество элементов hotel, каждый из которых описывает отель атрибутами id (идентификатор), name (название отеля), hotelCategoryId (идентификатор категории отеля) и resortId (идентификатор курорта в котором расположен отель).

Выгрузка видов питания

Метод возвращает список видов питания (примеры: HB, BB, без питания и т.д.).

Формат запроса: ?action=GetMeals

Параметры:

  • id – идентификатор вида питания (опциональный; если указан, то запрашивается только одна запись)

Формат выдачи:

<getMealsResult version="1.0">
 <meal id="{Int32}" name="{String}" />
 ...
</getMealsResult>  

Корневой элемент getMealsResult содержит произвольное количество элементов meal, каждый из которых описывает вид питания атрибутами id (идентификатор) и name (название).

Выгрузка списка валют

Метод возвращает список используемых валют. Список обязательно должен содержать рубли, доллары и евро.

Формат запроса: ?action=GetCurrencies

Параметры:

  • id – идентификатор валюты (опциональный; если указан, то запрашивается только одна запись)

Формат выдачи:

<getCurrenciesResult version="1.0">
 <currency id="{Int32}" name="{String}" />
 ...
</getCurrenciesResult>

Корневой элемент getCurrenciesResult содержит произвольное количество элементов currency, каждый из которых описывает валюту атрибутами id (идентификатор) и name (название).

Поиск туров

Метод поиска туров использует множество параметров для поиска и фильтрации туров. Метод лишь должен возвращать наиболее дешевые предложения, найденные по предоставленным параметрам. Количество туров в выдаче регулируется параметром count.

Формат запроса: ?action=GetTours

Параметры:

Параметр; обязательный Тип данных Описание
offerId Int64 Уникальный идентификатор ранее найденного предложения. В случае, если данный параметр задан, все остальные параметры не обязательны и не должны приниматься в расчет. Метод должен возвращать одну запись.
count Int32 Максимальное количество предложений в выдаче.
countryId Int32 Идентификатор страны.
departCityId Int32 Идентификатор города вылета.
dateFrom String Начальная дата в диапазоне дат вылета в формате dd.MM.yyyy (пример: 31.12.2015).
dateTo String Конечная дата в диапазоне дат вылета в формате dd.MM.yyyy (пример: 31.12.2015).
adults Int32 Количество взрослых.
kids Int32 Количество детей.
kidsAges String Количество полных лет каждому ребёнку. Передаётся в виде строки, перечисление через запятую (пример: 3,6). Значения 0 или 1 используются для обозначения инфантов.
nightsMin Int32 Минимальное количество ночей в туре.
nightsMax Int32 Максимальное количество ночей в туре.
resorts String Идентификаторы курортов, перечисление через запятую.
hotelCategories String Идентификаторы категорий отелей, перечисление через запятую.
hotels String Идентификаторы отелей, перечисление через запятую.
meals String Идентификаторы видов питания, перечисление через запятую.
currencyId Int32 Валюта, в которой должны быть выданы цены, а также валюта для входящих параметров priceMin и priceMax (если они есть).
priceMin Int32 Цена тура от.
priceMax Int32 Цена тура до.
hotelIsNotInStop Int32 При значении "1" - в результатах не должно быть отелей в стопе (отели со статусом «под запрос» допустимы). При значении "0" в результат должны попадать как отели в стопе, так и отели с наличием мест и с местами по запросу.
ticketsIncluded Int32 При значении "1" в результатах должны быть только туры с включенной стоимостью перелёта («только отель» - недопустимы). При значении "0" в результат должны попадать как туры без перелета, так и туры с перелетом.
hasTickets Int32 При значении "1" в результатах должны быть туры только с реальным наличием билетов в перелёте. Не должно быть туров со стопом на перелёте, перелёты со статусом «под запрос» недопустимы. При значении "0" в результат должны попадать как туры без билетов на рейс, так и туры с наличием билетов и с билетами по запросу.
excludeUsualTours Int32 При значении "1" из результатов должны быть исключены туры, являющиеся обычными турами (не являющиеся комбинированными, экскурсионными или шоп-турами). При значении "0" или отсутствии данного параметра, такие туры должны быть включены в результат.
excludeCombined Int32 При значении "1" из результатов должны быть исключены туры, являющиеся комбинированными (в рамках которых турист посещает несколько курортов). При значении "0" или отсутствии данного параметра, такие туры должны быть включены в результат.
excludeShopTours Int32 При значении "1" из результатов должны быть исключены шоп-туры и туры с обязательствами. При значении "0" или отсутствии данного параметра, такие туры должны быть включены в результат.
excludeExcursionTours Int32 При значении "1" из результатов должны быть исключены экскурсионные туры. При значении "0" или отсутствии данного параметра, такие туры должны быть включены в результат.

Формат выдачи:

<getToursResult version="1.0">
 <tour
  offerId="{Int64}"
  tourName="{String}"
  hotelId="{Int32}"
  hotelUrl="{String}"
  resortId="{Int32}"
  hotelCategoryId="{Int32}"
  mealId="{Int32}"
  htPlaceName="{String}"
  roomTypeName="{String}"
  tourDate="{String}"
  nights="{Int32}"
  price="{Int32}"
  hotelIsInStop="{Int32}"
  ticketsIncluded="{Int32}"
  hasEconomTicketsDpt="{Int32}"
  hasEconomTicketsRtn="{Int32}"
  hasBusinessTicketsDpt="{Int32}"
  hasBusinessTicketsRtn="{Int32}"
  tourUrl="{String}"
  spoUrl="{String}"
  fewPlacesInHotel="{Int32}"
  fewTicketsDptY="{Int32}"
  fewTicketsRtnY="{Int32}"
  fewTicketsDptB="{Int32}"
  fewTicketsRtnB="{Int32}"
  flags="{UInt64}"
  description="{String}"
  receivingParty="{String}"
  earlyBookingValidTill="{String}"
  />
 ...
</getToursResult>

Корневой элемент getToursResult содержит произвольное количество элементов tour (от 0 элементов, но не более количества указанного в параметре count), каждый из которых описывает тур следующими атрибутами:

Параметр; обязательный Описание
offerId Уникальный идентификатор предложения, по которому в дальнейшем можно провести актуализацию тура или бронирование.
tourName Произвольное название тура.
hotelId Идентификатор отеля.
hotelUrl Ссылка на страницу с описанием отеля.
resortId Идентификатор курорта, в котором расположен отель.
hotelCategoryId Идентификатор категории отеля.
mealId Идентификатор вида питания.
htPlaceName Произвольное название размещения в номере (примеры: DBL, TRP, 2 ADL + 1 CH (212), 2 ADL + INF). Название должно отображать допустимые возрасты детей (если поиск был с указанием количества детей более 0) или то, что размещение с учетом инфанта (+ INF), в соответствующем случае.
roomTypeName Название типа номера (примеры: standard, deluxe, family, deluxe super ocean view).
tourDate Дата начала тура в формате dd.MM.yyyy (пример: 31.12.2015).
tourEndDate Дата окончания тура (дата прилета) в формате dd.MM.yyyy (пример: 31.12.2015).
nights Количество ночей в туре.
price Цена тура в валюте, которая была указана во входном параметре currencyId.
hotelIsInStop Наличие мест в отеле, допустимы значения: 0 – есть места, 1 – нет мест, 2 – запрос.
ticketsIncluded Включена ли стоимость билетов в стоимость тура, допустимы значения: 0 – не включена (тур только отель), 1 – включена (пакетный тур).
hasEconomTicketsDpt Наличие билетов эконом класса на место отдыха, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
hasEconomTicketsRtn Наличие обратных билетов эконом класса, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
hasBusinessTicketsDpt Наличие билетов бизнес класса на место отдыха, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
hasBusinessTicketsRtn Наличие обратных билетов бизнес класса, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
tourUrl Ссылка, при переходе по которой можно забронировать тур (ссылка может вести на страницу авторизации, но после авторизации должны автоматически попасть на страницу бронирования тура).
spoUrl Ссылка на описание тура, его программы (если есть).
fewPlacesInHotel Поле заполняется, если есть указание на то, что мест в отеле мало. Если нельзя указать точное количество оставшихся мест, то заполняется значением -1, иначе указывается точное количество оставшихся мест.
fewTicketsDptY Поле заполняется, если есть указание на то, что мест эконом класса туда мало. Если нельзя указать точное количество оставшихся мест, то заполняется значением -1, иначе указывается точное количество оставшихся мест.
fewTicketsRtnY Поле заполняется, если есть указание на то, что мест эконом класса обратно мало. Если нельзя указать точное количество оставшихся мест, то заполняется значением -1, иначе указывается точное количество оставшихся мест.
fewTicketsDptB Поле заполняется, если есть указание на то, что мест бизнес класса туда мало. Если нельзя указать точное количество оставшихся мест, то заполняется значением -1, иначе указывается точное количество оставшихся мест.
fewTicketsRtnB Поле заполняется, если есть указание на то, что мест бизнес класса обратно мало. Если нельзя указать точное количество оставшихся мест, то заполняется значением -1, иначе указывается точное количество оставшихся мест.
flags Набор битовых флагов тура. Тур может иметь несколько установленных флагов одновременно, данное значение является их суммой. Возможные флаги тура:  1 – туроператор рекомендует данный тур;  2 – доступно мгновенное подтверждение;  4 – туроператор считает данный тур лучшим предложением;  8 – тур раннего бронирования;  16 – тур позднего бронирования;  32 – туроператор предоставляет скидку на данный тур;  64 – VIP предложение;  128 – тур доступен в кредит;  256 – тур является эксклюзивным предложением туроператора;  512 – при покупке тура туристу подарок;  1024 – тур является комбинированным (турист посещает несколько курортов);  2048 – тур с обязательством (шоп - тур);  4096 – зарезервировано для использования системой;  8192 – экскурсионный тур;
description Дополнительная информация по туру, например, для комбинированных туров может содержать информацию о проживании в отелях.
receivingParty Принимающая сторона.
earlyBookingValidTill Если тур является туром раннего бронирования и известна последняя дата ранней брони, то в данном поле должна быть указана эта дата.