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

Материал из wiki.Sletat.ru
Перейти к: навигация, поиск
(Поиск туров)
(SletatRu Provider API)
 
(не показано 19 промежуточных версий 1 участника)
Строка 1: Строка 1:
 
[[Category:Подключение_туроператоров]]
 
[[Category:Подключение_туроператоров]]
==  Описание сервиса  ==
+
==  SletatRu Provider API ==
 
+
Актуальная версия документации доступна по ссылке: https://static.sletat.ru/Files/api/SletatRu_Provider_API.pdf
Для интеграции со Слетать.ру нужно создать веб-сервис, который будет выполнять следующие задачи:
+
* Выгружать справочники: города вылета, страны, курорты, отели и т.д.
+
* Осуществлять параметризованный поиск цен
+
* Актуализировать выбранный тур по его идентификатору
+
 
+
'''Для упрощения, сервис можно представить веб-страничкой, которая принимает GET или POST параметры и выдаёт ответ в формате XML (не SOAP).'''
+
 
+
Для всех методов сервиса должен использоваться один адрес. Например, если вы реализуете сервис по адресу: http://mysite.com/services/sletatru.xml , то этот адрес должен быть общим для всех запросов.
+
 
+
Примеры:
+
* http://mysite.com/services/sletatru.xml?action=GetCountries – запрос списка стран
+
* http://mysite.com/services/sletatru.xml?action=GetDepartCities – запрос списка городов вылета
+
 
+
Выдача результатов должна быть в формате 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
+
 
+
'''Параметры:'''
+
 
+
{| class="wikitable"
+
|Параметр; '''обязательный'''
+
|Тип данных
+
|Описание
+
|-
+
|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'''), каждый из которых описывает тур следующими атрибутами:
+

Текущая версия на 11:08, 4 октября 2018

SletatRu Provider API

Актуальная версия документации доступна по ссылке: https://static.sletat.ru/Files/api/SletatRu_Provider_API.pdf