Подключение туроператоров — различия между версиями
Vm (обсуждение | вклад) (→Поиск туров) |
Vm (обсуждение | вклад) (→Поиск туров) |
||
| Строка 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 , то этот адрес должен быть общим для всех запросов.
Примеры:
- 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
Параметры:
| Параметр; обязательный | Тип данных | Описание |
| 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 | Если тур является туром раннего бронирования и известна последняя дата ранней брони, то в данном поле должна быть указана эта дата. |