Мастер-Тур(15):API для отдачи цен в поисковые системы — различия между версиями

Материал из Megatec
Перейти к: навигация, поиск
[досмотренная версия][досмотренная версия]
(Выгрузка списка курортов (GetResorts))
 
(не показано 137 промежуточных версий 9 участников)
Строка 8: Строка 8:
 
==Введение==
 
==Введение==
 
Данный web-сервис разработан для отдачи цен во внешние поисковые системы и выполняет следующие задачи:
 
Данный web-сервис разработан для отдачи цен во внешние поисковые системы и выполняет следующие задачи:
* выгружает справочники (города вылета, страны, курорты, отели и т.д.)
+
* выгружает справочники (города вылета, страны, города, отели и т.д.)
 
* осуществляет поиск цен с указанныеми параметрами
 
* осуществляет поиск цен с указанныеми параметрами
 
* актуализирует выбранный вариант тура по его идентификатору
 
* актуализирует выбранный вариант тура по его идентификатору
Строка 15: Строка 15:
  
 
==Установка==
 
==Установка==
Для работы с web-сервисом необходимо установить [[Мастер-Тур(15):Установка#Установка службы поиска|службу поиска]].<br />
+
Для работы с web-сервисом необходимо на отдающей стороне установить [[Мастер-Тур(15):Установка#Установка службы поиска|службу поиска]].<br />
После установки web-сервис будет доступен по адресу ''<nowiki>http://значение настройки "serviceAddress" в TourSearchOwin/searchApi</nowiki>'' (пример: ''http://localhost:9000/TourSearchOwin/searchApi'')  
+
После установки web-сервис будет доступен по адресу ''<nowiki>http://значение настройки "serviceAddress" в TourSearchOwin/searchApi?action="название метода"</nowiki>'' (пример: ''http://localhost:9000/TourSearchOwin/searchApi?action=GetCountries'')
 +
 
 +
Для поддержки систем с большой нагрузкой можно использовать сторонние "балансировщики нагрузки".
 +
Пример настройки балансировщика [[Мастер-Тур(15):Балансировщик нагрузки HaProxy|HaProxy]].
  
 
==Загрузка справочников==
 
==Загрузка справочников==
Строка 25: Строка 28:
 
** ?action=GetCountries
 
** ?action=GetCountries
 
* Принимаемые параметры:
 
* Принимаемые параметры:
** '''id''' – идентификатор страны (опциональный, передача в запрос нескольких id не обрабатывается. Если указан, то запрашивается только одна запись)
+
** '''id''' – идентификатор страны (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
 
* Возвращаемый результат:
 
* Возвращаемый результат:
 
** '''id''' – идентификатор страны
 
** '''id''' – идентификатор страны
** '''name''' – название страны (рус/анг)
+
** '''name''' – название страны (рус)
 +
** '''lname''' – название страны (анг)
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
Строка 40: Строка 44:
 
<syntaxhighlight lang="java" enclose="div">
 
<syntaxhighlight lang="java" enclose="div">
 
{
 
{
   "version": "1.0",
+
   "version": "1.08",
 
   "countries":    [
 
   "countries":    [
 
             {
 
             {
 
         "id": 97,
 
         "id": 97,
         "name": "Тунис"
+
         "name": "Тунис",
 +
        "lname": "Tunisia"
 
       },             
 
       },             
 
             {
 
             {
 
         "id": 90,
 
         "id": 90,
         "name": "Австрия"
+
         "name": "Австрия",
 +
        "lname": "Австрия"
 
       },
 
       },
 
             {
 
             {
 
         "id": 30,
 
         "id": 30,
         "name": "Франция"
+
         "name": "Франция",
 +
        "lname": "France"
 
       }             
 
       }             
 
   ]
 
   ]
Строка 65: Строка 72:
 
** ?action=GetDepartCities
 
** ?action=GetDepartCities
 
* Принимаемые параметры:
 
* Принимаемые параметры:
** '''id''' – идентификатор города вылета (опциональный, передача в запрос нескольких id не обрабатывается. Если указан, то запрашивается только одна запись)
+
** '''id''' – идентификатор города вылета (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
 
* Возвращаемый результат:
 
* Возвращаемый результат:
 
** '''id''' – идентификатор города
 
** '''id''' – идентификатор города
** '''name''' – название города (рус/анг)
+
** '''name''' – название города (рус)
 +
** '''lname''' – название города (анг)
 
** '''countriesTo''' – идентификаторы стран, которые присутствуют в данном городе вылета
 
** '''countriesTo''' – идентификаторы стран, которые присутствуют в данном городе вылета
 +
** '''countryId''' – идентификатор страны города вылета
 +
** '''countryName''' – название страны города вылета
 +
** '''countryCode''' – код страны города вылета
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
Строка 81: Строка 92:
 
<syntaxhighlight lang="java" enclose="div">
 
<syntaxhighlight lang="java" enclose="div">
 
{
 
{
   "version": "1.0",
+
   "version": "1.08",
 
   "departCities":    [
 
   "departCities":    [
 
             {
 
             {
 
         "id": -1,
 
         "id": -1,
         "name": "Не указан",
+
         "name": "Без перелета",
 +
        "lname": "No flights",
 
         "countriesTo":          [
 
         "countriesTo":          [
 
             97,
 
             97,
 
             90
 
             90
         ]
+
         ],
 +
        "countryId": -1,
 +
        "countryName": "",
 +
        "countryCode": ""
 
       },
 
       },
 
             {
 
             {
 
         "id": 1,
 
         "id": 1,
 
         "name": "Москва",
 
         "name": "Москва",
 +
        "lname": "Moscow",
 
         "countriesTo":          [
 
         "countriesTo":          [
 
             90,
 
             90,
 
             30
 
             30
         ]
+
         ],
 +
        "countryId": 460,
 +
        "countryName": "Россия",
 +
        "countryCode": "RUS"
 
       }
 
       }
 
   ]
 
   ]
Строка 105: Строка 124:
 
</div></div><br />
 
</div></div><br />
  
===Выгрузка списка городов(GetResorts)===
+
===Выгрузка списка городов (GetResorts)===
 
Метод возвращает список всех доступных городов.
 
Метод возвращает список всех доступных городов.
 
* Формат запроса:
 
* Формат запроса:
 
** ?action=GetResorts
 
** ?action=GetResorts
 
* Принимаемые параметры:
 
* Принимаемые параметры:
** '''id''' – идентификатор города (опциональный, передача в запрос нескольких id не обрабатывается. Если указан, то запрашивается только одна запись)
+
** '''id''' – идентификатор города (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
 
* Возвращаемый результат:
 
* Возвращаемый результат:
 
** '''id''' – идентификатор города
 
** '''id''' – идентификатор города
** '''name''' – название города (рус/анг)
+
** '''name''' – название города (рус)
 +
** '''lname''' – название города (анг)
 
** '''countryId''' – идентификатор страны, в котором расположен город
 
** '''countryId''' – идентификатор страны, в котором расположен город
  
Строка 126: Строка 146:
 
<syntaxhighlight lang="java" enclose="div">
 
<syntaxhighlight lang="java" enclose="div">
 
{
 
{
   "version": "1.0",
+
   "version": "1.08",
   "countries":    [
+
   "resorts":    [
 
             {
 
             {
 
         "id": 1,
 
         "id": 1,
 
         "name": "Каринтия",
 
         "name": "Каринтия",
 +
        "lname": "Carinthia",
 
         "countryId": 90
 
         "countryId": 90
 
       },           
 
       },           
Строка 136: Строка 157:
 
         "id": 42,
 
         "id": 42,
 
         "name": "Хаммамед",
 
         "name": "Хаммамед",
 +
        "lname": "Hammamet",
 
         "countryId": 97
 
         "countryId": 97
 
       },
 
       },
Строка 141: Строка 163:
 
         "id": 40,
 
         "id": 40,
 
         "name": "Сусс",
 
         "name": "Сусс",
 +
        "lname": "Sousse",
 
         "countryId": 97
 
         "countryId": 97
 +
      }         
 +
  ]
 +
}
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
 +
 +
===Выгрузка типов тура (GetTourTypes) начиная с релиза 15.4===
 +
Метод возвращает список типов туров по определенному городу отправления, стране и городу прибытия.
 +
* Формат запроса:
 +
** ?action=GetTourTypes
 +
* Принимаемые параметры:
 +
** '''id''' – идентификатор типа тура (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
 +
* Либо
 +
** '''departureCityIds *''' – идентификатор города(ов) отправления (из метода [[#Выгрузка списка городов вылета (GetDepartCities)|GetDepartCities]])
 +
** '''countryId *''' – идентификатор страны прибытия (из метода [[#Выгрузка списка стран (GetCountries)|GetCountries]])
 +
** '''resortIds *''' – идентификатор города(ов) прибытия (из метода [[#Выгрузка списка городов (GetResorts)|GetResorts]]), при значении ''-1'' будут переданы все города в рамках данной страны
 +
* Возвращаемый результат:
 +
** '''id''' – идентификатор типа тура
 +
** '''name''' – название типа тура
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 +
<div class="mw-collapsible-content">
 +
<TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD>
 +
Вызов метода GetTourTypes
 +
<syntaxhighlight lang="java" enclose="div">
 +
http://localhost:9000/TourSearchOwin/searchApi?action=GetTourTypes&departureCityIds=1&countryId=90&resortIds=-1
 +
</syntaxhighlight>
 +
Возвращаемый результат метода GetTourTypes (в формате JSON)
 +
<syntaxhighlight lang="java" enclose="div">
 +
{
 +
  "version": "1.08",
 +
  "TourTypes":    [
 +
            {
 +
        "id": 1,
 +
        "name": "Стандартный тур"
 +
      },         
 +
            {
 +
        "id": 5,
 +
        "name": "Экскурсионный тур",
 +
        "lname": "Hammamet"
 +
      },
 +
            {
 +
        "id": 40,
 +
        "name": "Пляжный отдых"
 +
      }         
 +
  ]
 +
}
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
 +
 +
===Выгрузка актуальных дат заездов (GetDates) начиная с релиза 15.4===
 +
Метод возвращает список доступных дат заездов для поискового запроса
 +
* Формат запроса:
 +
** ?action=GetDates
 +
* Принимаемые параметры:
 +
** '''departureCityIds *''' – идентификатор города(ов) отправления (из метода [[#Выгрузка списка городов вылета (GetDepartCities)|GetDepartCities]])
 +
** '''countryId *''' – идентификатор страны прибытия (из метода [[#Выгрузка списка стран (GetCountries)|GetCountries]])
 +
** '''resortIds *''' – идентификатор города(ов) прибытия (из метода [[#Выгрузка списка городов (GetResorts)|GetResorts]]), при значении ''-1'' будут переданы все города в рамках данной страны
 +
** '''tourTypeIds *''' – идентификатор типа(ов) тура (из метода [[#Выгрузка типов тура (GetTourTypes) начиная с релиза 15.4|GetTourTypes]]), при значении ''-1'' будут переданы все типы тура в рамках данной страны
 +
* Возвращаемый результат:
 +
** массив актуальных дат заезда в формате dd.MM.yyyy
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 +
<div class="mw-collapsible-content">
 +
<TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD>
 +
Вызов метода GetDates
 +
<syntaxhighlight lang="java" enclose="div">
 +
http://localhost:9000/TourSearchOwin/searchApi?action=GetDates&departureCityIds=1&countryId=90&resortIds=-1&tourTypeIds=22
 +
</syntaxhighlight>
 +
Возвращаемый результат метода GetDates (в формате JSON)
 +
<syntaxhighlight lang="java" enclose="div">
 +
{
 +
  "version": "1.08",
 +
  "dates":    [
 +
      "01.08.2019",
 +
      "02.08.2019",
 +
      "03.08.2019",
 +
      "04.08.2019",
 +
      "05.08.2019",
 +
      "06.08.2019",
 +
      "07.08.2019",
 +
      "08.08.2019",
 +
      "09.08.2019",
 +
      "10.08.2019" 
 +
  ]
 +
}
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
 +
 +
===Выгрузка актуальных продолжительностей (GetDurations) начиная с релиза 15.4===
 +
Метод возвращает список доступных продолжительностей для поискового запроса
 +
* Формат запроса:
 +
** ?action=GetDurations
 +
* Принимаемые параметры:
 +
** '''departureCityIds *''' – идентификатор города(ов) отправления (из метода [[#Выгрузка списка городов вылета (GetDepartCities)|GetDepartCities]])
 +
** '''countryId *''' – идентификатор страны прибытия (из метода [[#Выгрузка списка стран (GetCountries)|GetCountries]])
 +
** '''resortIds *''' – идентификатор города(ов) прибытия (из метода [[#Выгрузка списка городов (GetResorts)|GetResorts]]), при значении ''-1'' будут переданы все города в рамках данной страны
 +
** '''tourTypeIds *''' – идентификатор типа(ов) тура (из метода [[#Выгрузка типов тура (GetTourTypes) начиная с релиза 15.4|GetTourTypes]]), при значении ''-1'' будут переданы все типы тура в рамках данной страны
 +
** '''tourDates *''' – массив дат заездов в формате dd.MM.yyyy (из метода [[#Выгрузка актуальных дат заездов (GetDates) начиная с релиза 15.4|GetDates]])
 +
* Возвращаемый результат:
 +
** '''durations''' – массив актуальных продолжительностей (в днях)
 +
** '''durationType''' – тип продолжительности: 0 – в днях тура, 1 – в ночах тура, 2 – в ночах проживания в отеле.
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 +
<div class="mw-collapsible-content">
 +
<TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD>
 +
Вызов метода GetDurations
 +
<syntaxhighlight lang="java" enclose="div">
 +
http://localhost:9000/TourSearchOwin/searchApi?action=GetDurations&departureCityIds=1&countryId=90&resortIds=-1&tourTypeIds=22&tourDates=22.05.2019,28.05.2019
 +
</syntaxhighlight>
 +
Возвращаемый результат метода GetDurations (в формате JSON)
 +
<syntaxhighlight lang="java" enclose="div">
 +
{
 +
  "version": "1.08",
 +
  "durations":    [
 +
      8,
 +
      9,
 +
      10,
 +
      11,
 +
      12,
 +
      13,
 +
      14 
 +
  ],
 +
  "durationType": 0
 +
}
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
 +
===Выгрузка программ туров (GetTourPrograms) начиная с релиза 15.4===
 +
Метод возвращает список актуальных для поиска программ туров
 +
* Формат запроса:
 +
** ?action=GetTourPrograms
 +
* Принимаемые параметры:
 +
** '''id *''' – идентификатор программы тура (обязательный, передача в запрос нескольких id не обрабатывается, в этом случае возвращается ошибка. Если указан, то запрашивается только одна запись)
 +
* Либо
 +
** '''departureCityIds *''' – идентификатор города(ов) отправления (из метода [[#Выгрузка списка городов вылета (GetDepartCities)|GetDepartCities]])
 +
** '''countryId *''' – идентификатор страны прибытия (из метода [[#Выгрузка списка стран (GetCountries)|GetCountries]])
 +
** '''resortIds *''' – идентификатор города(ов) прибытия (из метода [[#Выгрузка списка городов (GetResorts)|GetResorts]]), при значении ''-1'' передается город отправления "Без перелета"
 +
** '''tourTypeIds *''' – идентификатор типа(ов) тура (из метода [[#Выгрузка типов тура (GetTourTypes) начиная с релиза 15.4|GetTourTypes]]), при значении ''-1'' будут переданы все типы тура в рамках данной страны
 +
** '''fromDateTime''' – дата (в формате dd.MM.yyyy HH:mm:ss), начиная с которой будут выгружаться изменения (то есть будут получены только те доступные программы туров, которые изменялись, начиная с указанной даты)
 +
* Возвращаемый результат:
 +
** '''id''' – ключ программы туров
 +
** '''name''' – название программы туров
 +
** '''updateDate''' – дата последнего изменения программы туров (или связанных с ней компонентов)
 +
** '''beginDate''' – дата начала заездов по программе туров (в формате dd.MM.yyyy)
 +
** '''endDate''' – дата окончания заездов по программе туров (в формате dd.MM.yyyy)
 +
** '''tourTypeIds''' – типы туров для данной программы туров
 +
** '''routes''' – массив возможных маршрутов в данной программе туров
 +
*** '''departureCountryKey''' – страна начала поездки (для каждой страны начала поездки в одной программе тура будет отдельный маршрут)
 +
*** '''departureCityKey''' – город начала поездки (для каждого города начала поездки в одной программе тура будет отдельный маршрут)
 +
*** '''destinationCountryKeys''' – страны по туру (если в туре несколько услуг класса отель и они в разных странах, то будут возвращаться все страны отелей)
 +
*** '''destinationCityKeys''' – города по туру (если в туре отели в нескольких городах, то будут возвращаться все города отелей)
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 +
<div class="mw-collapsible-content">
 +
<TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD>
 +
Вызов метода GetTourPrograms
 +
<syntaxhighlight lang="java" enclose="div">
 +
http://localhost:9000/TourSearchOwin/searchApi?action=GetTourPrograms&departureCityIds=1&countryId=90&resortIds=-1&tourTypeIds=22&fromDateTime=22.05.2019 12:00:00
 +
</syntaxhighlight>
 +
Возвращаемый результат метода GetTourPrograms (в формате JSON)
 +
<syntaxhighlight lang="java" enclose="div">
 +
{
 +
"version": "1.08",
 +
"TourPrograms": [{
 +
"id": 100004493,
 +
"name": "Автобусный тур",
 +
"updateDate": "2019-05-20T17:17:02.087",
 +
"beginDate": "01.06.2019",
 +
"endDate": "01.08.2019",
 +
"tourTypeIds": [2,
 +
22],
 +
"routes": [{
 +
"departureCountryId": 460,
 +
"departureCityId": 1,
 +
"destinationCountryIds": [90],
 +
"destinationCityIds": [35]
 +
}]
 +
},
 +
{
 +
"id": 100005542,
 +
"name": "Общая проверка системы",
 +
"updateDate": "2019-05-15T15:54:10.81",
 +
"beginDate": "01.03.2018",
 +
"endDate": "15.08.2019",
 +
"tourTypeIds": [22],
 +
"routes": [{
 +
"departureCountryId": 460,
 +
"departureCityId": 1,
 +
"destinationCountryIds": [90],
 +
"destinationCityIds": [35,
 +
440,
 +
562]
 +
}]
 +
}]
 +
}
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
 +
===Выгрузка списка курортов (GetAreas) начиная с релиза 15.3===
 +
Метод возвращает список всех доступных курортов.
 +
* Формат запроса:
 +
** ?action=GetAreas
 +
* Принимаемые параметры:
 +
** '''id''' – идентификатор курорта (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
 +
* Возвращаемый результат:
 +
** '''id''' – идентификатор курорта
 +
** '''name''' – название курорта (рус)
 +
** '''lname''' – название курорта (анг)
 +
** '''countryId''' – идентификатор страны, в котором расположен курорт
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 +
<div class="mw-collapsible-content">
 +
<TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD>
 +
Вызов метода GetAreas
 +
<syntaxhighlight lang="java" enclose="div">
 +
http://localhost:9000/TourSearchOwin/searchApi?action=GetAreas
 +
</syntaxhighlight>
 +
Возвращаемый результат метода GetAreas (в формате JSON)
 +
<syntaxhighlight lang="java" enclose="div">
 +
{
 +
  "version": "1.08",
 +
  "areas":    [
 +
            {
 +
        "id": 232,
 +
        "name": "Малина",
 +
        "lname": "Малина",
 +
        "countryId": 90
 +
      },         
 +
            {
 +
        "id": 233,
 +
        "name": "Облако",
 +
        "lname": "Облако",
 +
        "countryId": 90
 +
      },
 +
            {
 +
        "id": 1,
 +
        "name": "Каринтия",
 +
        "lname": "en_Каринтия",
 +
        "countryId": 90
 +
    },
 +
            {
 +
        "id": -1,
 +
        "name": "Без курорта",
 +
        "lname": "",
 +
        "countryId": -1
 
       }           
 
       }           
 
   ]
 
   ]
Строка 154: Строка 431:
 
** ?action=GetHotelCategories
 
** ?action=GetHotelCategories
 
* Принимаемые параметры:
 
* Принимаемые параметры:
** '''id''' – идентификатор категории отеля (опциональный, передача в запрос нескольких id не обрабатывается. Если указан, то запрашивается только одна запись)
+
** '''id''' – идентификатор категории отеля (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
 
* Возвращаемый результат:
 
* Возвращаемый результат:
 
** '''id''' – идентификатор категории отеля
 
** '''id''' – идентификатор категории отеля
 
** '''name''' – название категории отеля
 
** '''name''' – название категории отеля
 +
** '''globalCode''' – глобальный код категории отеля
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
Строка 169: Строка 447:
 
<syntaxhighlight lang="java" enclose="div">
 
<syntaxhighlight lang="java" enclose="div">
 
{
 
{
   "version": "1.0",
+
   "version": "1.08",
 
   "hotelCategories":    [
 
   "hotelCategories":    [
 
             {
 
             {
 
         "id": 59,
 
         "id": 59,
 
         "name": "5*"
 
         "name": "5*"
 +
        "globalCode": "5*"
 
       },
 
       },
 
             {
 
             {
 
         "id": 58,
 
         "id": 58,
 
         "name": "4*"
 
         "name": "4*"
 +
        "globalCode": null
 
       },
 
       },
 
             {
 
             {
 
         "id": 57,
 
         "id": 57,
 
         "name": "3*"
 
         "name": "3*"
 +
        "globalCode": null
 
       }
 
       }
 
   ]
 
   ]
Строка 194: Строка 475:
 
** ?action=GetHotels
 
** ?action=GetHotels
 
* Принимаемые параметры:
 
* Принимаемые параметры:
** '''id''' – идентификатор отеля (опциональный, передача в запрос нескольких id не обрабатывается. Если указан, то запрашивается только одна запись)
+
** '''id''' – идентификатор отеля (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
 
* Возвращаемый результат:
 
* Возвращаемый результат:
 
** '''id''' – идентификатор отеля
 
** '''id''' – идентификатор отеля
 
** '''name''' – название отеля
 
** '''name''' – название отеля
 
** '''hotelCategoryId''' – идентификатор категории отеля
 
** '''hotelCategoryId''' – идентификатор категории отеля
** '''resortId''' – идентификатор курорта, в котором расположен отель
+
** '''hotelCategoryName''' – название категории отеля
 +
** '''resortId''' – идентификатор города, в котором расположен отель
 +
** '''resortName''' – название города, в котором расположен отель
 +
** '''areaId''' – идентификатор курорта, в котором расположен отель
 +
** '''areaName''' – название курорта, в котором расположен отель
 +
** '''address''' – адрес отеля
 +
** '''phone''' – телефон отеля
 +
** '''email''' – e-mail отеля
 +
** '''fax''' – факс отеля
 +
** '''http''' – адрес в интернете отеля
 +
** '''latitude''' – GPS координаты: географическая широта (обрабатывается с релиза 15.6)
 +
** '''longitude''' – GPS координаты: географическая долгота (обрабатывается с релиза 15.6)
 +
** '''timeFrom''' – заезд в отель (обрабатывается с релиза 15.7)
 +
** '''timeTo''' – выезд из отеля (обрабатывается с релиза 15.7)
 +
** '''countryId''' – идентификатор страны, в которой расположен отель (обрабатывается с релиза 15.9)
 +
** '''countryName''' – название страны, в которой расположен отель (обрабатывается с релиза 15.9)
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
Строка 211: Строка 507:
 
<syntaxhighlight lang="java" enclose="div">
 
<syntaxhighlight lang="java" enclose="div">
 
{
 
{
   "version": "1.0",
+
   "version": "1.08",
 
   "hotels":    [
 
   "hotels":    [
 
             {
 
             {
         "id": 672,
+
         "id": 112830,
         "name": "'Opal",
+
            "name": "0012",
         "hotelCategoryId": 59,
+
            "hotelCategoryId": 964,
         "resortId": 0
+
            "hotelCategoryName": "!!",
 +
            "resortId": 1464,
 +
            "resortName": "Адлер",
 +
            "areaId": 1187,
 +
            "areaName": "Amur Oblast",
 +
            "address": "",
 +
            "phone": "",
 +
            "email": "",
 +
            "fax": "",
 +
            "http": null,
 +
            "latitude": "",
 +
            "longitude": "",
 +
            "timeFrom": "",
 +
            "timeTo": "",
 +
            "countryId": 460,
 +
            "countryName": "Россия"
 +
      },
 +
            {
 +
         "id": 111884,
 +
            "name": "111",
 +
            "hotelCategoryId": 964,
 +
            "hotelCategoryName": "!!",
 +
            "resortId": 35,
 +
            "resortName": "Вена",
 +
            "areaId": -1,
 +
            "areaName": "Без курорта",
 +
            "address": "",
 +
            "phone": null,
 +
            "email": "",
 +
            "fax": null,
 +
            "http": null,
 +
            "latitude": null,
 +
            "longitude": null,
 +
            "timeFrom": "",
 +
            "timeTo": "",
 +
            "countryId": 90,
 +
            "countryName": "Австрия"
 +
      },
 +
            {
 +
         "id": 112827,
 +
            "name": "11111",
 +
            "hotelCategoryId": 964,
 +
            "hotelCategoryName": "!!",
 +
            "resortId": 1313,
 +
            "resortName": "Kazan",
 +
            "areaId": -1,
 +
            "areaName": "Без курорта",
 +
            "address": "",
 +
            "phone": "",
 +
            "email": "",
 +
            "fax": "",
 +
            "http": null,
 +
            "latitude": "",
 +
            "longitude": "",
 +
            "timeFrom": "",
 +
            "timeTo": "",
 +
            "countryId": 6259,
 +
            "countryName": "Russia"
 +
      },
 +
            {
 +
         "id": 12303,
 +
            "name": "4 Barcelona",
 +
            "hotelCategoryId": 964,
 +
            "hotelCategoryName": "!!",
 +
            "resortId": 19,
 +
            "resortName": "Барселона",
 +
            "areaId": -1,
 +
            "areaName": "Без курорта",
 +
            "address": null,
 +
            "phone": null,
 +
            "email": null,
 +
            "fax": null,
 +
            "http": null,
 +
            "latitude": null,
 +
            "longitude": null,
 +
            "timeFrom": "",
 +
            "timeTo": "",
 +
            "countryId": 84,
 +
            "countryName": "Испания"
 +
      }           
 +
  ]
 +
}
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
 
 +
===Выгрузка описания и изображений отеля (GetHotelInfo) начиная с релиза 15.5===
 +
Метод возвращает описания и изображения запрашиваемого отеля.
 +
* Формат запроса:
 +
** ?action=GetHotelInfo
 +
* Принимаемые параметры:
 +
** '''hotelKey *''' – идентификатор отеля
 +
** '''needImages''' – возвращать ли изображения отеля в ответе: 0 – не возвращать, 1 – возвращать.
 +
** '''imageSize''' – варианты размера возвращаемых изображений. Обрабатывается только если передан параметр '''needImages''' = 1 и в этом случае является обязательным параметром. Возможные значения: 0 – small, 1 – medium, 2 – big.
 +
 
 +
* Возвращаемый результат:
 +
** '''Images''' – массив изображений отеля
 +
*** '''Key''' – ключ изображения
 +
*** '''Description''' – описание изображения отеля
 +
*** '''Priority''' – приоритет изображения
 +
*** '''Image''' – изображение в byte array
 +
** '''Country''' – страна отеля
 +
** '''City''' – город отеля
 +
** '''Name''' – название отеля
 +
** '''HotelCategoryName''' – название категории отеля
 +
** '''Address''' – адрес отеля
 +
** '''Phone''' – телефон отеля
 +
** '''Email''' – e-mail отеля
 +
** '''Http''' – адрес в интернете отеля
 +
** '''Description''' – описание
 +
** '''InfrastructureHotel''' – инфраструктура отеля
 +
** '''RecreationSport''' – развлечение и спорт
 +
** '''Beach''' – пляж
 +
** '''Healing''' – лечение
 +
** '''Excursion''' – экскурсии
 +
** '''AdditionalService''' – дополнительные услуги
 +
** '''ForChildren''' – для детей
 +
** '''AddCost''' – доплаты
 +
** '''checkInTime''' – время заезда в отель (обрабатывается с релиза 15.6)
 +
** '''checkOutTime''' – время выезда из отеля (обрабатывается с релиза 15.6)
 +
** '''latitude''' – GPS координаты: географическая широта (обрабатывается с релиза 15.6)
 +
** '''longitude''' – GPS координаты: географическая долгота (обрабатывается с релиза 15.6)
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 +
<div class="mw-collapsible-content">
 +
<TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD>
 +
Вызов метода GetHotelInfo
 +
<syntaxhighlight lang="java" enclose="div">
 +
http://localhost:9000/TourSearchOwin/searchApi?action=GetHotelInfo&hotelKey=8659&needImages=1&imageSize=2
 +
</syntaxhighlight>
 +
Возвращаемый результат метода GetHotelInfo (в формате JSON)
 +
<syntaxhighlight lang="java" enclose="div">
 +
{
 +
  "version": "1.08",
 +
  "hotelInfoAndPhoto":    {
 +
      "Images":      [
 +
                  {
 +
            "Key": 2618,
 +
            "Description": "Общий вид отеля",
 +
            "Priority": 1,
 +
            "Image": "iVBORw0KGgoAAAANSUhEUgAAARUAAAC0CAYAAAC62bgdSR0IArs4c6QAAAARnQU1BAA....."
 +
        },
 +
                  {
 +
            "Key": 2786,
 +
            "Description": "Вид на бассейн",
 +
            "Priority": 2,
 +
            "Image": "/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw.....="
 +
        }
 +
      ],
 +
      "Country": "Австрия",
 +
      "City": "Вена",
 +
      "Name": "ContinentalSun",
 +
      "HotelCategoryName": "HV",
 +
      "Address": "Ул. Пушкина, 100, Вена, Австрия",
 +
      "Phone": "+79991234567",
 +
      "Email": "sun@sun.com",
 +
      "Http": "www.sun.ru",
 +
      "Description": "<p>Описание<\/p>",
 +
      "InfrastructureHotel": "<p>Инфраструктура отеля<\/p>",
 +
      "RecreationSport": "<p>Развлечение и спорт<\/p>",
 +
      "Beach": "<p>Пляж<\/p>",
 +
      "Healing": "<p>Лечение<\/p>",
 +
      "Excursion": "<p>Экскурсии<\/p>",
 +
      "AdditionalService": "<p>Дополнительные услуги<\/p>",
 +
      "ForChildren": "<p>Для детей<\/p>",
 +
      "AddCost": "<p>Доплата<\/p>",
 +
      "checkInTime": null,
 +
      "checkOutTime": null,
 +
      "latitude": null,
 +
      "longitude": null
 +
  }
 +
}</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
 
 +
===Выгрузка списка типов номеров (GetRooms) начиная с релиза 15.3===
 +
Метод возвращает список всех доступных типов номеров, на которые есть актуальные цены.
 +
* Формат запроса:
 +
** ?action=GetRooms
 +
* Принимаемые параметры:
 +
** '''id''' – идентификатор типа номера (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
 +
* Возвращаемый результат:
 +
** '''id''' – идентификатор типа номера
 +
** '''code''' – код типа номера
 +
** '''name''' – название типа номера
 +
** '''mainplaces''' – количество основных мест
 +
** '''extraplaces''' – количество дополнительных мест
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 +
<div class="mw-collapsible-content">
 +
<TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD>
 +
Вызов метода GetRooms
 +
<syntaxhighlight lang="java" enclose="div">
 +
http://localhost:9000/TourSearchOwin/searchApi?action=GetRooms
 +
</syntaxhighlight>
 +
Возвращаемый результат метода GetRooms (в формате JSON)
 +
<syntaxhighlight lang="java" enclose="div">
 +
{
 +
  "version": "1.08",
 +
  "rooms":    [
 +
            {
 +
        "id": 129,
 +
        "code": "DBL",
 +
        "name": "DBL",
 +
        "mainplaces": 2,
 +
        "extraplaces": 1
 +
      },
 +
            {
 +
        "id": 175,
 +
        "code": "DBL+CHD",
 +
        "name": "DBL+CHD",
 +
        "mainplaces": null,
 +
        "extraplaces": null
 
       },
 
       },
 
             {
 
             {
         "id": 106,
+
         "id": 132,
         "name": "OPERA LAFAYETTE",
+
        "code": "DBL+EXB",
         "hotelCategoryId": 23,
+
         "name": "DBL+EXB",
         "resortId": 42
+
         "mainplaces": 2,
 +
         "extraplaces": 4
 
       },
 
       },
 
             {
 
             {
         "id": 683,
+
         "id": 2,
         "name": "Altstadt Vienna",
+
        "code": "Double1",
         "hotelCategoryId": 23,
+
         "name": "Double2",
         "resortId": 0
+
         "mainplaces": 2,
 +
         "extraplaces": 3
 
       },
 
       },
 
             {
 
             {
         "id": 702,
+
         "id": 133,
         "name": "Albatros",
+
        "code": "SNGL",
         "hotelCategoryId": 57,
+
         "name": "SNGL",
         "resortId": 0
+
         "mainplaces": null,
 +
         "extraplaces": null
 
       },
 
       },
 
             {
 
             {
         "id": 709,
+
         "id": 54,
         "name": "Am Brilliantengrund",
+
        "code": "SNGL+2 Child ",
         "hotelCategoryId": 23,
+
         "name": "Sngl+2 Child",
         "resortId": 40
+
         "mainplaces": 1,
 +
         "extraplaces": 0
 
       },
 
       },
 
             {
 
             {
         "id": 2362,
+
         "id": 173,
         "name": "Gastehaus Franz Riml",
+
        "code": "TPL",
         "hotelCategoryId": 58,
+
        "name": "TPL",
         "resortId": 0
+
        "mainplaces": null,
       }          
+
        "extraplaces": null
 +
      }     
 +
  ]
 +
}
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
 
 +
===Выгрузка списка типов номеров (GetRoomTypes) начиная с релиза 15.3===
 +
Метод возвращает список всех доступных категорий номеров, на которые есть актуальные цены.
 +
* Формат запроса:
 +
** ?action=GetRoomTypes
 +
* Принимаемые параметры:
 +
** '''id''' – идентификатор категории номера (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
 +
* Возвращаемый результат:
 +
** '''id''' – идентификатор категории номера
 +
** '''code''' – код категории номера
 +
** '''name''' – название категории номера
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 +
<div class="mw-collapsible-content">
 +
<TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD>
 +
Вызов метода GetRoomTypes
 +
<syntaxhighlight lang="java" enclose="div">
 +
http://localhost:9000/TourSearchOwin/searchApi?action=GetRoomTypes
 +
</syntaxhighlight>
 +
Возвращаемый результат метода GetRoomTypes (в формате JSON)
 +
<syntaxhighlight lang="java" enclose="div">
 +
{
 +
  "version": "1.08",
 +
  "roomTypes":    [
 +
            {
 +
        "id": 4129,
 +
        "code": "Cottage Premier Deluxe",
 +
        "name": "Cottage Premier Deluxe"
 +
      },
 +
            {
 +
        "id": 39,
 +
        "code": "Deluxe",
 +
        "name": "Deluxe"
 +
      },
 +
            {
 +
        "id": 2711,
 +
        "code": "Luxe",
 +
         "name": "Luxe"
 +
      },
 +
            {
 +
        "id": 4470,
 +
         "code": "Standard Room",
 +
         "name": "Standard Room"
 +
      }
 +
  ]
 +
}
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
 
 +
===Выгрузка списка типов размещения (GetHtPlaces) начиная с релиза 15.3===
 +
Метод возвращает список всех доступных типов размещений, на которые есть актуальные цены.
 +
* Формат запроса:
 +
** ?action=GetHtPlaces
 +
* Принимаемые параметры:
 +
** '''id''' – идентификатор типа размещения (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
 +
* Возвращаемый результат:
 +
** '''id''' – идентификатор типа размещения
 +
** '''code''' – код типа размещения
 +
** '''name''' – название типа размещения
 +
** '''adultmainplaces''' – количество основных мест для взрослых
 +
** '''adultextraplaces''' – количество дополнительных мест для взрослых
 +
** '''childtmainplaces''' – количество основных мест для детей
 +
** '''childextraplaces''' – количество дополнительных мест для детей
 +
** '''mainplaces''' – общее количество основных мест для взрослых и детей
 +
** '''extraplaces''' – общее количество дополнительных мест для взрослых и детей
 +
** '''childAges''' – коллекция возможных возрастов детей в размещении (указывается полный возраст, то есть 12 - это 12,99)
 +
*** '''from''' – нижняя граница возраста первого ребенка
 +
*** '''to''' – верхняя граница возраста первого ребенка
 +
*** '''from''' – нижняя граница возраста второго ребенка
 +
*** '''to''' – верхняя граница возраста второго ребенка
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 +
<div class="mw-collapsible-content">
 +
<TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD>
 +
Вызов метода GetHtPlaces
 +
<syntaxhighlight lang="java" enclose="div">
 +
http://localhost:9000/TourSearchOwin/searchApi?action=GetHtPlaces
 +
</syntaxhighlight>
 +
Возвращаемый результат метода GetHtPlaces (в формате JSON)
 +
<syntaxhighlight lang="java" enclose="div">
 +
{
 +
  "version": "1.08",
 +
  "hotelPlaces":    [
 +
            {
 +
        "id": 1239,
 +
        "code": "1 ADL",
 +
        "name": "1 ADL",
 +
        "adultmainplaces": 1,
 +
        "adultextraplaces": 0,
 +
        "childtmainplaces": 0,
 +
        "childextraplaces": 0,
 +
        "mainplaces": 1,
 +
        "extraplaces": 0,
 +
        "childAges":          [
 +
                        {
 +
              "from": null,
 +
              "to": null
 +
            },
 +
                        {
 +
              "from": null,
 +
              "to": null
 +
            }
 +
        ]
 +
      },
 +
            {
 +
        "id": 1372,
 +
        "code": "2 ad + child (0-0.99)",
 +
        "name": "2 ad + child (0-0.99)",
 +
        "adultmainplaces": 2,
 +
        "adultextraplaces": 0,
 +
        "childtmainplaces": 0,
 +
        "childextraplaces": 1,
 +
        "mainplaces": 2,
 +
        "extraplaces": 1,
 +
        "childAges":          [
 +
                        {
 +
              "from": 0,
 +
              "to": 1
 +
            },
 +
                        {
 +
              "from": null,
 +
              "to": null
 +
            }
 +
        ]
 +
      },
 +
            {
 +
        "id": 1157,
 +
        "code": "2 ad + child (2-4.99)",
 +
        "name": "2 ad + child (2-4.99)",
 +
        "adultmainplaces": 2,
 +
        "adultextraplaces": 0,
 +
        "childtmainplaces": 0,
 +
        "childextraplaces": 1,
 +
        "mainplaces": 2,
 +
        "extraplaces": 1,
 +
        "childAges":          [
 +
                        {
 +
              "from": 2,
 +
              "to": 4
 +
            },
 +
                        {
 +
              "from": null,
 +
              "to": null
 +
            }
 +
        ]
 +
      },
 +
            {
 +
        "id": 1238,
 +
        "code": "2 ADL",
 +
        "name": "2 ADL",
 +
        "adultmainplaces": 2,
 +
        "adultextraplaces": 0,
 +
        "childtmainplaces": 0,
 +
        "childextraplaces": 0,
 +
        "mainplaces": 2,
 +
        "extraplaces": 0,
 +
        "childAges":          [
 +
                        {
 +
              "from": null,
 +
              "to": null
 +
            },
 +
                        {
 +
              "from": null,
 +
              "to": null
 +
            }
 +
        ]
 +
       }
 
   ]
 
   ]
 
}
 
}
Строка 260: Строка 946:
 
** ?action=GetMeals
 
** ?action=GetMeals
 
* Принимаемые параметры:
 
* Принимаемые параметры:
** '''id''' – идентификатор вида питания (опциональный, передача в запрос нескольких id не обрабатывается. Если указан, то запрашивается только одна запись)
+
** '''id''' – идентификатор типа питания (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
 
* Возвращаемый результат:
 
* Возвращаемый результат:
** '''id''' – идентификатор вида питания
+
** '''id''' – идентификатор типа питания
** '''name''' – название вида питания
+
** '''name''' – название типа питания
 +
** '''code''' – код типа питания
 +
** '''globalCode''' – глобальный код типа питания
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
Строка 275: Строка 963:
 
<syntaxhighlight lang="java" enclose="div">
 
<syntaxhighlight lang="java" enclose="div">
 
{
 
{
   "version": "1.0",
+
   "version": "1.08",
 
   "meals":    [
 
   "meals":    [
 
             {
 
             {
 
         "id": 1,
 
         "id": 1,
 
         "name": "Пансион"
 
         "name": "Пансион"
 +
        "code": "HB",
 +
        "globalCode": "HB"
 
       },
 
       },
 
             {
 
             {
 
         "id": 2,
 
         "id": 2,
 
         "name": "Полупансион"
 
         "name": "Полупансион"
 +
        "code": "FB",
 +
        "globalCode": null
 
       },
 
       },
 
             {
 
             {
 
         "id": 4,
 
         "id": 4,
 
         "name": "Завтрак буфет"
 
         "name": "Завтрак буфет"
 +
        "code": "BB",
 +
        "globalCode": null
 
       },
 
       },
 
             {
 
             {
 
         "id": 11,
 
         "id": 11,
 
         "name": "Шведский стол"
 
         "name": "Шведский стол"
 +
        "code": "UAI",
 +
        "globalCode": "AI"
 
       }
 
       }
 
   ]
 
   ]
Строка 304: Строка 1000:
 
** ?action=GetCurrencies
 
** ?action=GetCurrencies
 
* Принимаемые параметры:
 
* Принимаемые параметры:
** '''id''' – идентификатор валюты (опциональный, передача в запрос нескольких id не обрабатывается. Если указан, то запрашивается только одна запись)
+
** '''id''' – идентификатор валюты (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
 
* Возвращаемый результат:
 
* Возвращаемый результат:
 
** '''id''' – идентификатор валюты
 
** '''id''' – идентификатор валюты
Строка 319: Строка 1015:
 
<syntaxhighlight lang="java" enclose="div">
 
<syntaxhighlight lang="java" enclose="div">
 
{
 
{
   "version": "1.0",
+
   "version": "1.08",
 
   "currencies":    [
 
   "currencies":    [
 
             {
 
             {
Строка 339: Строка 1035:
 
   ]
 
   ]
 
}
 
}
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
 +
 +
===Выгрузка курсов валют (GetCurrencyRates)===
 +
Метод возвращает список курсов валют, актуальных на дату запроса. Курсы отображаются только для тех валют, которые отмечены в справочнике признаком ''Отображать в онлайне''
 +
* Формат запроса:
 +
** ?action=GetCurrencyRates
 +
* Принимаемые параметры:
 +
** '''dateFrom''' – начальная дата, от которой вывести список курсов валют, в формате DD.MM.YYYY, не обязательный параметр
 +
** '''dateTo''' – конечная дата, до которой вывести список курсов валют, в формате DD.MM.YYYY, не обязательный параметр
 +
* Возвращаемый результат:
 +
** '''baseCurrencyId''' – идентификатор национальной валюты, либо произвольной валюты, указанной в настройке ''basketCurrency'' в конфигурационном файле (обрабатывается с релиза 15.6)
 +
** '''currencyId''' – идентификатор валюты, курс которой приводится
 +
** '''rate''' – курс валюты (отношение '''currencyId''' к '''baseCurrencyId''')
 +
** '''date''' – дата, на которую был зарегистрирован выводимый курс валюты
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 +
<div class="mw-collapsible-content">
 +
<TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD>
 +
Вызов метода GetCurrencyRates
 +
<syntaxhighlight lang="java" enclose="div">
 +
http://localhost:9000/TourSearchOwin/searchApi?action=GetCurrencyRates&dateFrom=18.09.2024&dateTo=19.09.2024
 +
</syntaxhighlight>
 +
Возвращаемый результат метода GetCurrencyRates (в формате JSON)
 +
<syntaxhighlight lang="java" enclose="div">
 +
{
 +
    "version": "1.08",
 +
    "currencyRates": [
 +
        {
 +
            "BaseCurrencyId": 14,
 +
            "CurrencyId": 1,
 +
            "Rate": 91.429200,
 +
            "Date": "18.09.2024"
 +
        },
 +
        {
 +
            "BaseCurrencyId": 14,
 +
            "CurrencyId": 2,
 +
            "Rate": 101.505700,
 +
            "Date": "18.09.2024"
 +
        },
 +
        {
 +
            "BaseCurrencyId": 14,
 +
            "CurrencyId": 1,
 +
            "Rate": 91.671200,
 +
            "Date": "19.09.2024"
 +
        },
 +
        {
 +
            "BaseCurrencyId": 14,
 +
            "CurrencyId": 2,
 +
            "Rate": 102.039000,
 +
            "Date": "19.09.2024"
 +
        }
 +
    ]
 +
}
 +
 
</syntaxhighlight>
 
</syntaxhighlight>
 
</TD></TR></TABLE>
 
</TD></TR></TABLE>
Строка 344: Строка 1097:
  
 
==Поиск туров (GetTours)==
 
==Поиск туров (GetTours)==
Метод поиска туров использует множество параметров для поиска и фильтрации туров. Метод возвращает наиболее дешевые предложения, найденные по предоставленным параметрам. Количество туров в выдаче регулируется параметром '''count'''.
+
Метод поиска туров использует множество параметров для поиска и фильтрации туров. Метод возвращает наиболее дешевые предложения, найденные по предоставленным параметрам и сгруппированные по отелям (без учета группировки по турам) в порядке возрастания цены. Количество туров в выдаче регулируется параметром '''count'''.
 
* Формат запроса:
 
* Формат запроса:
 
** ?action=GetTours&count=int&countryId=int&departCityId=int&dateFrom=date&dateTo=date&adults=int&kids=int&nightsMin=int&nightsMax=int&currencyId=int
 
** ?action=GetTours&count=int&countryId=int&departCityId=int&dateFrom=date&dateTo=date&adults=int&kids=int&nightsMin=int&nightsMax=int&currencyId=int
Строка 357: Строка 1110:
 
** '''adults *''' – количество взрослых.
 
** '''adults *''' – количество взрослых.
 
** '''kids *''' – количество детей.
 
** '''kids *''' – количество детей.
** '''kidsAges''' – количество полных лет каждому ребёнку, передается в виде строки, перечисление через запятую (пример: 3,6).
+
** '''kidsAges''' – количество полных лет каждому ребенку, передается в виде строки, перечисление через запятую (пример: 3,6).
** '''nightsMin *''' – минимальное количество ночей в туре.
+
** '''nightsMin *''' – минимальное количество дней в туре (всегда запрашиваются дни тура, независимо он настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
** '''nightsMax *''' – максимальное количество ночей в туре.
+
** '''nightsMax *''' – максимальное количество дней в туре (всегда запрашиваются дни тура, независимо он настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
** '''resorts''' – идентификаторы курортов, перечисление через запятую.
+
** '''resorts''' – идентификаторы городов, перечисление через запятую.
 +
** '''areas''' – идентификаторы курортов, перечисление через запятую.
 +
** '''tourTypeIds''' – идентификаторы типов тура, перечисление через запятую (начиная с релиза 15.4).
 +
** '''tourProgramIds''' – идентификаторы программ туров, перечисление через запятую (начиная с релиза 15.4).
 
** '''hotelCategories''' – идентификаторы категорий отелей, перечисление через запятую.  
 
** '''hotelCategories''' – идентификаторы категорий отелей, перечисление через запятую.  
 
** '''hotels''' – идентификаторы отелей, перечисление через запятую.
 
** '''hotels''' – идентификаторы отелей, перечисление через запятую.
Строка 370: Строка 1126:
 
** '''ticketsIncluded *''' – при значении 1 в результатах должны быть только туры с включенной стоимостью перелета («только отель» недопустимы). При значении 0 в результат должны попадать как туры без перелета, так и туры с перелетом.
 
** '''ticketsIncluded *''' – при значении 1 в результатах должны быть только туры с включенной стоимостью перелета («только отель» недопустимы). При значении 0 в результат должны попадать как туры без перелета, так и туры с перелетом.
 
** '''hasTickets''' – при значении 1 в результатах должны быть туры только с реальным наличием билетов в перелете (не должно быть туров со стопом на перелете, перелеты со статусом «под запрос» недопустимы). При значении 0 в результат должны попадать как туры без билетов на рейс, так и туры с наличием билетов и с билетами по запросу.
 
** '''hasTickets''' – при значении 1 в результатах должны быть туры только с реальным наличием билетов в перелете (не должно быть туров со стопом на перелете, перелеты со статусом «под запрос» недопустимы). При значении 0 в результат должны попадать как туры без билетов на рейс, так и туры с наличием билетов и с билетами по запросу.
 +
** '''hasQuotas''' – при значении 1 в результатах должны быть туры только с реальным наличием мест во всех квотируемых услугах (не должно быть туров с услугами со стопом или со статусом «под запрос»). При значении 0 в результат должны попадать как туры с услугами на стопе, так и туры с наличием мест по квотам и с местами по запросу.
 
** '''excludeUsualTours''' – при значении 1 из результатов должны быть исключены туры, являющиеся обычными турами (не являющиеся многоотельными). При значении 0 или отсутствии данного параметра такие туры должны быть включены в результат.
 
** '''excludeUsualTours''' – при значении 1 из результатов должны быть исключены туры, являющиеся обычными турами (не являющиеся многоотельными). При значении 0 или отсутствии данного параметра такие туры должны быть включены в результат.
 
** '''excludeCombined''' – при значении 1 из результатов должны быть исключены туры, являющиеся многоотельными. При значении 0 или отсутствии данного параметра такие туры должны быть включены в результат.
 
** '''excludeCombined''' – при значении 1 из результатов должны быть исключены туры, являющиеся многоотельными. При значении 0 или отсутствии данного параметра такие туры должны быть включены в результат.
 +
** '''showToursWithoutHotels''' – при значении 1 в результатах поиска вместе с обычными турами должны подбираться туры без проживания (без услуги отель в составе тура). При значении 0 или отсутствии данного параметра такие туры должны быть исключены из результата поиска. ''Параметр обрабатывается, начиная с релиза 15.2''.
 +
** '''hasGDSFlight''' – подбирать туры с GDS перелетами. ''Параметр обрабатывается, начиная с релиза 15.5''.
 +
*** '''0''' – подбирать любые туры, вне зависимости от того, есть в них GDS перелеты или нет (значение по умолчанию)
 +
*** '''1''' – подбирать туры только с локальными перелетами
 +
*** '''2''' – подбирать туры только с обязательными GDS перелетами
 +
*** '''3''' – подбирать туры только с необязательными GDS перелетами
 +
*** '''4''' – подбирать туры, в которых в одном направлении присутствует обязательный GDS перелет, а в другом направлении есть обязательный и необязательный GDS перелет (на двух вкладках в программе туров)
 +
** '''hasGDSHotel''' – подбирать туры с GDS отелями. ''Параметр обрабатывается, начиная с релиза 15.5''.
 +
*** '''0''' – подбирать любые туры, вне зависимости от того, есть в них GDS отели или нет (значение по умолчанию)
 +
*** '''1''' – подбирать туры только с локальными отелями
 +
*** '''2''' – подбирать туры только с GDS отелями
  
* Возвращаемый результат ( '''*''' – обязательный):
+
* Возвращаемый результат:
** '''offerId *''' – уникальный идентификатор предложения, по которому в дальнейшем можно провести актуализацию тура.
+
** '''offerId''' – уникальный идентификатор предложения, по которому в дальнейшем можно провести актуализацию тура.
** '''tourName *''' – название программы тура.
+
** '''tourId''' – идентификатор программы тура.
** '''hotelId *''' – идентификатор отеля.
+
** '''tourName''' – название программы тура.
 +
** '''countryId''' – идентификатор страны.
 +
** '''countryName''' – название страны.
 +
** '''resortId''' – идентификатор города, в котором расположен отель.
 +
** '''resortName''' – название города, в котором расположен отель.
 +
** '''areaId''' – идентификатор курорта, в котором расположен отель.
 +
** '''areaName''' – название курорта, в котором расположен отель.
 +
** '''hotelId''' – идентификатор отеля.
 +
** '''hotelName''' – название отеля.
 
** '''hotelUrl''' – ссылка на страницу с описанием отеля.
 
** '''hotelUrl''' – ссылка на страницу с описанием отеля.
** '''resortId *''' – идентификатор курорта, в котором расположен отель.
+
** '''hotelCategoryId''' – идентификатор категории отеля.
** '''hotelCategoryId *''' – идентификатор категории отеля.
+
** '''hotelCategoryName''' – название категории отеля.
** '''mealId *''' – идентификатор вида питания.
+
** '''roomId''' – идентификатор типа номера.
** '''htPlaceName *''' – название типа размещения в номере (примеры: 2 ADL + 1 CH (2-12), 2 ADL + INF).
+
** '''roomName''' – название типа номера.
 +
** '''roomTypeId''' – идентификатор категории номера.
 
** '''roomTypeName''' – название категории номера (примеры: standard, deluxe, family, deluxe super ocean view).
 
** '''roomTypeName''' – название категории номера (примеры: standard, deluxe, family, deluxe super ocean view).
** '''tourDate *''' – дата начала тура в формате dd.MM.yyyy (пример: 31.12.2016).
+
** '''htPlaceId''' – идентификатор типа размещения.
 +
** '''htPlaceName''' – название типа размещения в номере (примеры: 2 ADL + 1 CH (2-12), 2 ADL + INF).
 +
** '''mealId''' – идентификатор вида питания.
 +
** '''mealName''' – название питания.
 +
** '''tourDate''' – дата начала тура в формате dd.MM.yyyy (пример: 31.12.2016).
 
** '''tourEndDate''' – дата окончания тура (дата прилета) в формате dd.MM.yyyy (пример: 31.12.2016).
 
** '''tourEndDate''' – дата окончания тура (дата прилета) в формате dd.MM.yyyy (пример: 31.12.2016).
** '''nights *''' – количество ночей в туре.
+
** '''nights''' – продолжительность тура в днях (всегда возвращается продолжительность тура в днях, независимо он настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
** '''price *''' – цена тура в валюте, которая была указана во входном параметре '''currencyId'''.
+
** '''price''' – цена тура в валюте, которая была указана во входном параметре '''currencyId'''.
** '''hotelIsInStop *''' – наличие мест в отеле, допустимы значения: 0 – есть места, 1 – нет мест, 2 – запрос.
+
** '''currencyId''' – идентификатор валюты.
** '''ticketsIncluded *''' – включена ли стоимость билетов в стоимость тура, допустимы значения: 0 – не включена (тур только отель), 1 – включена (пакетный тур).
+
** '''currencyName''' – ISO код валюты.
** '''hasEconomTicketsDpt *''' – наличие билетов эконом класса на место отдыха, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
+
** '''hotelIsInStop''' – наличие мест в отеле, допустимы значения: 0 – есть места, 1 – нет мест, 2 – запрос.
** '''hasEconomTicketsRtn *''' – наличие обратных билетов эконом класса, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
+
** '''ticketsIncluded''' – включена ли стоимость билетов в стоимость тура, допустимы значения: 0 – не включена (тур только отель), 1 – включена (пакетный тур).
** '''hasBusinessTicketsDpt *''' – наличие билетов бизнес класса на место отдыха, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
+
** '''hasEconomTicketsDpt''' – наличие билетов эконом класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано.
** '''hasBusinessTicketsRtn *''' – наличие обратных билетов бизнес класса, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
+
** '''hasAnotherEconomTicketsDpt''' – наличие билетов эконом класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
** '''tourUrl *''' – ссылка на корзину (при переходе по которой можно забронировать тур).
+
** '''hasEconomTicketsRtn''' – наличие обратных билетов эконом класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано.
 +
** '''hasAnotherEconomTicketsRtn''' – наличие обратных билетов эконом класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
 +
** '''hasBusinessTicketsDpt''' – наличие билетов бизнес класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано.
 +
** '''hasAnotherBusinessTicketsDpt''' – наличие билетов бизнес класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
 +
** '''hasBusinessTicketsRtn''' – наличие обратных билетов бизнес класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано.
 +
** '''hasAnotherBusinessTicketsRtn''' – наличие обратных билетов бизнес класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
 +
** '''hasGDSFlight''' – информация о GDS перелетах в туре: 1 – все перелеты локальные, 2 – хотя бы один перелет из GDS и его выбор обязателен, 3 – хотя бы один перелет из GDS и его выбор необязателен и нет обязательных перелетов из GDS. Начиная с релиза 15.5.
 +
Если в туре используется перелет из GDS и мы получили в параметре '''hasGDSFlight''' 2 или 3, то для расчета стоимости перелетов после вызова GetTours необходимо вызвать [[Мастер-Тур(15):API для отдачи цен в поисковые системы#Актуализация тура (ActualizeTour)|ActualizeTour]], а затем последовательно вызвать методы для получения цены регулярного перелета [[Мастер-Тур(15):API для разработки онлайн поиска и бронирования#Поиск рейсов из внешней системы (GetGDSFlights)|GetGDSFlights]], [[Мастер-Тур(15):API для разработки онлайн поиска и бронирования#Выгрузка информации от внешнего поставщика по перелету (RebuildFlights)|RebuidFlights]] и [[Мастер-Тур(15):API для разработки онлайн поиска и бронирования#Расчет путевки (CalculateReservation)|CalculateReservation]].
 +
** '''hasGDSHotel''' – информация о GDS отелях в туре: 1 – локальный отель, 2 – хотя бы один отель из GDS. Начиная с релиза 15.5.
 +
** '''tourUrl''' – ссылка на корзину (при переходе по которой можно забронировать тур), формируется сервисом ПК "Мастер-тур".
 
** '''spoUrl''' – ссылка на описание тура (указывается в программе тура).
 
** '''spoUrl''' – ссылка на описание тура (указывается в программе тура).
 +
** '''fewPlacesInHotel''' – числовое значение мест в отеле. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''fewTicketsDptY''' – числовое значение мест прямого перелета эконом класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''fewTicketsRtnY''' – числовое значение мест обратного перелета эконом класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''fewTicketsDptB''' – числовое значение мест прямого перелета бизнес класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''fewTicketsRtnB''' – числовое значение мест обратного перелета бизнес класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 
** '''flags''' – если тур многоотельный, возвращается код '''1024'''. Во всех остальных случаях возвращается '''0'''.
 
** '''flags''' – если тур многоотельный, возвращается код '''1024'''. Во всех остальных случаях возвращается '''0'''.
 
** '''description''' – указывается информация о проживании. Если тур многоотельный, то указывается информация обо всех отелях в туре (пример: 1 н., Resort1, Hotel1, Standard, BB; 3 н., Resort2, Hotel2, Standard, BB; 2 н., Resort3, Hotel3, Standard, BB).
 
** '''description''' – указывается информация о проживании. Если тур многоотельный, то указывается информация обо всех отелях в туре (пример: 1 н., Resort1, Hotel1, Standard, BB; 3 н., Resort2, Hotel2, Standard, BB; 2 н., Resort3, Hotel3, Standard, BB).
 
** '''receivingParty''' – параметр не обрабатывается.
 
** '''receivingParty''' – параметр не обрабатывается.
 
** '''earlyBookingValidTill''' – параметр не обрабатывается.
 
** '''earlyBookingValidTill''' – параметр не обрабатывается.
 +
** '''TourTypes''' – массив типов тура, привязанных к программе тура.
 +
*** '''Key''' – идентификатор типа тура.
 +
*** '''Value''' – название типа тура.
 +
** '''hotelScheme''' – объект схемы отеля (для многоотельных туров - объект схемы первого отеля).
 +
*** '''templateId''' – идентификатор шаблона услуги.
 +
*** '''durationInNight''' – продолжительность отеля в ночах.
 +
*** '''code''' – ключ отеля.
 +
*** '''packetKey''' – ключ пакета.
 +
*** '''partnerKey''' – ключ партнера.
 +
*** '''gdsProviderId''' – ключ провайдера из внешней системы.
 +
*** '''totalTourDuration''' – общая продолжительность тура в днях.
 +
** '''hotels''' – массив отелей, который соответствует количеству отелей в туре. Каждая запись массива содержит в себе информацию по одному отелю. Для многоотельных туров выводятся по порядку проживания в отелях.
 +
*** '''countryId''' – идентификатор страны
 +
*** '''countryName''' – название страны
 +
*** '''resortId''' – идентификатор города, в котором расположен отель
 +
*** '''resortName''' – название города, в котором расположен отель
 +
*** '''areaId''' – идентификатор курорта, в котором расположен отель
 +
*** '''areaName''' – название курорта, в котором расположен отель
 +
*** '''hotelId''' – идентификатор отеля
 +
*** '''hotelName''' – название отеля
 +
*** '''hotelUrl''' – ссылка на страницу с описанием отеля
 +
*** '''hotelCategoryId''' – идентификатор категории отеля
 +
*** '''hotelCategoryName''' – название категории отеля
 +
*** '''roomId''' – идентификатор типа номера
 +
*** '''roomName''' – название типа номера
 +
*** '''roomTypeId''' – идентификатор категории номера
 +
*** '''roomTypeName''' – название категории номера
 +
*** '''htPlaceId''' – идентификатор типа размещения
 +
*** '''htPlaceName''' – название типа размещения
 +
*** '''mealId''' – идентификатор питания
 +
*** '''mealName''' – название питания
 +
*** '''checkIn''' – дата заезда в отель
 +
*** '''checkOut''' – дата выезда из отеля
 +
*** '''checkInTime''' – время заезда в отель (обрабатывается с релиза 15.6)
 +
*** '''checkOutTime''' – время выезда из отеля (обрабатывается с релиза 15.6)
 +
*** '''latitude''' – GPS координаты: географическая широта (обрабатывается с релиза 15.6)
 +
*** '''longitude''' – GPS координаты: географическая долгота (обрабатывается с релиза 15.6)
 +
*** '''htNights''' – количество ночей в отеле
 +
*** '''hotelIsInStop''' – наличие мест в отеле, допустимы значения: 0 – есть места, 1 – нет мест, 2 – запрос
 +
*** '''isGDS''' – информация о том, локальный отель или из GDS системы: 0 – локальный отель, 1 – отель из GDS. Начиная с релиза 15.5.
 +
*** '''hotelScheme''' – объект схемы отеля
 +
**** '''templateId''' – идентификатор шаблона услуги
 +
**** '''durationInNight''' – продолжительность отеля в ночах
 +
**** '''code''' – ключ отеля
 +
**** '''packetKey''' – ключ пакета
 +
**** '''partnerKey''' – ключ партнера
 +
**** '''gdsProviderId''' – ключ провайдера из внешней системы
 +
**** '''totalTourDuration''' – общая продолжительность тура в днях
 +
** '''services''' – массив услуг, которые входят в тур (заполняется по настройке '''showServiceDescription''' в конфигурационном файле ''TourSearchOwin'', обрабатывается с релиза 15.6)
 +
*** '''ServiceType''' – класс услуги
 +
*** '''Code''' – код (ключ) услуги
 +
*** '''SubCode1''' – доп. описание 1 услуги
 +
*** '''SubCode2''' – доп. описание 2 услуги
 +
*** '''PacketId''' – ключ пакета цены услуги
 +
*** '''PartnerId''' – ключ партнера цены услуги (заполняется по настройке '''showServicePartner''' в конфигурационном файле ''TourSearchOwin'', обрабатывается с релиза 15.6)
 +
*** '''CountryId''' – ключ страны услуги
 +
*** '''CityId''' – ключ города услуги
 +
*** '''DateBegin''' – дата предоставления услуги в формате dd.MM.yyyy (пример: 01.08.2020)
 +
*** '''DateEnd''' – дата окончания услуги в формате dd.MM.yyyy (пример: 01.08.2020)
 +
*** '''TimeBegin''' – время начала услуги в формате hh:mm (пример: 06:00), обрабатывается только для авиаперелетов и автобусных переездов
 +
*** '''TimeEnd''' – время окончания услуги в формате hh:mm (пример: 22:00), обрабатывается только для авиаперелетов и автобусных переездов
 +
*** '''Day''' – день предоставления услуги
 +
*** '''DurationInNight''' – продолжительность услуги в ночах
 +
*** '''GDSProviderId''' – ключ внешнего провайдера услуги (GDS)
 +
*** '''Name''' – название услуги
 +
*** '''Price''' – нетто стоимость услуги (заполняется по настройке '''showServiceNetto''' в конфигурационном файле ''TourSearchOwin'', обрабатывается с релиза 15.6)
 +
*** '''Cost''' – брутто стоимость услуги (заполняется по настройке '''showServiceBrutto''' в конфигурационном файле ''TourSearchOwin'', обрабатывается с релиза 15.6)
 +
*** '''Availability''' – результат проверки квоты по услуге: 0 – нет мест, 1 – есть места, 2 – запрос
 +
*** '''Tariffs''' – поле ''cs_trfid'' из таблицы ''tbl_costs''. В ответе должны быть через запятую уникальные id этих тарифов, исходя из цен, по которым считалось
 +
** '''nodeId''' – уникальный идентификатор узла в кластере балансировки нагрузки [[Мастер-Тур(15):Балансировщик нагрузки HaProxy|HaProxy]]
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
Строка 405: Строка 1270:
 
Вызов метода GetTours
 
Вызов метода GetTours
 
<syntaxhighlight lang="java" enclose="div">
 
<syntaxhighlight lang="java" enclose="div">
http://localhost:9000/TourSearchOwin/searchApi?action=GetTours&count=20&countryId=22&departCityId=1
+
http://localhost:9000/TourSearchOwin/searchApi?action=GetTours&count=20&countryId=90&departCityId=1
&dateFrom=10.08.2016&dateTo=10.08.2016&ticketsIncluded=0&adults=2&kids=0&nightsMin=7&nightsMax=7&currencyId=1
+
&dateFrom=10.10.2018&dateTo=10.10.2018&ticketsIncluded=0&adults=2&kids=0&nightsMin=7&nightsMax=7&currencyId=1
 
</syntaxhighlight>
 
</syntaxhighlight>
 
Возвращаемый результат метода GetTours (в формате JSON)
 
Возвращаемый результат метода GetTours (в формате JSON)
 
<syntaxhighlight lang="java" enclose="div">
 
<syntaxhighlight lang="java" enclose="div">
 
{
 
{
  "version": "1.0",
+
"version": "1.08",
  "tours": [   {
+
"tours": [{
      "offerId": 256,
+
"offerId": 45,
      "tourName": "Тур в Португалии_авиа",
+
"tourId": 100000004,
      "hotelId": 3239,
+
"tourName": "Общая проверка системы",
      "hotelUrl": "www.tophotels.com/NapHotel",
+
"countryId": 90,
      "resortId": 45,
+
"countryName": "Австрия",
      "hotelCategoryId": 64,
+
"resortId": 35,
      "mealId": 38,
+
"resortName": "Вена",
      "htPlaceName": "2 Adult",
+
"areaId": 1,
      "roomTypeName": "Sea View",
+
"areaName": "Каринтия",
      "tourDate": "10.08.2016",
+
"hotelId": 705,
      "tourEndDate": "17.08.2016",
+
"hotelName": "Continental",
      "nights": 7,
+
"hotelUrl": "www.tophotels.com/NewHotel",
      "price": 1036,
+
"hotelCategoryId": 70,
      "hotelIsInStop": 2,
+
"hotelCategoryName": "Condotel",
      "ticketsIncluded": 1,
+
"roomId": 165,
      "hasEconomTicketsDpt": 1,
+
"roomName": "DBL",
      "hasEconomTicketsRtn": 2,
+
"roomTypeId": 1939,
      "hasBusinessTicketsDpt": 0,
+
"roomTypeName": "Sea View",
      "hasBusinessTicketsRtn": 1,
+
"htPlaceId": 1238,
      "tourUrl": "http://localhost/TourSearchClient/Basket?departureCities=1&destination=1_22&tour=161&date=10.08.16&duration=8&hotelScheme=1_7_3239_221_10760
+
"htPlaceName": "2 ADL",
 +
"mealId": 62,
 +
"mealName": "BB",
 +
"tourDate": "10.11.2018",
 +
"tourEndDate": "21.11.2018",
 +
"nights": 12,
 +
"price": 15,
 +
"currencyId": 1,
 +
"currencyName": "$",
 +
"hotelIsInStop": 2,
 +
"ticketsIncluded": 1,
 +
"hasEconomTicketsDpt": 2,
 +
"hasEconomTicketsRtn": 2,
 +
"hasBusinessTicketsDpt": 2,
 +
"hasBusinessTicketsRtn": 2,
 +
"tourUrl": "http://localhost/TourSearchClient/Basket?departureCities=1&destination=1_22&tour=161&date=10.08.16&duration=8&hotelScheme=1_7_3239_221_10760_98
 +
&adultCount=2&hotelQuota=7&aviaQuota=7&serviceDescriptions=2_1_586_89_1_22_33_221_10760_1_0,
 +
1_3_3239_1148_38_22_33_221_10760_1_7,3_1_587_89_33_460_1_221_10760_8_0&currency=USD",
 +
                "hasGDSFlight ": 0,
 +
                "hasGDSHotel ": 0,
 +
"spoUrl": "www.megatec.ru",
 +
"fewPlacesInHotel": null,
 +
"fewTicketsDptY": null,
 +
"fewTicketsRtnY": null,
 +
"fewTicketsDptB": null,
 +
"fewTicketsRtnB": null,
 +
"flags": 0,
 +
"description": "10 н., Вена, Continental, 1 bedroom Sea View, BB",
 +
"receivingParty": "",
 +
"earlyBookingValidTill": "",
 +
"TourTypes": [{
 +
"Key": 2,
 +
"Value": "Стандартный тур"
 +
}],
 +
"hotelScheme": {
 +
"templateId": 1,
 +
"durationInNight": 10,
 +
"code": 705,
 +
"packetKey": 779,
 +
"partnerKey": 12667,
 +
                        "gdsProviderId" 98,
 +
                        "totalTourDuration" 11
 +
}
 +
"hotels": [{
 +
"countryId": 90,
 +
"countryName": "Австрия",
 +
"resortId": 35,
 +
"resortName": "Вена",
 +
"areaId": 1,
 +
"areaName": "Каринтия",
 +
"hotelId": 705,
 +
"hotelName": "Continental",
 +
"hotelUrl": "www.tophotels.com/NewHotel",
 +
"hotelCategoryId": 70,
 +
"hotelCategoryName": "Condotel",
 +
"roomId": 165,
 +
"roomName": "DBL",
 +
"roomTypeId": 1939,
 +
"roomTypeName": "Sea View",
 +
"htPlaceId": 1238,
 +
"htPlaceName": "2 ADL",
 +
"mealId": 62,
 +
"mealName": "BB",
 +
"checkIn": "2018-11-10T00:00:00",
 +
"checkOut": "2018-11-16T00:00:00",
 +
                        "checkInTime": null,
 +
                        "checkOutTime": null,
 +
                        "latitude": null,
 +
                        "longitude": null,
 +
"htNights": 6,
 +
"hotelIsInStop": 2,
 +
                        "isGDS": 0,
 +
"hotelScheme": {
 +
"templateId": 4,
 +
"durationInNight": 6,
 +
"code": 705,
 +
"packetKey": 1083,
 +
"partnerKey": 12695,
 +
                                "gdsProviderId": 98,
 +
                                "totalTourDuration": 7
 +
}
 +
},
 +
{
 +
 
 +
"countryId": 90,
 +
"countryName": "Австрия",
 +
"resortId": 35,
 +
"resortName": "Вена",
 +
"areaId": 1,
 +
"areaName": "Каринтия",
 +
"hotelId": 178,
 +
"hotelName": "Ananas",
 +
"hotelUrl": "www.tophotels.com/NewHotelAnanas",
 +
"hotelCategoryId": 63,
 +
"hotelCategoryName": "5+",
 +
"roomId": 165,
 +
"roomName": "DBL",
 +
"roomTypeId": 1939,
 +
"roomTypeName": "Sea View",
 +
"htPlaceId": 1238,
 +
"htPlaceName": "2 ADL",
 +
"mealId": 62,
 +
"mealName": "BB",
 +
"checkIn": "2018-11-16T00:00:00",
 +
"checkOut": "2018-11-20T00:00:00",
 +
                        "checkInTime": null,
 +
                        "checkOutTime": null,
 +
                        "latitude": null,
 +
                        "longitude": null,
 +
"htNights": 4,
 +
"hotelIsInStop": 2,
 +
                        "isGDS": 0,
 +
"hotelScheme": {
 +
"templateId": 3,
 +
"durationInNight": 4,
 +
"code": 178,
 +
"packetKey": 1085,
 +
"partnerKey": 12796,
 +
                                "gdsProviderId" 98,
 +
                                "totalTourDuration" 5
 +
}
 +
}]
 +
},
 +
"nodeId": 1
 +
}
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
 
 +
==Поиск всех цен по туру (GetToursAllPrices) начиная с релиза 15.3==
 +
Метод поиска туров использует множество параметров для поиска и фильтрации туров. Метод возвращает цены, не сгруппированные по отелям. Количество туров в выдаче регулируется параметром '''count'''.<br />
 +
Существует возможность ограничить количество цен, отдаваемых методом ''GetToursAllPrices''. Регулируется настройкой [[Мастер-Тур(15):Установка#Установка службы поиска|getToursAllPricesMaxCostCount]].
 +
* Формат запроса:
 +
** ?action=GetToursAllPrices&count=int&countryId=int&departCityId=int&dateFrom=date&dateTo=date&adults=int&kids=int&nightsMin=int&nightsMax=int&currencyId=int
 +
 
 +
* Принимаемые параметры ( '''*''' – обязательный):
 +
** '''offerId''' – уникальный идентификатор ранее найденного предложения. В случае, если данный параметр задан, все остальные параметры не обязательны и не принимаются в расчет, метод возвращает одну запись.
 +
** '''count *''' – максимальное количество предложений в выдаче.
 +
** '''countryId *''' – идентификатор страны.
 +
** '''departCityId *''' – идентификатор города вылета.
 +
** '''dateFrom *''' – начальная дата в диапазоне дат вылета в формате dd.MM.yyyy (пример: 31.12.2018).
 +
** '''dateTo *''' – конечная дата в диапазоне дат вылета в формате dd.MM.yyyy (пример: 31.12.2018).
 +
** '''adults *''' – количество взрослых.
 +
** '''kids *''' – количество детей.
 +
** '''kidsAges''' – количество полных лет каждому ребенку, передается в виде строки, перечисление через запятую (пример: 3,6).
 +
** '''nightsMin *''' – минимальное количество дней в туре (всегда запрашиваются дни тура, независимо он настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
 +
** '''nightsMax *''' – максимальное количество дней в туре (всегда запрашиваются дни тура, независимо он настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
 +
** '''resorts''' – идентификаторы городов, перечисление через запятую.
 +
** '''areas''' – идентификаторы курортов, перечисление через запятую.
 +
** '''tourTypeIds''' – идентификаторы типов тура, перечисление через запятую (начиная с релиза 15.4).
 +
** '''tourProgramIds''' – идентификаторы программ туров, перечисление через запятую (начиная с релиза 15.4).
 +
** '''hotelCategories''' – идентификаторы категорий отелей, перечисление через запятую.
 +
** '''hotels''' – идентификаторы отелей, перечисление через запятую.
 +
** '''meals''' – идентификаторы видов питания, перечисление через запятую.
 +
** '''currencyId *''' – валюта, в которой будут выданы цены, а также валюта для входящих параметров '''priceMin''' и '''priceMax''' (если они есть).
 +
** '''priceMin''' – Цена тура от.
 +
** '''priceMax''' – Цена тура до.
 +
** '''hotelIsNotInStop''' – при значении 1 в результатах не должно быть отелей в стопе (отели со статусом «под запрос» допустимы). При значении 0 в результат должны попадать как отели в стопе, так и отели с наличием мест и с местами по запросу.
 +
** '''ticketsIncluded *''' – при значении 1 в результатах должны быть только туры с включенной стоимостью перелета («только отель» недопустимы). При значении 0 в результат должны попадать как туры без перелета, так и туры с перелетом.
 +
** '''hasTickets''' – при значении 1 в результатах должны быть туры только с реальным наличием билетов в перелете (не должно быть туров со стопом на перелете, перелеты со статусом «под запрос» недопустимы). При значении 0 в результат должны попадать как туры без билетов на рейс, так и туры с наличием билетов и с билетами по запросу.
 +
** '''hasQuotas''' – при значении 1 в результатах должны быть туры только с реальным наличием мест во всех квотируемых услугах (не должно быть туров с услугами со стопом или со статусом «под запрос»). При значении 0 в результат должны попадать как туры с услугами на стопе, так и туры с наличием мест по квотам и с местами по запросу.
 +
** '''excludeUsualTours''' – при значении 1 из результатов должны быть исключены туры, являющиеся обычными турами (не являющиеся многоотельными). При значении 0 или отсутствии данного параметра такие туры должны быть включены в результат.
 +
** '''excludeCombined''' – при значении 1 из результатов должны быть исключены туры, являющиеся многоотельными. При значении 0 или отсутствии данного параметра такие туры должны быть включены в результат.
 +
** '''hasGDSFlight''' – подбирать туры с GDS перелетами. ''Параметр обрабатывается, начиная с релиза 15.5''.
 +
*** '''0''' – подбирать любые туры, вне зависимости от того, есть в них GDS перелеты или нет (значение по умолчанию)
 +
*** '''1''' – подбирать туры только с локальными перелетами
 +
*** '''2''' – подбирать туры только с обязательными GDS перелетами
 +
*** '''3''' – подбирать туры только с необязательными GDS перелетами
 +
*** '''4''' – подбирать туры, в которых в одном направлении присутствует обязательный GDS перелет, а в другом направлении есть обязательный и необязательный GDS перелет (на двух вкладках в программе туров)
 +
** '''hasGDSHotel''' – подбирать туры с GDS отелями. ''Параметр обрабатывается, начиная с релиза 15.5''.
 +
*** '''0''' – подбирать любые туры, вне зависимости от того, есть в них GDS отели или нет (значение по умолчанию)
 +
*** '''1''' – подбирать туры только с локальными отелями
 +
*** '''2''' – подбирать туры только с GDS отелями
 +
** '''showToursWithoutHotels''' – при значении 1 в результатах поиска вместе с обычными турами должны подбираться туры без проживания (без услуги отель в составе тура). При значении 0 или отсутствии данного параметра такие туры должны быть исключены из результата поиска. ''Параметр обрабатывается, начиная с релиза 15.2''.
 +
** '''Sort''' – сортировка результатов. Возможно использование нескольких параметров через запятую. Если параметр не указан, то по умолчанию сортировка производится по возрастанию цены. Возможные значения:
 +
*** '''ByPrice''' – сортировка по цене по возрастанию.
 +
*** '''ByPrice_desc''' – сортировка по цене по убыванию.
 +
*** '''ByStartDate''' – сортировка по дате начала тура по возрастанию.
 +
*** '''ByStartDate_desc''' – сортировка по дате начала тура по убыванию.
 +
*** '''ByEndDate''' – сортировка по дате окончания тура по возрастанию.
 +
*** '''ByEndDate_desc''' – сортировка по дате окончания тура по убыванию.
 +
*** '''ByDuration''' – сортировка по продолжительности тура по возрастанию.
 +
*** '''ByDuration_desc''' – сортировка по продолжительности тура по убыванию.
 +
*** '''ByHotel''' – сортировка по названию отеля (для многоотельных туров сортировка по названию первого отеля).
 +
*** '''ByHotel_desc''' – сортировка по названию отеля в обратном порядке (для многоотельных туров сортировка по названию первого отеля в обратном порядке).
 +
*** '''ByHotelCategory''' – сортировка по названию категории отеля (для многоотельных туров сортировка по названию категории первого отеля).
 +
*** '''ByHotelCategory_desc''' – сортировка по названию категории отеля в обратном порядке (для многоотельных туров сортировка по названию категории первого отеля в обратном порядке).
 +
*** '''ByMeal''' – сортировка по названию питания (для многоотельных туров сортировка по названию питания первого отеля).
 +
*** '''ByMeal_desc''' – сортировка по названию питания в обратном порядке (для многоотельных туров сортировка по названию питания в обратном порядке первого отеля).
 +
*** '''ByResort''' – сортировка по названию курорта (для многоотельных туров сортировка по названию курорта первого отеля).
 +
*** '''ByResort_desc''' – сортировка по названию курорта в обратном порядке (для многоотельных туров сортировка по названию курорта в обратном порядке первого отеля).
 +
*** '''ByCity''' – сортировка по названию города (для многоотельных туров сортировка по названию города первого отеля).
 +
*** '''ByCity_desc''' – сортировка по названию города в обратном порядке (для многоотельных туров сортировка по названию города в обратном порядке первого отеля).
 +
*** '''ByTour''' – сортировка по названию программы тура.
 +
*** '''ByTour_desc''' – сортировка по названию программы тура в обратном порядке.
 +
** '''PageNumber''' – порядковый номер страницы. Если задан парамер '''PageNumber''', то использование параметра '''PageSize''' становится обязательным.
 +
** '''PageSize''' – количество результатов на странице. Если задан парамер '''PageSize''', то использование параметра '''PageNumber''' становится обязательным.
 +
 
 +
* Возвращаемый результат:
 +
** '''offerId''' – уникальный идентификатор предложения, по которому в дальнейшем можно провести актуализацию тура.
 +
** '''tourId''' – идентификатор программы тура.
 +
** '''tourName''' – название программы тура.
 +
** '''countryId''' – идентификатор страны.
 +
** '''countryName''' – название страны.
 +
** '''resortId''' – идентификатор города, в котором расположен отель.
 +
** '''resortName''' – название города, в котором расположен отель.
 +
** '''areaId''' – идентификатор курорта, в котором расположен отель.
 +
** '''areaName''' – название курорта, в котором расположен отель.
 +
** '''hotelId''' – идентификатор отеля.
 +
** '''hotelName''' – название отеля.
 +
** '''hotelUrl''' – ссылка на страницу с описанием отеля.
 +
** '''hotelCategoryId''' – идентификатор категории отеля.
 +
** '''hotelCategoryName''' – название категории отеля.
 +
** '''roomId''' – идентификатор типа номера.
 +
** '''roomName''' – название типа номера.
 +
** '''roomTypeId''' – идентификатор категории номера.
 +
** '''roomTypeName''' – название категории номера (примеры: standard, deluxe, family, deluxe super ocean view).
 +
** '''htPlaceId''' – идентификатор типа размещения.
 +
** '''htPlaceName''' – название типа размещения в номере (примеры: 2 ADL + 1 CH (2-12), 2 ADL + INF).
 +
** '''mealId''' – идентификатор вида питания.
 +
** '''mealName''' – название питания.
 +
** '''tourDate''' – дата начала тура в формате dd.MM.yyyy (пример: 31.12.2016).
 +
** '''tourEndDate''' – дата окончания тура (дата прилета) в формате dd.MM.yyyy (пример: 31.12.2016).
 +
** '''nights''' – продолжительность тура в днях (всегда возвращается продолжительность тура в днях, независимо он настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
 +
** '''price''' – цена тура в валюте, которая была указана во входном параметре '''currencyId'''.
 +
** '''currencyId''' – идентификатор валюты.
 +
** '''currencyName''' – ISO код валюты.
 +
** '''hotelIsInStop''' – наличие мест в отеле, допустимы значения: 0 – есть места, 1 – нет мест, 2 – запрос.
 +
** '''ticketsIncluded''' – включена ли стоимость билетов в стоимость тура, допустимы значения: 0 – не включена (тур только отель), 1 – включена (пакетный тур).
 +
** '''hasEconomTicketsDpt''' – наличие билетов эконом класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано.
 +
** '''hasAnotherEconomTicketsDpt''' – наличие билетов эконом класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
 +
** '''hasEconomTicketsRtn''' – наличие обратных билетов эконом класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано.
 +
** '''hasAnotherEconomTicketsRtn''' – наличие обратных билетов эконом класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
 +
** '''hasBusinessTicketsDpt''' – наличие билетов бизнес класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано.
 +
** '''hasAnotherBusinessTicketsDpt''' – наличие билетов бизнес класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
 +
** '''hasBusinessTicketsRtn''' – наличие обратных билетов бизнес класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано.
 +
** '''hasAnotherBusinessTicketsRtn''' – наличие обратных билетов бизнес класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
 +
** '''hasGDSFlight''' – информация о GDS перелетах в туре: 1 – все перелеты локальные, 2 – хотя бы один перелет из GDS и его выбор обязателен, 3 – хотя бы один перелет из GDS и его выбор необязателен и нет обязательных перелетов из GDS. Начиная с релиза 15.5.
 +
** '''hasGDSHotel''' – информация о GDS отелях в туре: 1 – локальный отель, 2 – хотя бы один отель из GDS. Начиная с релиза 15.5.
 +
** '''tourUrl''' – ссылка на корзину (при переходе по которой можно забронировать тур).
 +
** '''spoUrl''' – ссылка на описание тура (указывается в программе тура).
 +
** '''fewPlacesInHotel''' – числовое значение мест в отеле. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''fewTicketsDptY''' – числовое значение мест прямого перелета эконом класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''fewTicketsRtnY''' – числовое значение мест обратного перелета эконом класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''fewTicketsDptB''' – числовое значение мест прямого перелета бизнес класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''fewTicketsRtnB''' – числовое значение мест обратного перелета бизнес класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''flags''' – если тур многоотельный, возвращается код '''1024'''. Во всех остальных случаях возвращается '''0'''.
 +
** '''description''' – указывается информация о проживании. Если тур многоотельный, то указывается информация обо всех отелях в туре (пример: 1 н., Resort1, Hotel1, Standard, BB; 3 н., Resort2, Hotel2, Standard, BB; 2 н., Resort3, Hotel3, Standard, BB).
 +
** '''receivingParty''' – параметр не обрабатывается.
 +
** '''earlyBookingValidTill''' – параметр не обрабатывается.
 +
** '''TourTypes''' – массив типов тура, привязанных к программе тура.
 +
*** '''Key''' – идентификатор типа тура.
 +
*** '''Value''' – название типа тура.
 +
** '''hotelScheme''' – объект схемы отеля (для многоотельных туров - объект схемы первого отеля).
 +
*** '''templateId''' – идентификатор шаблона услуги.
 +
*** '''durationInNight''' – продолжительность отеля в ночах.
 +
*** '''code''' – ключ отеля.
 +
*** '''packetKey''' – ключ пакета.
 +
*** '''partnerKey''' – ключ партнера.
 +
*** '''gdsProviderId''' – ключ провайдера из внешней системы.
 +
*** '''totalTourDuration''' – общая продолжительность тура в днях.
 +
** '''hotels''' – массив отелей, который соответствует количеству отелей туре. Каждая запись массива содержит в себе информацию по одному отелю. Для многоотельных туров выводятся по порядку проживания в отелях.
 +
*** '''countryId''' – идентификатор страны
 +
*** '''countryName''' – название страны
 +
*** '''resortId''' – идентификатор города, в котором расположен отель
 +
*** '''resortName''' – название города, в котором расположен отель
 +
*** '''areaId''' – идентификатор курорта, в котором расположен отель
 +
*** '''areaName''' – название курорта, в котором расположен отель
 +
*** '''hotelId''' – идентификатор отеля
 +
*** '''hotelName''' – название отеля
 +
*** '''hotelUrl''' – ссылка на страницу с описанием отеля
 +
*** '''hotelCategoryId''' – идентификатор категории отеля
 +
*** '''hotelCategoryName''' – название категории отеля
 +
*** '''roomId''' – идентификатор типа номера
 +
*** '''roomName''' – название типа номера
 +
*** '''roomTypeId''' – идентификатор категории номера
 +
*** '''roomTypeName''' – название категории номера
 +
*** '''htPlaceId''' – идентификатор типа размещения
 +
*** '''htPlaceName''' – название типа размещения
 +
*** '''mealId''' – идентификатор питания
 +
*** '''mealName''' – название питания
 +
*** '''checkIn''' – дата заезда в отель
 +
*** '''checkOut''' – дата выезда из отеля
 +
*** '''CheckInTime''' – время заезда в отель (обрабатывается с релиза 15.6)
 +
*** '''CheckOutTime''' – время выезда из отеля (обрабатывается с релиза 15.6)
 +
*** '''latitude''' – GPS координаты: географическая широта (обрабатывается с релиза 15.6)
 +
*** '''longitude''' – GPS координаты: географическая долгота (обрабатывается с релиза 15.6)
 +
*** '''htNights''' – количество ночей в отеле
 +
*** '''hotelIsInStop''' – наличие мест в отеле, допустимы значения: 0 – есть места, 1 – нет мест, 2 – запрос
 +
*** '''isGDS''' – информация о том, локальный отель или из GDS системы: 0 – локальный отель, 1 – отель из GDS. Начиная с релиза 15.5.
 +
*** '''hotelScheme''' – объект схемы отеля
 +
**** '''templateId''' – идентификатор шаблона услуги
 +
**** '''durationInNight''' – продолжительность отеля в ночах
 +
**** '''code''' – ключ отеля
 +
**** '''packetKey''' – ключ пакета
 +
**** '''partnerKey''' – ключ партнера
 +
**** '''gdsProviderId''' – ключ провайдера из внешней системы
 +
**** '''totalTourDuration''' – общая продолжительность тура в днях
 +
** '''services''' – массив услуг, которые входят в тур (заполняется по настройке '''showServiceDescription''' в конфигурационном файле ''TourSearchOwin'', обрабатывается с релиза 15.6)
 +
*** '''ServiceType''' – класс услуги
 +
*** '''Code''' – код (ключ) услуги
 +
*** '''SubCode1''' – доп. описание 1 услуги
 +
*** '''SubCode2''' – доп. описание 2 услуги
 +
*** '''PacketId''' – ключ пакета цены услуги
 +
*** '''PartnerId''' – ключ партнера цены услуги (заполняется по настройке '''showServicePartner''' в конфигурационном файле ''TourSearchOwin'', обрабатывается с релиза 15.6)
 +
*** '''CountryId''' – ключ страны услуги
 +
*** '''CityId''' – ключ города услуги
 +
*** '''DateBegin''' – дата предоставления услуги в формате dd.MM.yyyy (пример: 01.08.2020)
 +
*** '''DateEnd''' – дата окончания услуги в формате dd.MM.yyyy (пример: 01.08.2020)
 +
*** '''TimeBegin''' – время начала услуги в формате hh:mm (пример: 06:00), обрабатывается только для авиаперелетов и автобусных переездов
 +
*** '''TimeEnd''' – время окончания услуги в формате hh:mm (пример: 22:00), обрабатывается только для авиаперелетов и автобусных переездов
 +
*** '''Day''' – день предоставления услуги
 +
*** '''DurationInNight''' – продолжительность услуги в ночах
 +
*** '''GDSProviderId''' – ключ внешнего провайдера услуги (GDS)
 +
*** '''Name''' – название услуги
 +
*** '''Price''' – нетто стоимость услуги (заполняется по настройке '''showServiceNetto''' в конфигурационном файле ''TourSearchOwin'', обрабатывается с релиза 15.6)
 +
*** '''Cost''' – брутто стоимость услуги (заполняется по настройке '''showServiceBrutto''' в конфигурационном файле ''TourSearchOwin'', обрабатывается с релиза 15.6)
 +
*** '''Availability''' – результат проверки квоты по услуге: 0 – нет мест, 1 – есть места, 2 – запрос
 +
*** '''Tariffs''' – поле ''cs_trfid'' из таблицы ''tbl_costs''. В ответе должны быть через запятую уникальные id этих тарифов, исходя из цен, по которым считалось
 +
** '''nodeId''' – уникальный идентификатор узла в кластере балансировки нагрузки [[Мастер-Тур(15):Балансировщик нагрузки HaProxy|HaProxy]]
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 +
<div class="mw-collapsible-content">
 +
<TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD>
 +
Вызов метода GetToursAllPrices
 +
<syntaxhighlight lang="java" enclose="div">
 +
http://localhost:9000/TourSearchOwin/searchApi?action=GetToursAllPrices&count=20&countryId=90&departCityId=1
 +
&dateFrom=10.10.2018&dateTo=10.10.2018&ticketsIncluded=0&adults=2&kids=0&nightsMin=7&nightsMax=7&currencyId=1
 +
&Sort=ByStartDate
 +
</syntaxhighlight>
 +
Возвращаемый результат метода GetToursAllPrices (в формате JSON)
 +
<syntaxhighlight lang="java" enclose="div">
 +
{
 +
"version": "1.08",
 +
"tours": [{
 +
"offerId": 45,
 +
"tourId": 100000004,
 +
"tourName": "Общая проверка системы",
 +
"countryId": 90,
 +
"countryName": "Австрия",
 +
"resortId": 35,
 +
"resortName": "Вена",
 +
"areaId": 1,
 +
"areaName": "Каринтия",
 +
"hotelId": 705,
 +
"hotelName": "Continental",
 +
"hotelUrl": "www.tophotels.com/NewHotel",
 +
"hotelCategoryId": 70,
 +
"hotelCategoryName": "Condotel",
 +
"roomId": 165,
 +
"roomName": "DBL",
 +
"roomTypeId": 1939,
 +
"roomTypeName": "Sea View",
 +
"htPlaceId": 1238,
 +
"htPlaceName": "2 ADL",
 +
"mealId": 62,
 +
"mealName": "BB",
 +
"tourDate": "10.11.2018",
 +
"tourEndDate": "21.11.2018",
 +
"nights": 12,
 +
"price": 15,
 +
"currencyId": 1,
 +
"currencyName": "$",
 +
"hotelIsInStop": 2,
 +
"ticketsIncluded": 1,
 +
"hasEconomTicketsDpt": 2,
 +
"hasEconomTicketsRtn": 2,
 +
"hasBusinessTicketsDpt": 2,
 +
"hasBusinessTicketsRtn": 2,
 +
"tourUrl": "http://localhost/TourSearchClient/Basket?departureCities=1&destination=1_22&tour=161&date=10.08.16&duration=8&hotelScheme=1_7_3239_221_10760_0
 
&adultCount=2&hotelQuota=7&aviaQuota=7&serviceDescriptions=2_1_586_89_1_22_33_221_10760_1_0,
 
&adultCount=2&hotelQuota=7&aviaQuota=7&serviceDescriptions=2_1_586_89_1_22_33_221_10760_1_0,
1_3_3239_1148_38_22_33_221_10760_1_7,3_1_587_89_33_460_1_221_10760_8_0&currency=$",
+
1_3_3239_1148_38_22_33_221_10760_1_7,3_1_587_89_33_460_1_221_10760_8_0&currency=USD",
      "spoUrl": "wiki.megatec.ru",
+
                "hasGDSFlight ": 0,
      "flags": 0,
+
                "hasGDSHotel ": 0,
      "description": "5 н., Порту, 3* Paradisos, Standart, BB",
+
"spoUrl": "www.megatec.ru",
      "receivingParty": "",
+
"fewPlacesInHotel": null,
      "earlyBookingValidTill": ""
+
"fewTicketsDptY": null,
  }]
+
"fewTicketsRtnY": null,
 +
"fewTicketsDptB": null,
 +
"fewTicketsRtnB": null,
 +
"flags": 0,
 +
"description": "10 н., Вена, Continental, 1 bedroom Sea View, BB",
 +
"receivingParty": "",
 +
"earlyBookingValidTill": "",
 +
"TourTypes": [{
 +
"Key": 2,
 +
"Value": "Стандартный тур"
 +
}],
 +
"hotelScheme": {
 +
"templateId": 1,
 +
"durationInNight": 10,
 +
"code": 705,
 +
"packetKey": 779,
 +
"partnerKey": 12667,
 +
                        "gdsProviderId": 0,
 +
                        "totalTourDuration": 11
 +
}
 +
"hotels": [{
 +
"countryId": 90,
 +
"countryName": "Австрия",
 +
"resortId": 35,
 +
"resortName": "Вена",
 +
"areaId": 1,
 +
"areaName": "Каринтия",
 +
"hotelId": 705,
 +
"hotelName": "Continental",
 +
"hotelUrl": "www.tophotels.com/NewHotel",
 +
"hotelCategoryId": 70,
 +
"hotelCategoryName": "Condotel",
 +
"roomId": 165,
 +
"roomName": "DBL",
 +
"roomTypeId": 1939,
 +
"roomTypeName": "Sea View",
 +
"htPlaceId": 1238,
 +
"htPlaceName": "2 ADL",
 +
"mealId": 62,
 +
"mealName": "BB",
 +
"checkIn": "2018-11-10T00:00:00",
 +
"checkOut": "2018-11-16T00:00:00",
 +
                        "checkInTime": null,
 +
                        "checkOutTime": null,
 +
                        "latitude": null,
 +
                        "longitude": null,
 +
"htNights": 6,
 +
"hotelIsInStop": 2,
 +
                        "isGDS": 0,
 +
"hotelScheme": {
 +
"templateId": 4,
 +
"durationInNight": 6,
 +
"code": 705,
 +
"packetKey": 1083,
 +
"partnerKey": 12695,
 +
                                "gdsProviderId" 0,
 +
                                "totalTourDuration": 7
 +
}
 +
},
 +
{
 +
 
 +
"countryId": 90,
 +
"countryName": "Австрия",
 +
"resortId": 35,
 +
"resortName": "Вена",
 +
"areaId": 1,
 +
"areaName": "Каринтия",
 +
"hotelId": 178,
 +
"hotelName": "Ananas",
 +
"hotelUrl": "www.tophotels.com/NewHotelAnanas",
 +
"hotelCategoryId": 63,
 +
"hotelCategoryName": "5+",
 +
"roomId": 165,
 +
"roomName": "DBL",
 +
"roomTypeId": 1939,
 +
"roomTypeName": "Sea View",
 +
"htPlaceId": 1238,
 +
"htPlaceName": "2 ADL",
 +
"mealId": 62,
 +
"mealName": "BB",
 +
"checkIn": "2018-11-16T00:00:00",
 +
"checkOut": "2018-11-20T00:00:00",
 +
                        "checkInTime": null,
 +
                        "checkOutTime": null,
 +
                        "latitude": null,
 +
                        "longitude": null,
 +
"htNights": 4,
 +
"hotelIsInStop": 2,
 +
                        "isGDS": 0,
 +
"hotelScheme": {
 +
"templateId": 3,
 +
"durationInNight": 4,
 +
"code": 178,
 +
"packetKey": 1085,
 +
"partnerKey": 12796,
 +
                                "gdsProviderId" 0,
 +
                                "totalTourDuration": 5
 +
}
 +
}]
 +
},
 +
"nodeId": 1
 +
}
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
 
 +
==Поиск минимальных цен по каждому варианту питания (GetToursAllPricesPansion) начиная с релиза 15.9==
 +
Метод поиска туров использует множество параметров для поиска и фильтрации туров. Метод возвращает минимальные цены по каждому варианту питания, сгруппированные по отелям. Количество туров в выдаче регулируется параметром '''count'''.<br />
 +
* Формат запроса:
 +
** ?action=GetToursAllPricesPansion&count=int&countryId=int&departCityId=int&dateFrom=date&dateTo=date&adults=int&kids=int&nightsMin=int&nightsMax=int&currencyId=int
 +
 
 +
* Принимаемые параметры ( '''*''' – обязательный):
 +
** '''count *''' – максимальное количество предложений в выдаче.
 +
** '''countryId *''' – идентификатор страны.
 +
** '''departCityId *''' – идентификатор города вылета.
 +
** '''dateFrom *''' – начальная дата в диапазоне дат вылета в формате dd.MM.yyyy (пример: 31.12.2024).
 +
** '''dateTo *''' – конечная дата в диапазоне дат вылета в формате dd.MM.yyyy (пример: 31.12.2024).
 +
** '''adults *''' – количество взрослых.
 +
** '''kids *''' – количество детей.
 +
** '''kidsAges''' – количество полных лет каждому ребенку, передается в виде строки, перечисление через запятую (пример: 3,6).
 +
** '''nightsMin *''' – минимальное количество дней в туре (всегда запрашиваются дни тура, независимо от настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
 +
** '''nightsMax *''' – максимальное количество дней в туре (всегда запрашиваются дни тура, независимо от настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
 +
** '''resorts''' – идентификаторы городов, перечисление через запятую.
 +
** '''areas''' – идентификаторы курортов, перечисление через запятую.
 +
** '''tourTypeIds''' – идентификаторы типов тура, перечисление через запятую.
 +
** '''tourProgramIds''' – идентификаторы программ туров, перечисление через запятую.
 +
** '''hotelCategories''' – идентификаторы категорий отелей, перечисление через запятую.
 +
** '''hotels''' – идентификаторы отелей, перечисление через запятую.
 +
** '''meals''' – идентификаторы видов питания, перечисление через запятую.
 +
** '''currencyId *''' – валюта, в которой будут выданы цены, а также валюта для входящих параметров '''priceMin''' и '''priceMax''' (если они есть).
 +
** '''priceMin''' – Цена тура от.
 +
** '''priceMax''' – Цена тура до.
 +
** '''hotelIsNotInStop''' – при значении 1 в результатах не должно быть отелей в стопе (отели со статусом «под запрос» допустимы). При значении 0 в результат должны попадать как отели в стопе, так и отели с наличием мест и с местами по запросу.
 +
** '''ticketsIncluded *''' – при значении 1 в результатах должны быть только туры с включенной стоимостью перелета («только отель» недопустимы). При значении 0 в результат должны попадать как туры без перелета, так и туры с перелетом.
 +
** '''hasTickets''' – при значении 1 в результатах должны быть туры только с реальным наличием билетов в перелете (не должно быть туров со стопом на перелете, перелеты со статусом «под запрос» недопустимы). При значении 0 в результат должны попадать как туры без билетов на рейс, так и туры с наличием билетов и с билетами по запросу.
 +
** '''hasQuotas''' – при значении 1 в результатах должны быть туры только с реальным наличием мест во всех квотируемых услугах (не должно быть туров с услугами со стопом или со статусом «под запрос»). При значении 0 в результат должны попадать как туры с услугами на стопе, так и туры с наличием мест по квотам и с местами по запросу.
 +
** '''excludeUsualTours''' – при значении 1 из результатов должны быть исключены туры, являющиеся обычными турами (не являющиеся многоотельными). При значении 0 или отсутствии данного параметра такие туры должны быть включены в результат.
 +
** '''excludeCombined''' – при значении 1 из результатов должны быть исключены туры, являющиеся многоотельными. При значении 0 или отсутствии данного параметра такие туры должны быть включены в результат.
 +
** '''hasGDSFlight''' – подбирать туры с GDS перелетами.
 +
*** '''0''' – подбирать любые туры, вне зависимости от того, есть в них GDS перелеты или нет (значение по умолчанию)
 +
*** '''1''' – подбирать туры только с локальными перелетами
 +
*** '''2''' – подбирать туры только с обязательными GDS перелетами
 +
*** '''3''' – подбирать туры только с необязательными GDS перелетами
 +
*** '''4''' – подбирать туры, в которых в одном направлении присутствует обязательный GDS перелет, а в другом направлении есть обязательный и необязательный GDS перелет (на двух вкладках в программе туров)
 +
** '''hasGDSHotel''' – подбирать туры с GDS отелями.
 +
*** '''0''' – подбирать любые туры, вне зависимости от того, есть в них GDS отели или нет (значение по умолчанию)
 +
*** '''1''' – подбирать туры только с локальными отелями
 +
*** '''2''' – подбирать туры только с GDS отелями
 +
 
 +
* Возвращаемый результат:
 +
** '''offerId''' – уникальный идентификатор предложения, по которому в дальнейшем можно провести актуализацию тура.
 +
** '''tourId''' – идентификатор программы тура.
 +
** '''tourName''' – название программы тура.
 +
** '''countryId''' – идентификатор страны.
 +
** '''countryName''' – название страны.
 +
** '''resortId''' – идентификатор города, в котором расположен отель.
 +
** '''resortName''' – название города, в котором расположен отель.
 +
** '''areaId''' – идентификатор курорта, в котором расположен отель.
 +
** '''areaName''' – название курорта, в котором расположен отель.
 +
** '''hotelId''' – идентификатор отеля.
 +
** '''hotelName''' – название отеля.
 +
** '''hotelUrl''' – ссылка на страницу с описанием отеля.
 +
** '''hotelCategoryId''' – идентификатор категории отеля.
 +
** '''hotelCategoryName''' – название категории отеля.
 +
** '''roomId''' – идентификатор типа номера.
 +
** '''roomName''' – название типа номера.
 +
** '''roomTypeId''' – идентификатор категории номера.
 +
** '''roomTypeName''' – название категории номера (примеры: standard, deluxe, family, deluxe super ocean view).
 +
** '''htPlaceId''' – идентификатор типа размещения.
 +
** '''htPlaceName''' – название типа размещения в номере (примеры: 2 ADL + 1 CH (2-12), 2 ADL + INF).
 +
** '''mealId''' – идентификатор вида питания.
 +
** '''mealName''' – название питания.
 +
** '''tourDate''' – дата начала тура в формате dd.MM.yyyy (пример: 30.12.2024).
 +
** '''tourEndDate''' – дата окончания тура (дата прилета) в формате dd.MM.yyyy (пример: 31.12.2024).
 +
** '''nights''' – продолжительность тура в днях (всегда возвращается продолжительность тура в днях, независимо от настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
 +
** '''price''' – цена тура в валюте, которая была указана во входном параметре '''currencyId'''.
 +
** '''currencyId''' – идентификатор валюты.
 +
** '''currencyName''' – ISO код валюты.
 +
** '''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 значение данного параметра будет проигнорировано.
 +
** '''hasAnotherEconomTicketsDpt''' – наличие билетов эконом класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
 +
** '''hasAnotherEconomTicketsRtn''' – наличие обратных билетов эконом класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
 +
** '''hasAnotherBusinessTicketsDpt''' – наличие билетов бизнес класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
 +
** '''hasAnotherBusinessTicketsRtn''' – наличие обратных билетов бизнес класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
 +
** '''hasGDSFlight''' – информация о GDS перелетах в туре: 1 – все перелеты локальные, 2 – хотя бы один перелет из GDS и его выбор обязателен, 3 – хотя бы один перелет из GDS и его выбор необязателен и нет обязательных перелетов из GDS.
 +
** '''hasGDSHotel''' – информация о GDS отелях в туре: 1 – локальный отель, 2 – хотя бы один отель из GDS.
 +
** '''tourUrl''' – ссылка на корзину (при переходе по которой можно забронировать тур).
 +
** '''spoUrl''' – ссылка на описание тура (указывается в программе тура).
 +
** '''fewPlacesInHotel''' – числовое значение мест в отеле. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''fewTicketsDptY''' – числовое значение мест прямого перелета эконом класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''fewTicketsRtnY''' – числовое значение мест обратного перелета эконом класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''fewTicketsDptB''' – числовое значение мест прямого перелета бизнес класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''fewTicketsRtnB''' – числовое значение мест обратного перелета бизнес класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''flags''' – если тур многоотельный, возвращается код '''1024'''. Во всех остальных случаях возвращается '''0'''.
 +
** '''description''' – указывается информация о проживании. Если тур многоотельный, то указывается информация обо всех отелях в туре (пример: 1 н., Resort1, Hotel1, Standard, BB; 3 н., Resort2, Hotel2, Standard, BB; 2 н., Resort3, Hotel3, Standard, BB).
 +
** '''receivingParty''' – параметр не обрабатывается.
 +
** '''earlyBookingValidTill''' – параметр не обрабатывается.
 +
** '''TourTypes''' – массив типов тура, привязанных к программе тура.
 +
*** '''Key''' – идентификатор типа тура.
 +
*** '''Value''' – название типа тура.
 +
** '''hotelScheme''' – объект схемы отеля (для многоотельных туров - объект схемы первого отеля).
 +
*** '''templateId''' – идентификатор шаблона услуги.
 +
*** '''durationInNight''' – продолжительность отеля в ночах.
 +
*** '''code''' – ключ отеля.
 +
*** '''packetKey''' – ключ пакета.
 +
*** '''partnerKey''' – ключ партнера.
 +
*** '''gdsProviderId''' – ключ провайдера из внешней системы.
 +
*** '''totalTourDuration''' – общая продолжительность тура в днях.
 +
** '''hotels''' – массив отелей, который соответствует количеству отелей туре. Каждая запись массива содержит в себе информацию по одному отелю. Для многоотельных туров выводятся по порядку проживания в отелях.
 +
*** '''countryId''' – идентификатор страны
 +
*** '''countryName''' – название страны
 +
*** '''resortId''' – идентификатор города, в котором расположен отель
 +
*** '''resortName''' – название города, в котором расположен отель
 +
*** '''areaId''' – идентификатор курорта, в котором расположен отель
 +
*** '''areaName''' – название курорта, в котором расположен отель
 +
*** '''hotelId''' – идентификатор отеля
 +
*** '''hotelName''' – название отеля
 +
*** '''hotelUrl''' – ссылка на страницу с описанием отеля
 +
*** '''hotelCategoryId''' – идентификатор категории отеля
 +
*** '''hotelCategoryName''' – название категории отеля
 +
*** '''roomId''' – идентификатор типа номера
 +
*** '''roomName''' – название типа номера
 +
*** '''roomTypeId''' – идентификатор категории номера
 +
*** '''roomTypeName''' – название категории номера
 +
*** '''htPlaceId''' – идентификатор типа размещения
 +
*** '''htPlaceName''' – название типа размещения
 +
*** '''mealId''' – идентификатор питания
 +
*** '''mealName''' – название питания
 +
*** '''checkIn''' – дата заезда в отель
 +
*** '''checkOut''' – дата выезда из отеля
 +
*** '''CheckInTime''' – время заезда в отель
 +
*** '''CheckOutTime''' – время выезда из отеля
 +
*** '''latitude''' – GPS координаты: географическая широта
 +
*** '''longitude''' – GPS координаты: географическая долгота
 +
*** '''htNights''' – количество ночей в отеле
 +
*** '''hotelIsInStop''' – наличие мест в отеле, допустимы значения: 0 – есть места, 1 – нет мест, 2 – запрос
 +
*** '''isGDS''' – информация о том, локальный отель или из GDS системы: 0 – локальный отель, 1 – отель из GDS.
 +
*** '''hotelScheme''' – объект схемы отеля
 +
**** '''templateId''' – идентификатор шаблона услуги
 +
**** '''durationInNight''' – продолжительность отеля в ночах
 +
**** '''code''' – ключ отеля
 +
**** '''packetKey''' – ключ пакета
 +
**** '''partnerKey''' – ключ партнера
 +
**** '''gdsProviderId''' – ключ провайдера из внешней системы
 +
**** '''totalTourDuration''' – общая продолжительность тура в днях
 +
** '''services''' – массив услуг, которые входят в тур (заполняется по настройке '''showServiceDescription''' в конфигурационном файле ''TourSearchOwin'')
 +
*** '''ServiceType''' – класс услуги
 +
*** '''Code''' – код (ключ) услуги
 +
*** '''SubCode1''' – доп. описание 1 услуги
 +
*** '''SubCode2''' – доп. описание 2 услуги
 +
*** '''PacketId''' – ключ пакета цены услуги
 +
*** '''PartnerId''' – ключ партнера цены услуги (заполняется по настройке '''showServicePartner''' в конфигурационном файле ''TourSearchOwin'')
 +
*** '''CountryId''' – ключ страны услуги
 +
*** '''CityId''' – ключ города услуги
 +
*** '''DateBegin''' – дата предоставления услуги в формате dd.MM.yyyy (пример: 01.08.2020)
 +
*** '''DateEnd''' – дата окончания услуги в формате dd.MM.yyyy (пример: 01.08.2020)
 +
*** '''TimeBegin''' – время начала услуги в формате hh:mm (пример: 06:00), обрабатывается только для авиаперелетов и автобусных переездов
 +
*** '''TimeEnd''' – время окончания услуги в формате hh:mm (пример: 22:00), обрабатывается только для авиаперелетов и автобусных переездов
 +
*** '''Day''' – день предоставления услуги
 +
*** '''DurationInNight''' – продолжительность услуги в ночах
 +
*** '''GDSProviderId''' – ключ внешнего провайдера услуги (GDS)
 +
*** '''Name''' – название услуги
 +
*** '''Price''' – нетто стоимость услуги (заполняется по настройке '''showServiceNetto''' в конфигурационном файле ''TourSearchOwin'')
 +
*** '''Cost''' – брутто стоимость услуги (заполняется по настройке '''showServiceBrutto''' в конфигурационном файле ''TourSearchOwin'')
 +
*** '''Availability''' – результат проверки квоты по услуге: 0 – нет мест, 1 – есть места, 2 – запрос
 +
*** '''Tariffs''' – поле ''cs_trfid'' из таблицы ''tbl_costs''. В ответе должны быть через запятую уникальные id этих тарифов, исходя из цен, по которым считалось
 +
** '''nodeId''' – уникальный идентификатор узла в кластере балансировки нагрузки [[Мастер-Тур(15):Балансировщик нагрузки HaProxy|HaProxy]]
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 +
<div class="mw-collapsible-content">
 +
<TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD>
 +
Вызов метода GetToursAllPrices
 +
<syntaxhighlight lang="java" enclose="div">
 +
http://localhost:9000/TourSearchOwin/searchApi?action=GetToursAllPricesPansion&count=20&countryId=90&departCityId=1
 +
&dateFrom=10.12.2024&dateTo=10.12.2024&ticketsIncluded=0&adults=2&kids=0&nightsMin=7&nightsMax=7&currencyId=1
 +
 
 +
</syntaxhighlight>
 +
Возвращаемый результат метода GetToursAllPricesPansion (в формате JSON)
 +
<syntaxhighlight lang="java" enclose="div">
 +
{
 +
{
 +
    "version": "1.08",
 +
    "tours": [
 +
        {
 +
            "offerId": 101,
 +
            "tourId": 100011396,
 +
            "tourName": "AustriaNEMOALLTEST",
 +
            "countryId": 90,
 +
            "countryName": "Австрия",
 +
            "resortId": 35,
 +
            "resortName": "Вена",
 +
            "areaId": 1,
 +
            "areaName": "Карентия",
 +
            "hotelId": 12610,
 +
            "hotelName": "Отель для удаления 56",
 +
            "hotelUrl": null,
 +
            "hotelCategoryId": 668,
 +
            "hotelCategoryName": "1*",
 +
            "roomId": 132,
 +
            "roomName": "DBL+EXB",
 +
            "roomTypeId": 26,
 +
            "roomTypeName": "Colonial Wings room",
 +
            "htPlaceId": 1238,
 +
            "htPlaceName": "2 ADL",
 +
            "mealId": 46,
 +
            "mealName": "RO2",
 +
            "tourDate": "10.12.2024",
 +
            "tourEndDate": "17.12.2024",
 +
            "nights": 8,
 +
            "price": 27.0,
 +
            "currencyId": 1,
 +
            "currencyName": "USD",
 +
            "hotelIsInStop": 2,
 +
            "ticketsIncluded": 1,
 +
            "hasEconomTicketsDpt": 0,
 +
            "hasEconomTicketsRtn": 2,
 +
            "hasBusinessTicketsDpt": 2,
 +
            "hasBusinessTicketsRtn": 0,
 +
            "hasAnotherEconomTicketsDpt": 0,
 +
            "hasAnotherEconomTicketsRtn": 0,
 +
            "hasAnotherBusinessTicketsDpt": 0,
 +
            "hasAnotherBusinessTicketsRtn": 0,
 +
            "hasGDSFlight": 2,
 +
            "hasGDSHotel": 1,
 +
            "tourUrl": "http://localhost/TourSearchClient/Basket?departureCities=1&destination=1_90&tour=100011396&date=10.12.24&duration=7&hotelScheme=2_6_12610_779_12685_0_8&adultCount=2&hotelQuota=7&aviaQuota=7&busTransferQuota=7&serviceDescriptions=1_0_1_1_1043_67_1_90_35_1037_12792_1_1,2_0_0_3_12610_66717_46_90_35_779_12685_2_6,3_1_1_1_1076_89_35_460_1_1037_12792_8_0&currency=USD",
 +
            "spoUrl": null,
 +
            "fewPlacesInHotel": null,
 +
            "fewTicketsDptY": null,
 +
            "fewTicketsRtnY": null,
 +
            "fewTicketsDptB": null,
 +
            "fewTicketsRtnB": null,
 +
            "flags": 0,
 +
            "description": "6 н., Вена, Отель для удаления 56, Colonial Wings room, RO2",
 +
            "receivingParty": "",
 +
            "earlyBookingValidTill": "",
 +
            "TourTypes": [
 +
                {
 +
                    "Key": 2,
 +
                    "Value": "Стандартный тур"
 +
                }
 +
            ],
 +
            "hotelScheme": {
 +
                "templateId": 2,
 +
                "durationInNight": 6,
 +
                "code": 12610,
 +
                "packetKey": 779,
 +
                "partnerKey": 12685,
 +
                "gdsProviderId": null,
 +
                "totalTourDuration": 8
 +
            },
 +
            "hotels": [
 +
                {
 +
                    "countryId": 90,
 +
                    "countryName": "Австрия",
 +
                    "resortId": 35,
 +
                    "resortName": "Вена",
 +
                    "areaId": 1,
 +
                    "areaName": "Карентия",
 +
                    "hotelId": 12610,
 +
                    "hotelName": "Отель для удаления 56",
 +
                    "hotelUrl": null,
 +
                    "hotelCategoryId": 668,
 +
                    "hotelCategoryName": "1*",
 +
                    "roomId": 132,
 +
                    "roomName": "DBL+EXB",
 +
                    "roomTypeId": 26,
 +
                    "roomTypeName": "Colonial Wings room",
 +
                    "htPlaceId": 1238,
 +
                    "htPlaceName": "2 ADL",
 +
                    "mealId": 46,
 +
                    "mealName": "RO2",
 +
                    "checkIn": "11.12.2024",
 +
                    "checkOut": "17.12.2024",
 +
                    "checkInTime": "14:00",
 +
                    "checkOutTime": "8:00",
 +
                    "latitude": "4.123840°",
 +
                    "longitude": "36.300000°",
 +
                    "htNights": 6,
 +
                    "hotelIsInStop": 2,
 +
                    "isGDS": 0,
 +
                    "hotelScheme": {
 +
                        "templateId": 2,
 +
                        "durationInNight": 6,
 +
                        "code": 12610,
 +
                        "packetKey": 779,
 +
                        "partnerKey": 12685,
 +
                        "gdsProviderId": null,
 +
                        "totalTourDuration": 8
 +
                    }
 +
                }
 +
            ],
 +
            "services": [
 +
                {
 +
                    "ServiceType": 1,
 +
                    "Code": 1043,
 +
                    "SubCode1": 67,
 +
                    "SubCode2": 1,
 +
                    "PacketId": 1037,
 +
                    "PartnerId": null,
 +
                    "CountryId": 90,
 +
                    "CityId": 35,
 +
                    "DateBegin": "10.12.2024",
 +
                    "DateEnd": "11.12.2024",
 +
                    "TimeBegin": "16:00",
 +
                    "TimeEnd": "6:00",
 +
                    "Day": 1,
 +
                    "DurationInNight": 0,
 +
                    "GDSProviderId": 82,
 +
                    "Name": "А_П::Москва/Вена/SU2354, SVO4-VIE1, 16:00-06:00/C Бизнес класс",
 +
                    "Price": null,
 +
                    "Cost": null,
 +
                    "Availability": 2,
 +
                    "Tariffs": [
 +
                        0
 +
                    ]
 +
                },
 +
                {
 +
                    "ServiceType": 3,
 +
                    "Code": 12610,
 +
                    "SubCode1": 66717,
 +
                    "SubCode2": 46,
 +
                    "PacketId": 779,
 +
                    "PartnerId": null,
 +
                    "CountryId": 90,
 +
                    "CityId": 35,
 +
                    "DateBegin": "11.12.2024",
 +
                    "DateEnd": "17.12.2024",
 +
                    "TimeBegin": null,
 +
                    "TimeEnd": null,
 +
                    "Day": 2,
 +
                    "DurationInNight": 6,
 +
                    "GDSProviderId": null,
 +
                    "Name": "HOTEL::Вена/Отель для удаления 56-1*,6 [nights]/DBL+EXB(Colonial Wings room),2 ADL/RO2 RO2",
 +
                    "Price": null,
 +
                    "Cost": null,
 +
                    "Availability": 2,
 +
                    "Tariffs": [
 +
                        1
 +
                    ]
 +
                },
 +
                {
 +
                    "ServiceType": 1,
 +
                    "Code": 1076,
 +
                    "SubCode1": 89,
 +
                    "SubCode2": 35,
 +
                    "PacketId": 1037,
 +
                    "PartnerId": null,
 +
                    "CountryId": 460,
 +
                    "CityId": 1,
 +
                    "DateBegin": "17.12.2024",
 +
                    "DateEnd": "17.12.2024",
 +
                    "TimeBegin": "17:00",
 +
                    "TimeEnd": "21:00",
 +
                    "Day": 8,
 +
                    "DurationInNight": 0,
 +
                    "GDSProviderId": 82,
 +
                    "Name": "А_П::Вена/Москва/SU2355, VIE1-SVO4, 17:00-21:00/Y Basic (ручная кладь 20х30х40)",
 +
                    "Price": null,
 +
                    "Cost": null,
 +
                    "Availability": 2,
 +
                    "Tariffs": [
 +
                        0
 +
                    ]
 +
                }
 +
            ]
 +
        },
 +
        {
 +
            "offerId": 102,
 +
            "tourId": 100006755,
 +
            "tourName": "Общая проверка системы (М_2)",
 +
            "countryId": 90,
 +
            "countryName": "Австрия",
 +
            "resortId": 35,
 +
            "resortName": "Вена",
 +
            "areaId": -1,
 +
            "areaName": null,
 +
            "hotelId": 8661,
 +
            "hotelName": "Continental5 Gardırop veya dolap, El dezenfektanı, Çay / Kah",
 +
            "hotelUrl": "https://yandex.ruGardırop veya ",
 +
            "hotelCategoryId": 64,
 +
            "hotelCategoryName": "3*",
 +
            "roomId": 141,
 +
            "roomName": "2AD",
 +
            "roomTypeId": 1939,
 +
            "roomTypeName": "1 bedroom Jacuzzi Suite",
 +
            "htPlaceId": 1238,
 +
            "htPlaceName": "2 ADL",
 +
            "mealId": 63,
 +
            "mealName": "HH для удаления3",
 +
            "tourDate": "10.12.2024",
 +
            "tourEndDate": "17.12.2024",
 +
            "nights": 8,
 +
            "price": 110.0,
 +
            "currencyId": 1,
 +
            "currencyName": "USD",
 +
            "hotelIsInStop": 2,
 +
            "ticketsIncluded": 1,
 +
            "hasEconomTicketsDpt": 2,
 +
            "hasEconomTicketsRtn": 2,
 +
            "hasBusinessTicketsDpt": 0,
 +
            "hasBusinessTicketsRtn": 0,
 +
            "hasAnotherEconomTicketsDpt": 2,
 +
            "hasAnotherEconomTicketsRtn": 2,
 +
            "hasAnotherBusinessTicketsDpt": 0,
 +
            "hasAnotherBusinessTicketsRtn": 0,
 +
            "hasGDSFlight": 1,
 +
            "hasGDSHotel": 1,
 +
            "tourUrl": "http://localhost/TourSearchClient/Basket?departureCities=1&destination=1_90&tour=100006755&date=10.12.24&duration=7&hotelScheme=1_6_8661_779_12667_0_8&adultCount=2&hotelQuota=7&aviaQuota=7&busTransferQuota=7&serviceDescriptions=3_17_17_1_1397_89_1_90_35_779_10760_1_0,18_0_0_2_1137_30_0_90_275_779_11246_1_0,1_0_0_3_8661_47289_63_90_35_779_12667_1_6,4_5_4_1_1059_285_35_460_1_779_10760_7_1&currency=USD",
 +
            "spoUrl": "www.megatec.ru",
 +
            "fewPlacesInHotel": null,
 +
            "fewTicketsDptY": null,
 +
            "fewTicketsRtnY": null,
 +
            "fewTicketsDptB": null,
 +
            "fewTicketsRtnB": null,
 +
            "flags": 0,
 +
            "description": "6 н., Вена, Continental5 Gardırop veya dolap, El dezenfektanı, Çay / Kah, 1 bedroom Jacuzzi Suite, HH3",
 +
            "receivingParty": "",
 +
            "earlyBookingValidTill": "",
 +
            "TourTypes": [
 +
                {
 +
                    "Key": 2,
 +
                    "Value": "Стандартный тур"
 +
                }
 +
            ],
 +
            "hotelScheme": {
 +
                "templateId": 1,
 +
                "durationInNight": 6,
 +
                "code": 8661,
 +
                "packetKey": 779,
 +
                "partnerKey": 12667,
 +
                "gdsProviderId": null,
 +
                "totalTourDuration": 8
 +
            },
 +
            "hotels": [
 +
                {
 +
                    "countryId": 90,
 +
                    "countryName": "Австрия",
 +
                    "resortId": 35,
 +
                    "resortName": "Вена",
 +
                    "areaId": -1,
 +
                    "areaName": null,
 +
                    "hotelId": 8661,
 +
                    "hotelName": "Continental5 Gardırop veya dolap, El dezenfektanı, Çay / Kah",
 +
                    "hotelUrl": "https://yandex.ruGardırop veya ",
 +
                    "hotelCategoryId": 64,
 +
                    "hotelCategoryName": "3*",
 +
                    "roomId": 141,
 +
                    "roomName": "2AD",
 +
                    "roomTypeId": 1939,
 +
                    "roomTypeName": "1 bedroom Jacuzzi Suite",
 +
                    "htPlaceId": 1238,
 +
                    "htPlaceName": "2 ADL",
 +
                    "mealId": 63,
 +
                    "mealName": "HH для удаления3",
 +
                    "checkIn": "10.12.2024",
 +
                    "checkOut": "16.12.2024",
 +
                    "checkInTime": null,
 +
                    "checkOutTime": null,
 +
                    "latitude": "48.074409°",
 +
                    "longitude": "15.971374°",
 +
                    "htNights": 6,
 +
                    "hotelIsInStop": 2,
 +
                    "isGDS": 0,
 +
                    "hotelScheme": {
 +
                        "templateId": 1,
 +
                        "durationInNight": 6,
 +
                        "code": 8661,
 +
                        "packetKey": 779,
 +
                        "partnerKey": 12667,
 +
                        "gdsProviderId": null,
 +
                        "totalTourDuration": 8
 +
                    }
 +
                }
 +
            ],
 +
            "services": [
 +
                {
 +
                    "ServiceType": 1,
 +
                    "Code": 1397,
 +
                    "SubCode1": 89,
 +
                    "SubCode2": 1,
 +
                    "PacketId": 779,
 +
                    "PartnerId": null,
 +
                    "CountryId": 90,
 +
                    "CityId": 35,
 +
                    "DateBegin": "10.12.2024",
 +
                    "DateEnd": "10.12.2024",
 +
                    "TimeBegin": "1:35",
 +
                    "TimeEnd": "2:40",
 +
                    "Day": 1,
 +
                    "DurationInNight": 0,
 +
                    "GDSProviderId": null,
 +
                    "Name": "А_П::Москва/Вена/AT234, DME-VIE1, 01:35-02:40/Y Basic (ручная кладь 20х30х40)",
 +
                    "Price": null,
 +
                    "Cost": null,
 +
                    "Availability": 2,
 +
                    "Tariffs": [
 +
                        0
 +
                    ]
 +
                },
 +
                {
 +
                    "ServiceType": 2,
 +
                    "Code": 1137,
 +
                    "SubCode1": 30,
 +
                    "SubCode2": 0,
 +
                    "PacketId": 779,
 +
                    "PartnerId": null,
 +
                    "CountryId": 90,
 +
                    "CityId": 275,
 +
                    "DateBegin": "10.12.2024",
 +
                    "DateEnd": "10.12.2024",
 +
                    "TimeBegin": null,
 +
                    "TimeEnd": null,
 +
                    "Day": 1,
 +
                    "DurationInNight": 0,
 +
                    "GDSProviderId": null,
 +
                    "Name": "Трансфер::Арльберг/Копия\r ТРАНСФЕР_12 (Аэропорт не выбран - отель не выбран)/Coach 14 чел.",
 +
                    "Price": null,
 +
                    "Cost": null,
 +
                    "Availability": 1,
 +
                    "Tariffs": null
 +
                },
 +
                {
 +
                    "ServiceType": 3,
 +
                    "Code": 8661,
 +
                    "SubCode1": 47289,
 +
                    "SubCode2": 63,
 +
                    "PacketId": 779,
 +
                    "PartnerId": null,
 +
                    "CountryId": 90,
 +
                    "CityId": 35,
 +
                    "DateBegin": "10.12.2024",
 +
                    "DateEnd": "16.12.2024",
 +
                    "TimeBegin": null,
 +
                    "TimeEnd": null,
 +
                    "Day": 1,
 +
                    "DurationInNight": 6,
 +
                    "GDSProviderId": null,
 +
                    "Name": "HOTEL::Вена/Continental5 Gardırop veya dolap, El dezenfektanı, Çay / Kah-3*,6 [nights]/2AD(1 bedroom Jacuzzi Suite),2 ADL/HH3 HH для удаления3",
 +
                    "Price": null,
 +
                    "Cost": null,
 +
                    "Availability": 2,
 +
                    "Tariffs": [
 +
                        0
 +
                    ]
 +
                },
 +
                {
 +
                    "ServiceType": 1,
 +
                    "Code": 1059,
 +
                    "SubCode1": 285,
 +
                    "SubCode2": 35,
 +
                    "PacketId": 779,
 +
                    "PartnerId": null,
 +
                    "CountryId": 460,
 +
                    "CityId": 1,
 +
                    "DateBegin": "16.12.2024",
 +
                    "DateEnd": "17.12.2024",
 +
                    "TimeBegin": "20:00",
 +
                    "TimeEnd": "2:00",
 +
                    "Day": 7,
 +
                    "DurationInNight": 0,
 +
                    "GDSProviderId": null,
 +
                    "Name": "А_П::Вена/Москва/AT333, VIE1-DME, 20:00-02:00/DAF Бизнес класс",
 +
                    "Price": null,
 +
                    "Cost": null,
 +
                    "Availability": 2,
 +
                    "Tariffs": [
 +
                        0
 +
                    ]
 +
                }
 +
            ]
 +
        },
 +
"nodeId": 1
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
Строка 453: Строка 2362:
 
** '''offerId *''' – уникальный идентификатор ранее найденного предложения.
 
** '''offerId *''' – уникальный идентификатор ранее найденного предложения.
 
** '''currencyId *''' – валюта, в которой рассчитывается цена и доплаты.
 
** '''currencyId *''' – валюта, в которой рассчитывается цена и доплаты.
 +
** '''nodeId''' – уникальный идентификатор узла в кластере балансировки нагрузки [[Мастер-Тур(15):Балансировщик нагрузки HaProxy|HaProxy]]
 +
Значение nodeid берется из ответов gettours и gettourallprices
 +
Значение nodeid для каждого запроса методов gettours и gettourallprices берется из конфига службы поиска (если не указан, то берется предопределенное значение 2147483647). Полученное значение необходимо сопоставлять для каждого offerid.
 
* Возвращаемый результат ( * – обязательный):
 
* Возвращаемый результат ( * – обязательный):
 
** '''price *''' – актуализированная цена тура в валюте, которая была указана во входном параметре '''currencyId'''.
 
** '''price *''' – актуализированная цена тура в валюте, которая была указана во входном параметре '''currencyId'''.
 
** '''ticketsIsIncluded *''' – включена ли стоимость билетов в стоимость тура, допустимы значения: 0 – не включена (тур только отель), 1 – включена (пакетный тур).
 
** '''ticketsIsIncluded *''' – включена ли стоимость билетов в стоимость тура, допустимы значения: 0 – не включена (тур только отель), 1 – включена (пакетный тур).
 
** '''hotelIsInStop''' – наличие мест в отеле, допустимы значения: 0 – есть места, 1 – нет мест, 2 – запрос.  
 
** '''hotelIsInStop''' – наличие мест в отеле, допустимы значения: 0 – есть места, 1 – нет мест, 2 – запрос.  
** '''hasEconomTicketsDpt *''' – наличие билетов эконом класса на место отдыха, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано.
+
** '''hasEconomTicketsDpt''' – наличие билетов эконом класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано.
** '''hasEconomTicketsRtn *''' – наличие обратных билетов эконом класса, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано.
+
** '''hasAnotherEconomTicketsDpt''' – наличие билетов эконом класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
** '''hasBusinessTicketsDpt *''' – наличие билетов бизнес класса на место отдыха, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано.
+
** '''hasEconomTicketsRtn''' – наличие обратных билетов эконом класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано.
** '''hasBusinessTicketsRtn *''' – наличие обратных билетов бизнес класса, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано.
+
** '''hasAnotherEconomTicketsRtn''' – наличие обратных билетов эконом класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
 +
** '''hasBusinessTicketsDpt''' – наличие билетов бизнес класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано.
 +
** '''hasAnotherBusinessTicketsDpt''' – наличие билетов бизнес класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
 +
** '''hasBusinessTicketsRtn''' – наличие обратных билетов бизнес класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано.
 +
** '''hasAnotherBusinessTicketsRtn''' – наличие обратных билетов бизнес класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута '''ticketsIncluded''' = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке [[Мастер-Тур(15):Установка#Установка службы поиска|flightTariffGroups]].
 +
** '''fewPlacesInHotel''' – числовое значение мест в отеле. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''fewEconomTicketsDpt''' – числовое значение мест прямого перелета эконом класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''fewEconomTicketsRtn''' – числовое значение мест обратного перелета эконом класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''fewBusinessTicketsDpt''' – числовое значение мест прямого перелета бизнес класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 +
** '''fewBusinessTicketsRtn''' – числовое значение мест обратного перелета бизнес класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
 
** '''tourUrl''' – ссылка на корзину (при переходе по которой можно забронировать тур).
 
** '''tourUrl''' – ссылка на корзину (при переходе по которой можно забронировать тур).
 
** '''services''' – список услуг, которые могут быть в туре
 
** '''services''' – список услуг, которые могут быть в туре
 
*** '''id *''' – идентификатор услуги, уникальный в рамках данного предложения.
 
*** '''id *''' – идентификатор услуги, уникальный в рамках данного предложения.
 
*** '''type *''' – Тип услуги. Может принимать одно из следующих значений:
 
*** '''type *''' – Тип услуги. Может принимать одно из следующих значений:
 +
**** '''HotelInfo''' – отель
 
**** '''Insurance''' – страховка
 
**** '''Insurance''' – страховка
 
**** '''DptTransport''' – перелет туда
 
**** '''DptTransport''' – перелет туда
Строка 486: Строка 2408:
 
*** '''flightAirportFrom''' – код аэропорта вылета. Применяется и является обязательным только для услуг типа: '''DptTransport''', '''RtnTransport''', '''MidDptTransport''', '''MidRtnTransport'''.
 
*** '''flightAirportFrom''' – код аэропорта вылета. Применяется и является обязательным только для услуг типа: '''DptTransport''', '''RtnTransport''', '''MidDptTransport''', '''MidRtnTransport'''.
 
*** '''flightAirportTo''' – код аэропорта прилета. Применяется и является обязательным только для услуг типа: '''DptTransport''', '''RtnTransport''', '''MidDptTransport''', '''MidRtnTransport'''.
 
*** '''flightAirportTo''' – код аэропорта прилета. Применяется и является обязательным только для услуг типа: '''DptTransport''', '''RtnTransport''', '''MidDptTransport''', '''MidRtnTransport'''.
*** '''flightNum''' – номер рейса. Применяется и является обязательным только для услуг типа: '''DptTransport''', '''RtnTransport'''.  
+
*** '''flightNum''' – код авиакомпании и номер рейса. Применяется и является обязательным только для услуг типа: '''DptTransport''', '''RtnTransport'''.  
 
*** '''flightAirline''' – код авиакомпании. Применяется только для услуг типа: '''DptTransport''', '''RtnTransport''', '''MidDptTransport''', '''MidRtnTransport'''.
 
*** '''flightAirline''' – код авиакомпании. Применяется только для услуг типа: '''DptTransport''', '''RtnTransport''', '''MidDptTransport''', '''MidRtnTransport'''.
 
*** '''flightStartDateTime''' – Дата и время вылета в формате dd.MM.yyyy HH:mm (пример: 31.12.2016 14:30). Применяется только для услуг типа: '''DptTransport''', '''RtnTransport''', '''MidDptTransport''', '''MidRtnTransport'''.
 
*** '''flightStartDateTime''' – Дата и время вылета в формате dd.MM.yyyy HH:mm (пример: 31.12.2016 14:30). Применяется только для услуг типа: '''DptTransport''', '''RtnTransport''', '''MidDptTransport''', '''MidRtnTransport'''.
 
*** '''flightEndDateTime''' – Дата и время прилета в формате dd.MM.yyyy HH:mm (пример: 31.12.2016 14:30). Применяется только для услуг типа: '''DptTransport''', '''RtnTransport''', '''MidDptTransport''', '''MidRtnTransport'''.
 
*** '''flightEndDateTime''' – Дата и время прилета в формате dd.MM.yyyy HH:mm (пример: 31.12.2016 14:30). Применяется только для услуг типа: '''DptTransport''', '''RtnTransport''', '''MidDptTransport''', '''MidRtnTransport'''.
 
*** '''flightAircraft''' – тип самолета. Применяется только для услуг типа: '''DptTransport''', '''RtnTransport''', '''MidDptTransport''', '''MidRtnTransport'''.
 
*** '''flightAircraft''' – тип самолета. Применяется только для услуг типа: '''DptTransport''', '''RtnTransport''', '''MidDptTransport''', '''MidRtnTransport'''.
 +
*** '''isGDS''' – информация о том, локальный отель или из GDS системы: 0 – локальный отель, 1 – отель из GDS. Начиная с релиза 15.5.
 +
*** '''cancelationPolicy''' – информация о правилах аннуляции из GDS систем. Начиная с релиза 15.5.
 +
**** '''Date''' – дата наступления штрафа
 +
**** '''Amount''' – величина штрафа
 +
**** '''Currency''' – валюта штрафа
 +
**** '''Info''' – информация по штрафу
 +
*** '''bookingAdditionalInfo''' – информация об отеле из GDS систем. Начиная с релиза 15.5.
 +
**** '''DateFrom''' – дата действия предложения с
 +
**** '''DateTo''' – дата действия предложения по
 +
**** '''Message''' – информация
 +
Начиная с релиза 15.8 был добавлен блок '''flightGDSRequest''', возвращающий данные по внешним перелетам. Если в туре используется перелет из GDS, то ответ из секции '''flightGDSRequest''' метода API [[Мастер-Тур(15):API для отдачи цен в поисковые системы#Актуализация тура (ActualizeTour)|ActualizeTour]] передается в метод [[Мастер-Тур(15):API для разработки онлайн поиска и бронирования#Поиск рейсов из внешней системы (GetGDSFlights)|GetGDSFlights]]. Далее для получения цены выполняем методы [[Мастер-Тур(15):API для разработки онлайн поиска и бронирования#Выгрузка информации от внешнего поставщика по перелету (RebuildFlights)|RebuidFlights]] и [[Мастер-Тур(15):API для разработки онлайн поиска и бронирования#Расчет путевки (CalculateReservation)|CalculateReservation]]. <br />
 +
** '''flightGDSRequest''' – общий блок информации о внешних перелетах
 +
*** '''flightsSource''' – блок, который возвращает информацию по перелетам
 +
**** '''flightSettings''' – информация о шаблоне услуги авиаперелета
 +
***** '''templateId''' – идентификатор шаблона услуги
 +
***** '''patternId''' – идентификатор паттерна услуги (внутренняя информация из программы туров)
 +
***** '''serviceId''' – идентификатор класса услуги (внутренняя информация из программы туров)
 +
**** '''service''' – информация об услуге авиаперелета
 +
***** '''ServiceType''' – тип услуги
 +
***** '''Code''' – ключ услуги
 +
***** '''SubCode1''' – [[#Приложение 1: параметры услуги (ServiceType, Code, SubCode1, SubCode2)|доп. описание 1]]
 +
***** '''SubCode2''' – [[#Приложение 1: параметры услуги (ServiceType, Code, SubCode1, SubCode2)|доп. описание 2]]
 +
***** '''CountryId''' – страна услуги
 +
***** '''CityId''' – город услуги
 +
***** '''PacketId''' – пакет услуги
 +
***** '''PartnerId''' – партнер услуги
 +
***** '''Day''' – день предоставления услуги
 +
***** '''DurationInNight''' – продолжительность услуги в ночах
 +
**** '''price''' – стоимость перелета
 +
**** '''quotaInfo''' – объект информация по квотам
 +
***** '''status''' – статус по квотам (есть места / нет мест / под запрос)
 +
***** '''freePlaces''' – количество свободных мест, если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест". Иначе возвращается 0. Если в данном параметре 0, то руководствоваться следует значением, полученном в параметре '''PlacesStatus'''.
 +
***** '''isFewPlaces''' – выполнены ли условия, заданные в настройке "Мало": '''true''' – если заданы условия количества мест "Мало" и данные условия выполнены, '''false''' – если не заданы условия количества мест "Мало" или они заданы, но не выполнены.
 +
**** '''flightDateTimeLimitationInterval''' –
 +
***** '''startLimitation''' – начало тайм-лимита
 +
***** '''finishLimitation''' – объект тайм-лимита
 +
****** '''dateTimeString''' – дата окончания тайм-лимита
 +
****** '''serviceType''' – тип услуги
 +
****** '''serviceCode''' – код услуги
 +
**** '''flightSourceMode''' – тип перелета (1 – локальный, 2 – из внешний системы)
 +
**** '''passengers''' – информация о пассажирах
 +
***** '''IsMain''' – главный турист
 +
***** '''Number''' – порядковый номер туриста
 +
***** '''AgeType''' – тип туриста (0 – взрослый, 1 – ребенок, 2 – инфант)
 +
***** '''MaleFemaleSex''' – пол (0 – мужской, 1 – женский)
 +
***** '''FirstName''' – имя (лат)
 +
***** '''LastName''' – фамилия (лат)
 +
***** '''Patronymic''' – отчество (лат)
 +
***** '''FirstNameRus''' – имя (рус)
 +
***** '''LastNameRus''' – фамилия (рус)
 +
***** '''PatronymicRus''' – отчество (рус)
 +
***** '''InternationalPassportSeries''' – серия загранпаспорта
 +
***** '''InternationalPassportNumber''' – номер загранпаспорта
 +
***** '''InternationalPassportDateOfIssue''' – дата выдачи загранпаспорта (YYYY-MM-DDThh:mm:ssz)
 +
***** '''InternationalPassportDateOfIssueString''' – дата выдачи загранпаспорта в строке (DD.MM.YYYY)
 +
***** '''InternationalPassportDateOfExpiry''' – дата окончания действия загранпаспорта (YYYY-MM-DDThh:mm:ssz)
 +
***** '''InternationalPassportDateOfExpiryString''' – дата окончания действия загранпаспорта в строке (DD.MM.YYYY)
 +
***** '''internationalPassportByWhom''' – кем выдан загранпаспорт
 +
***** '''PassportSeries''' – серия паспорта
 +
***** '''PassportNumber''' – номер паспорта
 +
***** '''PassportDateOfIssue''' – дата выдачи паспорта (YYYY-MM-DDThh:mm:ssz)
 +
***** '''PassportDateOfIssueString''' – дата выдачи паспорта в строке (DD.MM.YYYY)
 +
***** '''PassportByWhom''' – кем выдан паспорт
 +
***** '''Citizenship''' – название страны
 +
***** '''Phone''' – телефон
 +
***** '''Email''' – e-mail
 +
***** '''BirthDay''' – дата рождения (YYYY-MM-DDThh:mm:ssz)
 +
***** '''BirthDayString''' – дата рождения в строковом формате (DD.MM.YYYY)
 +
***** '''BirthPlace''' – место рождения
 +
***** '''CitizenID''' – гражданство
 +
***** '''Age''' – количество полных лет на момент окончания тура
 +
**** '''tourDate''' – дата тура
 +
**** '''tourCurrency''' – валюта тура
 +
**** '''tourId''' – ключ программы тура
 +
**** '''filterTariff''' – информация о тарифах
 +
**** '''filterDeptime''' – информация о времени вылета
 +
**** '''isCommission''' – признак комиссионной цены
 +
**** '''baseFlightsParams''' – параметра авиаперелета
 +
***** '''CityArrival''' – город прибытия
 +
***** '''FlightCode''' – код авиаперелета
 +
***** '''TariffKey''' – ключ тарифа
 +
***** '''PartnerId''' – ключ партнера
 +
**** '''isUpdated''' – информация об обновлении перелета
 +
**** '''key''' – ключ запроса
 +
**** '''tourDurationByDays''' – продолжительность перелета
 +
**** '''langueCode''' – локализация
 +
 +
Начиная с релиза 15.9 был добавлен блок '''servicesCalculateReservations''' (регулируется настройкой '''showServiceDescriptionForActualizeTour''' в конфигурационном файле TourSearchOwin), возвращающий детальную информацию об услугах в туре, идентичную методу [[Мастер-Тур(15):API для разработки онлайн поиска и бронирования#Выгрузка первоначального варианта в корзину для бронирования (Tour)|Tour]] или [[Мастер-Тур(15):API для разработки онлайн поиска и бронирования#Поиск туров онлайн (TourForWeb)|Simple]].<br />
 +
** '''showServiceDescriptionForActualizeTour''' – общий блок информации об услугах в туре
 +
*** '''{}''' – блок, который возвращает информацию по услугам
 +
**** '''DepartureCity''' – город отправления
 +
***** '''Key''' – идентификатор
 +
***** '''Value''' – название
 +
**** '''DepartureCountry''' – страна отправления
 +
***** '''Key''' – идентификатор
 +
***** '''Value''' – название
 +
**** '''ArrivalCity''' – город прибытия
 +
***** '''Key''' – идентификатор
 +
***** '''Value''' – название
 +
**** '''ArrivalCountry''' – страна прибытия
 +
***** '''Key''' – идентификатор
 +
***** '''Value''' – название
 +
**** '''DepartureAirport''' – аэропорт отправления
 +
***** '''Key''' – идентификатор
 +
***** '''Value''' – название
 +
**** '''ArrivalAirport''' – аэропорт прибытия
 +
***** '''Key''' – идентификатор
 +
***** '''Value''' – название
 +
**** '''Airline''' – авиакомпания
 +
***** '''Key''' – идентификатор
 +
***** '''Value''' – название
 +
**** '''Aircraft''' – воздушное судно
 +
***** '''Key''' – идентификатор
 +
***** '''Value''' – название
 +
**** '''Flight''' – рейс
 +
***** '''Key''' – идентификатор
 +
***** '''Value''' – название
 +
**** '''DepartureTime''' – время вылета
 +
**** '''ArrivalTime''' – время прилета
 +
**** '''TotalTimeOfFlight''' – полное время перелета
 +
**** '''FlightDetails''' – детали авиаперелета
 +
***** '''Tariff''' – информация о тарифе перелета
 +
****** '''Key''' – идентификатор
 +
****** '''Code''' – код тарифа
 +
****** '''Name''' – наименование тарифа
 +
***** '''IsCommission''' – признак, комиссионная ли услуга
 +
***** '''Cost''' – разница в стоимости с самым дешевым вариантом
 +
***** '''QuotaStatus''' – информация о квоте
 +
****** '''PlacesStatus''' – статус по квотам (есть места / нет мест / под запрос)
 +
****** '''FreePlaces''' – количество свободных мест, если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест". Иначе возвращается 0. Если в данном параметре 0, то руководствоваться следует значением, полученном в параметре PlacesStatus.
 +
****** '''IsFewPlaces''' – выполнены ли условия, заданные в настройке "Мало": true – если заданы условия количества мест "Мало" и данные условия выполнены, false – если не заданы условия количества мест "Мало" или они заданы, но не выполнены.
 +
***** '''PartnerId''' – ключ партнера
 +
***** '''ByPax''' – цена за человека (true/false)
 +
***** '''Partner''' – информация о партнере
 +
****** '''Key''' – идентификатор
 +
****** '''Value''' – наименование
 +
**** '''FlightSetting''' – информация о шаблоне услуги авиаперелета
 +
***** '''ServiceId''' – идентификатор класса услуги (внутренняя информация из программы туров)
 +
***** '''PatternId''' – идентификатор паттерна услуги (внутренняя информация из программы туров)
 +
***** '''FlightId''' – идентификатор внешнего перелета
 +
**** '''FlightSourceMode''' – локальный или внешний перелет (внутренняя информация из программы туров)
 +
**** '''Id''' – идентификатор базового шаблона услуги (внутренняя информация из программы туров)
 +
**** '''SvKey''' – ключ типа услуги
 +
**** '''IsSubCode1''' – признак наличия [[#Приложение 1: параметры услуги (ServiceType, Code, SubCode1, SubCode2)|доп. описания 1]]
 +
**** '''IsSubCode2''' – признак наличия [[#Приложение 1: параметры услуги (ServiceType, Code, SubCode1, SubCode2)|доп. описания 2]]
 +
**** '''IsPartnerBasedOn''' – признак услуга с приоритетным подбором поставщика
 +
**** '''Day''' – день предоставления услуги
 +
**** '''DurationInNight''' – продолжительность услуги в ночах
 +
**** '''BeginDateTime''' – дата предоставления услуги
 +
**** '''EndDateTime''' – дата окончания услуги
 +
**** '''IsHooded''' – признак скрытая услуга
 +
**** '''IsDeleted''' – признак удаляемая услуга
 +
**** '''IsNotCalculate''' – признак не рассчитываемая услуга
 +
**** '''PacketId''' – ключ пакета
 +
**** '''Index''' – порядковый номер услуги
 +
 +
**** '''Hotel''' – отель
 +
***** '''Key''' – ключ отеля
 +
***** '''Value''' – наименование отеля
 +
**** '''City''' – город
 +
***** '''Key''' – ключ города
 +
***** '''Value''' – наименование города
 +
**** '''Stars''' – категория отеля
 +
***** '''Key''' – ключ категории отеля
 +
***** '''Value''' – наименование категории отеля
 +
**** '''StarsGlobalCode''' – глобальный код категории отеля
 +
***** '''Key''' – глобальный ключ категории отеля
 +
***** '''Value''' – наименование категории отеля
 +
**** '''Resort''' – курорт
 +
***** '''Key''' – ключ курорта
 +
***** '''Value''' – наименование курорта
 +
**** '''ImageURL''' – ссылка на лого отеля
 +
**** '''Http''' – ссылка на сайт отеля
 +
**** '''Description''' – описание
 +
**** '''Latitude''' – GPS координаты: географическая широта
 +
**** '''Longitude''' – GPS координаты: географическая долгота
 +
**** '''Country''' – страна
 +
***** '''Key''' – ключ страны
 +
***** '''Value''' – наименование страны
 +
**** '''HotelDetails''' – массив данных отель 
 +
***** '''HotelRoom''' – категория номера
 +
***** '''Room''' – номер
 +
****** '''Key''' – ключ номера
 +
****** '''Value''' – наименование номера
 +
***** '''RoomCategory''' – тип номера
 +
****** '''Key''' – ключ типа номера
 +
****** '''Value''' – наименование типа номера
 +
***** '''AccomodationType''' – тип размещения
 +
****** '''Key''' – ключ типа размещения
 +
****** '''Value''' – наименование типа размещения
 +
****** '''AdultCount''' – количество взрослых
 +
****** '''ChildCount''' – количество детей
 +
***** '''Pansion''' – тип питания
 +
****** '''Key''' – ключ типа питания
 +
****** '''Value''' – наименование типа питания
 +
***** '''PansionGlobalCode''' – глобальный код типа питания
 +
****** '''Key''' – ключ типа питания
 +
****** '''Value''' – наименование типа питания
 +
***** '''RemoteId''' – не используется
 +
***** '''Cost''' – разница в стоимости с самым дешевым вариантом
 +
***** '''QuotaStatus''' – информация о квоте
 +
****** '''PlacesStatus''' – статус по квотам (есть места-1 / нет мест-2 / под запрос-4)
 +
****** '''FreePlaces''' – количество свободных мест, если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест". Иначе возвращается 0. Если в данном параметре 0, то руководствоваться следует значением, полученном в параметре '''PlacesStatus'''.
 +
****** '''IsFewPlaces''' – выполнены ли условия, заданные в настройке "Мало": '''true''' – если заданы условия количества мест "Мало" и данные условия выполнены, '''false''' – если не заданы условия количества мест "Мало" или они заданы, но не выполнены.
 +
***** '''PartnerId''' – ключ партнера
 +
***** '''ByPax''' – цена за человека (true/false)
 +
***** '''Partner''' – информация о партнере
 +
****** '''Key''' – идентификатор
 +
****** '''Value''' – название               
 +
**** '''HotelTypes''' – признаки отелей в дополнительных фильтрах
 +
***** '''Key''' – ключ
 +
***** '''Value''' – значение
 +
**** '''RemoteId''' – не используется
 +
**** '''COAndSpecialsInfo''' – формирует, фильтрует и выдаёт списки применённых акций и ценовых блоков
 +
***** '''AppliedCostOffersKeys''' – коллекция идентификаторов всех применённых ценовых блоков к одной цене             
 +
***** '''AppliedSpeciasInfo''' – коллекция всех применённых акций к одной цене, содержит информацию об условиях, с которыми применилась каждая акция
 +
**** '''Id''' – идентификатор базового шаблона услуги (внутренняя информация из программы туров)
 +
**** '''SvKey''' – ключ типа услуги
 +
**** '''IsSubCode1''' – признак наличия [[#Приложение 1: параметры услуги (ServiceType, Code, SubCode1, SubCode2)|доп. описания 1]]
 +
**** '''IsSubCode2''' – признак наличия [[#Приложение 1: параметры услуги (ServiceType, Code, SubCode1, SubCode2)|доп. описания 2]]
 +
**** '''IsPartnerBasedOn''' – признак услуга с приоритетным подбором поставщика
 +
**** '''Day''' – день предоставления услуги
 +
**** '''DurationInNight''' – продолжительность услуги в ночах
 +
**** '''BeginDateTime''' – дата предоставления услуги
 +
**** '''EndDateTime''' – дата окончания услуги
 +
**** '''IsHooded''' – признак скрытая услуга
 +
**** '''IsDeleted''' – признак удаляемая услуга
 +
**** '''IsNotCalculate''' – признак не рассчитываемая услуга
 +
**** '''PacketId''' – ключ пакета
 +
**** '''Index''' – порядковый номер услуги
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
Строка 502: Строка 2654:
 
<syntaxhighlight lang="java" enclose="div">
 
<syntaxhighlight lang="java" enclose="div">
 
{
 
{
  "version": "1.0",
+
    "version": "1.08",
  "actualizedTour":   {
+
    "actualizedTour": {
      "price": 1036,
+
        "price": 201,
      "ticketsIsIncluded": 1,
+
        "ticketsIsIncluded": 1,
      "hotelIsInStop": 2,
+
        "hotelIsInStop": 2,
      "hasEconomTicketsDpt": 1,
+
        "hasEconomTicketsDpt": 0,
      "hasEconomTicketsRtn": 2,
+
        "hasEconomTicketsRtn": 2,
      "hasBusinessTicketsDpt": 0,
+
        "hasBusinessTicketsDpt": 2,
      "hasBusinessTicketsRtn": 1,
+
        "hasBusinessTicketsRtn": 0,
      "fewPlacesInHotel": -1,
+
        "hasAnotherEconomTicketsDpt": 0,
      "fewEconomTicketsDpt": -1,
+
        "hasAnotherEconomTicketsRtn": 0,
      "fewEconomTicketsRtn": -1,
+
        "hasAnotherBusinessTicketsDpt": 0,
      "fewBusinessTicketsDpt": -1,
+
        "hasAnotherBusinessTicketsRtn": 2,
      "fewBusinessTicketsRtn": -1,
+
        "fewPlacesInHotel": null,
      "tourUrl": "http://localhost/TourSearchClient/Basket?departureCities=1&destination=1_22&tour=161&date=10.08.16&duration=8&hotelScheme=1_7_3239_221_10760
+
        "fewEconomTicketsDpt": null,
&adultCount=2&hotelQuota=7&aviaQuota=7&serviceDescriptions=2_1_586_89_1_22_33_221_10760_1_0,
+
        "fewEconomTicketsRtn": null,
1_3_3239_1148_38_22_33_221_10760_1_7,3_1_587_89_33_460_1_221_10760_8_0&currency=$",
+
        "fewBusinessTicketsDpt": null,
      "services":       [
+
        "fewBusinessTicketsRtn": null,
                  {
+
        "tourUrl": "http://localhost/TourSearchClient/Basket?departureCities=1&destination=1_90&tour=100011349&date=01.11.22&duration=8&hotelScheme=3_7_178_779_12667_0_8&adultCount=2&hotelQuota=7&aviaQuota=7&busTransferQuota=7&serviceDescriptions=1_0_0_1_1448_67_1_90_35_1037_12792_1_0,3_0_0_3_178_13125_4_90_35_779_12667_1_7,2_1_0_1_1076_89_35_460_1_1037_12792_8_0&currency=USD",
            "id": 0,
+
        "services": [{
            "type": "DptTransport",
+
                "id": 0,
            "name": "А_П::Москва/Лиссабон/3G001, DME-LUS, 11:00-13:00/Y Экономический класс",
+
                "type": "DptTransport",
            "isIncluded": 1,
+
                "name": "А_П::Москва/Вена/3G000, DME-VIE1, 10:00-13:00/C Бизнес класс",
            "description": "",
+
                "isIncluded": 1,
            "surcharge": 100,
+
                "description": "",
            "flightCompatibleIds": "2",
+
                "surcharge": 0,
            "flightClass": "ECONOM",
+
                "flightCompatibleIds": "2",
            "flightAvailability": 1,
+
                "flightClass": "BUSINESS",
            "flightPlacesCount": -1,
+
                "flightAvailability": 2,
            "flightAirportFrom": "DME",
+
                "flightPlacesCount": -1,
            "flightAirportTo": "LUS",
+
                "flightAirportFrom": "DME",
            "flightNum": "001",
+
                "flightAirportTo": "VIE1",
            "flightAirline": "3G",
+
                "flightNum": "3G 000",
            "flightStartDateTime": "10.08.2016 11:00",
+
                "flightAirline": "3G",
            "flightEndDateTime": "10.08.2016 13:00",
+
                "flightStartDateTime": "01.11.2022 15:00",
            "flightAircraft": "310"
+
                "flightEndDateTime": "01.11.2022 18:00",
        },
+
                "flightAircraft": "757",
                  {
+
                "isGDS": 1,
            "id": 1,
+
                "cancelationPolicy": null,
            "type": "",
+
                "bookingAdditionalInfo": null
            "name": "HOTEL::Лиссабон/Отель в Лиссабоне-4,7 ночей/Double(Sea View),2 Adult/TT NewP",
+
            }, {
            "isIncluded": 1,
+
                "id": 1,
            "description": "",
+
                "type": "HotelInfo",
            "surcharge": 836,
+
                "name": "HOTEL::Вена/Ananas-5+++*,7 [nights]/Double(D Suite),2Ad/BB2 Завтрак",
            "flightCompatibleIds": null,
+
                "isIncluded": 1,
            "flightClass": null,
+
                "description": "",
            "flightAvailability": -1,
+
                "surcharge": 0,
            "flightPlacesCount": -1,
+
                "flightCompatibleIds": null,
            "flightAirportFrom": null,
+
                "flightClass": null,
            "flightAirportTo": null,
+
                "flightAvailability": -1,
            "flightNum": null,
+
                "flightPlacesCount": -1,
            "flightAirline": null,
+
                "flightAirportFrom": null,
            "flightStartDateTime": null,
+
                "flightAirportTo": null,
            "flightEndDateTime": null,
+
                "flightNum": " ",
            "flightAircraft": null
+
                "flightAirline": null,
        },
+
                "flightStartDateTime": null,
                  {
+
                "flightEndDateTime": null,
            "id": 2,
+
                "flightAircraft": null,
            "type": "RtnTransport",
+
                "isGDS": 0,
            "name": "А_П::Лиссабон/Москва/3G002, LUS-DME, 20:00-21:00/Y Экономический класс",
+
                "cancelationPolicy": null,
            "isIncluded": 1,
+
                "bookingAdditionalInfo": null
            "description": "",
+
            }, {
            "surcharge": 100,
+
                "id": 2,
            "flightCompatibleIds": "0",
+
                "type": "RtnTransport",
            "flightClass": "ECONOM",
+
                "name": "А_П::Вена/Москва/SU2355, VIE1-SVO4, 00:10-04:50/Y Экономический класс",
            "flightAvailability": 2,
+
                "isIncluded": 1,
            "flightPlacesCount": -1,
+
                "description": "",
            "flightAirportFrom": "LUS",
+
                "surcharge": 0,
            "flightAirportTo": "DME",
+
                "flightCompatibleIds": "0",
            "flightNum": "002",
+
                "flightClass": "ECONOM",
            "flightAirline": "3G",
+
                "flightAvailability": 2,
            "flightStartDateTime": "17.08.2016 20:00",
+
                "flightPlacesCount": -1,
            "flightEndDateTime": "17.08.2016 21:00",
+
                "flightAirportFrom": "VIE1",
            "flightAircraft": "310"
+
                "flightAirportTo": "SVO4",
        }
+
                "flightNum": "SU 2355",
      ]
+
                "flightAirline": "SU",
  }
+
                "flightStartDateTime": "08.11.2022 00:10",
 +
                "flightEndDateTime": "08.11.2022 04:50",
 +
                "flightAircraft": "321",
 +
                "isGDS": 1,
 +
                "cancelationPolicy": null,
 +
                "bookingAdditionalInfo": null
 +
            }
 +
        ],
 +
        "flightGDSRequest": {
 +
            "flightsSource": [{
 +
                    "flightSettings": {
 +
                        "templateId": 1,
 +
                        "patternId": 0,
 +
                        "serviceId": 0
 +
                    },
 +
                    "service": {
 +
                        "serviceType": 1,
 +
                        "code": 1448,
 +
                        "subCode1": 67,
 +
                        "subCode2": 1,
 +
                        "countryId": 90,
 +
                        "cityId": 35,
 +
                        "packetId": 1037,
 +
                        "partnerId": 12792,
 +
                        "day": 1,
 +
                        "durationInNight": 0
 +
                    },
 +
                    "price": 40,
 +
                    "quotaInfo": {
 +
                        "status": 4,
 +
                        "freePlaces": 0,
 +
                        "isFewPlaces": false
 +
                    },
 +
                    "flightDateTimeLimitationInterval": {
 +
                        "startLimitation": {
 +
                            "dateTimeString": "2022-11-01T15:00:00",
 +
                            "serviceType": 1,
 +
                            "serviceCode": 1448
 +
                        },
 +
                        "finishLimitation": {
 +
                            "dateTimeString": "2022-11-01T18:00:00",
 +
                            "serviceType": 1,
 +
                            "serviceCode": 1448
 +
                        }
 +
                    },
 +
                    "flightSourceMode": 2
 +
                }, {
 +
                    "flightSettings": {
 +
                        "templateId": 2,
 +
                        "patternId": 1,
 +
                        "serviceId": 0
 +
                    },
 +
                    "service": {
 +
                        "serviceType": 1,
 +
                        "code": 1076,
 +
                        "subCode1": 89,
 +
                        "subCode2": 35,
 +
                        "countryId": 460,
 +
                        "cityId": 1,
 +
                        "packetId": 1037,
 +
                        "partnerId": 12792,
 +
                        "day": 8,
 +
                        "durationInNight": 0
 +
                    },
 +
                    "price": 20,
 +
                    "quotaInfo": {
 +
                        "status": 4,
 +
                        "freePlaces": 0,
 +
                        "isFewPlaces": false
 +
                    },
 +
                    "flightDateTimeLimitationInterval": {
 +
                        "startLimitation": {
 +
                            "dateTimeString": "2022-11-08T00:10:00",
 +
                            "serviceType": 1,
 +
                            "serviceCode": 1076
 +
                        },
 +
                        "finishLimitation": {
 +
                            "dateTimeString": "2022-11-08T04:50:00",
 +
                            "serviceType": 1,
 +
                            "serviceCode": 1076
 +
                        }
 +
                    },
 +
                    "flightSourceMode": 2
 +
                }
 +
            ],
 +
            "passengers": [{
 +
                    "IsMain": true,
 +
                    "Number": 1,
 +
                    "AgeType": 0,
 +
                    "MaleFemaleSex": 0,
 +
                    "FirstName": "",
 +
                    "LastName": "",
 +
                    "Patronymic": "",
 +
                    "FirstNameRus": "",
 +
                    "LastNameRus": "",
 +
                    "PatronymicRus": "",
 +
                    "InternationalPassportSeries": "",
 +
                    "InternationalPassportNumber": "",
 +
                    "InternationalPassportDateOfIssue": "",
 +
                    "InternationalPassportDateOfIssueString": "",
 +
                    "InternationalPassportDateOfExpiry": "",
 +
                    "InternationalPassportDateOfExpiryString": "",
 +
                    "internationalPassportByWhom": "",
 +
                    "PassportSeries": "",
 +
                    "PassportNumber": "",
 +
                    "PassportDateOfIssue": "",
 +
                    "PassportDateOfIssueString": "",
 +
                    "PassportByWhom": "",
 +
                    "Citizenship": "",
 +
                    "Phone": "",
 +
                    "Email": "",
 +
                    "BirthDay": "",
 +
                    "BirthDayString": "",
 +
                    "BirthPlace": "",
 +
                    "CitizenID": "",
 +
                    "Age": 18
 +
                }, {
 +
                    "IsMain": false,
 +
                    "Number": 2,
 +
                    "AgeType": 0,
 +
                    "MaleFemaleSex": 0,
 +
                    "FirstName": "",
 +
                    "LastName": "",
 +
                    "Patronymic": "",
 +
                    "FirstNameRus": "",
 +
                    "LastNameRus": "",
 +
                    "PatronymicRus": "",
 +
                    "InternationalPassportSeries": "",
 +
                    "InternationalPassportNumber": "",
 +
                    "InternationalPassportDateOfIssue": "",
 +
                    "InternationalPassportDateOfIssueString": "",
 +
                    "InternationalPassportDateOfExpiry": "",
 +
                    "InternationalPassportDateOfExpiryString": "",
 +
                    "internationalPassportByWhom": "",
 +
                    "PassportSeries": "",
 +
                    "PassportNumber": "",
 +
                    "PassportDateOfIssue": "",
 +
                    "PassportDateOfIssueString": "",
 +
                    "PassportByWhom": "",
 +
                    "Citizenship": "",
 +
                    "Phone": "",
 +
                    "Email": "",
 +
                    "BirthDay": "",
 +
                    "BirthDayString": "",
 +
                    "BirthPlace": "",
 +
                    "CitizenID": "",
 +
                    "Age": 18
 +
                }
 +
            ],
 +
            "tourDate": "2022-11-01T00:00:00",
 +
            "tourCurrency": "$",
 +
            "tourId": 100011349,
 +
            "filterTariff": null,
 +
            "filterDeptime": [
 +
                "all"
 +
            ],
 +
            "isCommission": true,
 +
            "baseFlightsParams": [{
 +
                    "CityArrival": 35,
 +
                    "FlightCode": 1448,
 +
                    "TariffKey": 67,
 +
                    "PartnerId": 12792
 +
                }, {
 +
                    "CityArrival": 1,
 +
                    "FlightCode": 1076,
 +
                    "TariffKey": 89,
 +
                    "PartnerId": 12792
 +
                }
 +
            ],
 +
            "isUpdated": false,
 +
            "key": 0,
 +
            "tourDurationByDays": 8,
 +
            "langueCode": "ru",
 +
            "isCanary": false
 +
        }
 +
    }
 +
}
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
 
 +
==Пример работы с методами==
 +
Для примера вызываем метод GetToursAllPrices со следующими параметрами:</br>
 +
[[Файл: Ea_492.png|900px]]</br>
 +
Результат работы метода:
 +
Выдано 5 вариантов, в соответствии с отправленным в запросе параметром count=5</br>
 +
[[Файл: Ea_493.png|900px]]</br>
 +
Внутри каждого результата имеется подробная информация о туре (страна, город, отель, описание и т.д.). На основе этих данных, мы уже можем вызвать «переход в корзину». </br>
 +
Выбираем понравившийся нам вариант и далее формируем запрос вида (все необходимые данные мы возьмем из выбранного нами варианта):</br>
 +
http://localhost:9000/TourSearchOwin/Tour?DepartureCityKeys=1&DestinationType=1&DestinationKey=90&Dates=24.03.24&Durations=6&AdultCount=2&CurrencyName=%24&HotelQuota=7&AviaQuota=7&BusTransferQuota=7&HotelScheme=%5B%7B%22TemplateId%22%3A%221%22%2C%22DurationInNight%22%3A%225%22%2C%22Code%22%3A%22112322%22%2C%22PacketKey%22%3A%22779%22%2C%22PartnerKey%22%3A%2212667%22%2C%22GDSProviderId%22%3A%220%22%2C%22TotalTourDuration%22%3A%227%22%7D%5D&TourKey=100011540&TourDuration=6&PageNumber=1&PageSize=20&IsFromBasket=true&isFillSecondaryFilters=false&RemoteHotelMode=1</br>
 +
[[Файл: Ea_494.png|900px]]</br>
 +
А результатом работы будет список рассчитанных вариантов тура (варианты зависят от маршрутных услуг).</br>
 +
Далее, мы выбираем понравившийся нам результат. И готовимся формировать запрос CalculateReservation - это POST метод, который передает объект.</br>
 +
http://localhost:9000/TourSearchOwin/CalculateReservation</br>
 +
Данные для формирования CalculateReservation берем из предыдущего запроса:</br>
 +
<syntaxhighlight lang="java" enclose="div">
 +
"tourProgramId": 100011540,
 +
    "beginDate": "2024-03-24T00:00:00",
 +
    "duration": 7,
 +
    "currency": "$",
 +
    "initialPrice": {
 +
        "price": 80,
 +
        "currency": "$"    },
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
Это данные туриста, эти данные заполняются на форме. Сейчас здесь данные по умолчанию (форма туристы не заполнена).</br>
 +
<syntaxhighlight lang="java" enclose="div">
 +
"tourists": [
 +
        {
 +
            "IsMain": true,
 +
            "Number": 1,
 +
            "AgeType": 0,
 +
            "MaleFemaleSex": 0,
 +
            "FirstName": "",
 +
            "LastName": "",
 +
            "Patronymic": "",
 +
            "EnableSmsNotifications": null,
 +
            "Howdidyouhear": "",
 +
            "Residenceregion": "",
 +
            "FirstNameRus": "",
 +
            "LastNameRus": "",
 +
            "PatronymicRus": "",
 +
            "InternationalPassportSeries": "",
 +
            "InternationalPassportNumber": "",
 +
            "InternationalPassportDateOfIssue": "",
 +
            "InternationalPassportDateOfIssueString": "",
 +
            "InternationalPassportDateOfExpiry": "",
 +
            "InternationalPassportDateOfExpiryString": "",
 +
            "internationalPassportByWhom": "",
 +
            "PassportSeries": "",
 +
            "PassportNumber": "",
 +
            "PassportDateOfIssue": "",
 +
            "PassportDateOfIssueString": "",
 +
            "PassportByWhom": "",
 +
            "Citizenship": "",
 +
            "Phone": "",
 +
            "Email": "",
 +
            "BirthDay": "",
 +
            "BirthDayString": "",
 +
            "BirthPlace": "",
 +
            "CitizenID": "",
 +
            "Age": 19
 +
        },
 +
        {
 +
            "IsMain": false,
 +
            "Number": 2,
 +
            "AgeType": 0,
 +
            "MaleFemaleSex": 0,
 +
            "FirstName": "",
 +
            "LastName": "",
 +
            "Patronymic": "",
 +
            "EnableSmsNotifications": null,
 +
            "Howdidyouhear": "",
 +
            "Residenceregion": "",
 +
            "FirstNameRus": "",
 +
            "LastNameRus": "",
 +
            "PatronymicRus": "",
 +
            "InternationalPassportSeries": "",
 +
            "InternationalPassportNumber": "",
 +
            "InternationalPassportDateOfIssue": "",
 +
            "InternationalPassportDateOfIssueString": "",
 +
            "InternationalPassportDateOfExpiry": "",
 +
            "InternationalPassportDateOfExpiryString": "",
 +
            "internationalPassportByWhom": "",
 +
            "PassportSeries": "",
 +
            "PassportNumber": "",
 +
            "PassportDateOfIssue": "",
 +
            "PassportDateOfIssueString": "",
 +
            "PassportByWhom": "",
 +
            "Citizenship": "",
 +
            "Phone": "",
 +
            "Email": "",
 +
            "BirthDay": "",
 +
            "BirthDayString": "",
 +
            "BirthPlace": "",
 +
            "CitizenID": "",
 +
            "Age": 19
 +
        }
 +
    ],
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
Далее заполняем услуги. Также берем из предыдущего запроса из секции Services.
 +
<syntaxhighlight lang="java" enclose="div">
 +
"FlightSetting": {
 +
                        "ServiceId": 3,
 +
                        "PatternId": 17,
 +
                        "FlightId": 17
 +
                    },
 +
"IsHooded": false,
 +
"IsDeleted": false,
 +
"IsNotCalculate": false,
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
Благодаря этим параметрам мы можем определять значение Attributes и Type:
 +
IsHooded - это isInvisible
 +
isRemovable - это IsDeleted
 +
isNotCalculated - это IsNotCalculate
 +
Формируем следующее тело запроса:
 +
<syntaxhighlight lang="java" enclose="div">
 +
{
 +
    "tourProgramId": 100011540,
 +
    "beginDate": "2024-03-24T00:00:00",
 +
    "duration": 7,
 +
    "currency": "$",
 +
    "initialPrice": {
 +
        "price": 80,
 +
        "currency": "$"
 +
    },
 +
    "services": [
 +
        {
 +
            "Service": {
 +
                "ServiceType": 3,
 +
                "Code": 112322,
 +
                "SubCode1": 1082739,
 +
                "SubCode2": 39,
 +
                "Packet": 779,
 +
                "Partner": 12667,
 +
                "Day": 1,
 +
                "DurationInNight": 5,
 +
                "City": 35,
 +
                "Country": 90,
 +
                "Attributes": 0,
 +
                "IsRemovable": false,
 +
                "Type": 1,
 +
                "IsHooded": false,
 +
                "IsNotCalculated": false,
 +
                "BeginDateTimeString": "2024-03-24T17:00:00",
 +
                "EndDateTimeString": "2024-03-29T17:00:00",
 +
                "TemplateId": 1,
 +
                "Cost": 0,
 +
                "ByPax": false,
 +
                "QuotaStatus": {
 +
                    "PlacesStatus": 4,
 +
                    "FreePlaces": 0,
 +
                    "IsFewPlaces": false
 +
                },
 +
                "Index": 1,
 +
                "IsRoute": true,
 +
                "ServiceTemplateIndex": 1,
 +
                "RemoteId": null,
 +
                "IsCommission": true,
 +
                "BaseFlightsParams": [
 +
                    {
 +
                        "CityArrival": 35,
 +
                        "FlightCode": 773,
 +
                        "TariffKey": 67,
 +
                        "PartnerId": 10760
 +
                    },
 +
                    {
 +
                        "CityArrival": 1,
 +
                        "FlightCode": 1059,
 +
                        "TariffKey": 89,
 +
                        "PartnerId": 10760
 +
                    }
 +
                ]
 +
            },
 +
            "TouristNumbersList": [
 +
                1,
 +
                2
 +
            ]
 +
        },
 +
        {
 +
            "Service": {
 +
                "ServiceType": 1,
 +
                "Code": 773,
 +
                "SubCode1": 67,
 +
                "SubCode2": 1,
 +
                "Packet": 779,
 +
                "Partner": 10760,
 +
                "Day": 1,
 +
                "DurationInNight": 0,
 +
                "City": 35,
 +
                "Country": 90,
 +
                "Attributes": 0,
 +
                "IsRemovable": false,
 +
                "Type": 1,
 +
                "IsHooded": false,
 +
                "IsNotCalculated": false,
 +
                "BeginDateTimeString": "2024-03-24T16:00:00",
 +
                "EndDateTimeString": "2024-03-24T17:00:00",
 +
                "TemplateId": 3,
 +
                "Cost": 0,
 +
                "ByPax": true,
 +
                "QuotaStatus": {
 +
                    "PlacesStatus": 4,
 +
                    "FreePlaces": 0,
 +
                    "IsFewPlaces": false
 +
                },
 +
                "Index": 0,
 +
                "IsRoute": true,
 +
                "ServiceTemplateIndex": 0,
 +
                "IsCommission": true,
 +
                "BaseFlightsParams": [
 +
                    {
 +
                        "CityArrival": 35,
 +
                        "FlightCode": 773,
 +
                        "TariffKey": 67,
 +
                        "PartnerId": 10760
 +
                    },
 +
                    {
 +
                        "CityArrival": 1,
 +
                        "FlightCode": 1059,
 +
                        "TariffKey": 89,
 +
                        "PartnerId": 10760
 +
                    }
 +
                ]
 +
            },
 +
            "TouristNumbersList": [
 +
                1,
 +
                2
 +
            ]
 +
        },
 +
        {
 +
            "Service": {
 +
                "ServiceType": 1,
 +
                "Code": 1059,
 +
                "SubCode1": 89,
 +
                "SubCode2": 35,
 +
                "Packet": 779,
 +
                "Partner": 10760,
 +
                "Day": 6,
 +
                "DurationInNight": 1,
 +
                "City": 1,
 +
                "Country": 460,
 +
                "Attributes": 0,
 +
                "IsRemovable": false,
 +
                "Type": 1,
 +
                "IsHooded": false,
 +
                "IsNotCalculated": false,
 +
                "BeginDateTimeString": "2024-03-29T20:00:00",
 +
                "EndDateTimeString": "2024-03-30T02:00:00",
 +
                "TemplateId": 4,
 +
                "Cost": 0,
 +
                "ByPax": true,
 +
                "QuotaStatus": {
 +
                    "PlacesStatus": 4,
 +
                    "FreePlaces": 0,
 +
                    "IsFewPlaces": false
 +
                },
 +
                "Index": 2,
 +
                "IsRoute": true,
 +
                "ServiceTemplateIndex": 2,
 +
                "IsCommission": true,
 +
                "BaseFlightsParams": [
 +
                    {
 +
                        "CityArrival": 35,
 +
                        "FlightCode": 773,
 +
                        "TariffKey": 67,
 +
                        "PartnerId": 10760
 +
                    },
 +
                    {
 +
                        "CityArrival": 1,
 +
                        "FlightCode": 1059,
 +
                        "TariffKey": 89,
 +
                        "PartnerId": 10760
 +
                    }
 +
                ]
 +
            },
 +
            "TouristNumbersList": [
 +
                1,
 +
                2
 +
            ]
 +
        }
 +
    ],
 +
    "tourists": [
 +
        {
 +
            "IsMain": true,
 +
            "Number": 1,
 +
            "AgeType": 0,
 +
            "MaleFemaleSex": 0,
 +
            "FirstName": "",
 +
            "LastName": "",
 +
            "Patronymic": "",
 +
            "EnableSmsNotifications": null,
 +
            "Howdidyouhear": "",
 +
            "Residenceregion": "",
 +
            "FirstNameRus": "",
 +
            "LastNameRus": "",
 +
            "PatronymicRus": "",
 +
            "InternationalPassportSeries": "",
 +
            "InternationalPassportNumber": "",
 +
            "InternationalPassportDateOfIssue": "",
 +
            "InternationalPassportDateOfIssueString": "",
 +
            "InternationalPassportDateOfExpiry": "",
 +
            "InternationalPassportDateOfExpiryString": "",
 +
            "internationalPassportByWhom": "",
 +
            "PassportSeries": "",
 +
            "PassportNumber": "",
 +
            "PassportDateOfIssue": "",
 +
            "PassportDateOfIssueString": "",
 +
            "PassportByWhom": "",
 +
            "Citizenship": "",
 +
            "Phone": "",
 +
            "Email": "",
 +
            "BirthDay": "",
 +
            "BirthDayString": "",
 +
            "BirthPlace": "",
 +
            "CitizenID": "",
 +
            "Age": 19
 +
        },
 +
        {
 +
            "IsMain": false,
 +
            "Number": 2,
 +
            "AgeType": 0,
 +
            "MaleFemaleSex": 0,
 +
            "FirstName": "",
 +
            "LastName": "",
 +
            "Patronymic": "",
 +
            "EnableSmsNotifications": null,
 +
            "Howdidyouhear": "",
 +
            "Residenceregion": "",
 +
            "FirstNameRus": "",
 +
            "LastNameRus": "",
 +
            "PatronymicRus": "",
 +
            "InternationalPassportSeries": "",
 +
            "InternationalPassportNumber": "",
 +
            "InternationalPassportDateOfIssue": "",
 +
            "InternationalPassportDateOfIssueString": "",
 +
            "InternationalPassportDateOfExpiry": "",
 +
            "InternationalPassportDateOfExpiryString": "",
 +
            "internationalPassportByWhom": "",
 +
            "PassportSeries": "",
 +
            "PassportNumber": "",
 +
            "PassportDateOfIssue": "",
 +
            "PassportDateOfIssueString": "",
 +
            "PassportByWhom": "",
 +
            "Citizenship": "",
 +
            "Phone": "",
 +
            "Email": "",
 +
            "BirthDay": "",
 +
            "BirthDayString": "",
 +
            "BirthPlace": "",
 +
            "CitizenID": "",
 +
            "Age": 19
 +
        }
 +
    ],
 +
    "Day": "день",
 +
    "Day2": "дня",
 +
    "Days": "дней",
 +
    "Night": "ночь",
 +
    "Night2": "ночи",
 +
    "Nights": "ночей",
 +
    "adultsCountOverServiceLimit": "Количество взрослых туристов превышает лимит услуги",
 +
    "at": "на",
 +
    "incorrectChildrenInf": "Возраст детей не соответствует допустимому в выбранном варианте размещения (см. Услуги: Проживание)",
 +
    "languageCode": "ru"
 +
}
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
 
 +
Формируется такой результат работы метода:
 +
<syntaxhighlight lang="java" enclose="div">
 +
{
 +
    "IsValid": true,
 +
    "ErrorMessage": "",
 +
    "CalculatedReservation": {
 +
        "TourKey": 100011540,
 +
        "BeginDate": "2024-03-24T00:00:00",
 +
        "Duration": 7,
 +
        "Currency": "$",
 +
        "CalculatedServicesPrice": 86.0,
 +
        "ChangedPrice": 0.0,
 +
        "Price": 86.0,
 +
        "TotalPrice": 86.0,
 +
        "IsDiscountIsPercent": true,
 +
        "NationalChangedPrice": 0.0,
 +
        "NationalTotalDiscount": 0.0,
 +
        "NationalTotalPrice": 7856.3923999999999999999999971,
 +
        "NatinoalCalculatedServicesPrice": 7856.3923999999999999999999971,
 +
        "NationalPrice": 7856.3923999999999999999999971,
 +
        "Discount": 0.0,
 +
        "TotalDiscount": 0.0,
 +
        "ServiceTourists": [
 +
            {
 +
                "ServiceType": 1,
 +
                "Day": 1,
 +
                "DurationInNight": 0,
 +
                "Time": "16:00:00",
 +
                "Name": "А_П::Москва/Вена/AT111, DME-VIE1, 16:00-17:00/C Бизнес класс",
 +
                "TouristCount": 2,
 +
                "Attributes": 0,
 +
                "Type": 1,
 +
                "Brutto": 0.39,
 +
                "NationalBrutto": 35.627825999999999999999999987,
 +
                "TotalBrutto": 0.39,
 +
                "CancellationPolicy": null,
 +
                "BookingAdditionalInfo": null,
 +
                "AppliedCOInfo": [
 +
                    {
 +
                        "IdCostOffer": 41966,
 +
                        "InfoText": null
 +
                    }
 +
                ],
 +
                "AppliedSpecials": null,
 +
                "AppldCostOffers": null,
 +
                "QuotaPlaces": {
 +
                    "PlacesStatus": 4,
 +
                    "FreePlaces": 0,
 +
                    "TotalPlaces": 0
 +
                },
 +
                "TimeLimit": null,
 +
                "BookHash": null
 +
            },
 +
            {
 +
                "ServiceType": 3,
 +
                "Day": 1,
 +
                "DurationInNight": 5,
 +
                "Time": "17:00:00",
 +
                "Name": "HOTEL::Вена/Resort&Spa-5*,5 ночей/2 ADL(\"Капитанский\"1),2 ADL/ПР По программе",
 +
                "TouristCount": 2,
 +
                "Attributes": 0,
 +
                "Type": 1,
 +
                "Brutto": 55.0,
 +
                "NationalBrutto": 5024.4369999999999999999999982,
 +
                "TotalBrutto": 55.0,
 +
                "CancellationPolicy": null,
 +
                "BookingAdditionalInfo": null,
 +
                "AppliedCOInfo": [
 +
                    {
 +
                        "IdCostOffer": 41729,
 +
                        "InfoText": null
 +
                    }
 +
                ],
 +
                "AppliedSpecials": null,
 +
                "AppldCostOffers": null,
 +
                "QuotaPlaces": {
 +
                    "PlacesStatus": 4,
 +
                    "FreePlaces": 0,
 +
                    "TotalPlaces": 0
 +
                },
 +
                "TimeLimit": null,
 +
                "BookHash": null
 +
            },
 +
            {
 +
                "ServiceType": 1,
 +
                "Day": 6,
 +
                "DurationInNight": 1,
 +
                "Time": "20:00:00",
 +
                "Name": "А_П::Вена/Москва/AT333, VIE1-DME, 20:00-02:00/Y Экономический класс",
 +
                "TouristCount": 2,
 +
                "Attributes": 0,
 +
                "Type": 1,
 +
                "Brutto": 30.0,
 +
                "NationalBrutto": 2740.601999999999999999999999,
 +
                "TotalBrutto": 30.0,
 +
                "CancellationPolicy": null,
 +
                "BookingAdditionalInfo": null,
 +
                "AppliedCOInfo": [
 +
                    {
 +
                        "IdCostOffer": 12371,
 +
                        "InfoText": null
 +
                    }
 +
                ],
 +
                "AppliedSpecials": null,
 +
                "AppldCostOffers": null,
 +
                "QuotaPlaces": {
 +
                    "PlacesStatus": 4,
 +
                    "FreePlaces": 0,
 +
                    "TotalPlaces": 0
 +
                },
 +
                "TimeLimit": null,
 +
                "BookHash": null
 +
            }
 +
        ]
 +
    },
 +
    "TourName": "Общая проверка системы_зелсофт",
 +
    "BookingConditions": "<p><strong>Условия бронирования</strong></p>\n<p>Сразу же после получения Вашей заявки и обсуждения всех деталей, мы вышлем Вам счет-фактуру на безвозвратный депозит. После получения депозита в размере 50-100 евро (в зависимости от стоимости тура) на человека, Вы получите Тур Ваучер, подтверждающий все детали и условия поездки в Армению</p>\n<p><strong>Условия оплаты</strong></p>\n<p>После бронирования тура необходимо внести безвозвратный депозит в размере 50-100 евро, что обеспечит нашим координаторам возможность начать организацию поездки (бронирование гостиницы, питание, транспорт и т.п.). При покупки тура с авиабилетом, предоплата составит 80% от стоимости всего тура.</p>\n<p>Оставшуюся сумму Вы можете выплатить после Вашего прибытия в страну.</p>\n<p>Мы оставляем за собой право отменить бронирование, если платежи не будут произведены в установленные сроки.</p>\n<p><strong>Форма оплаты</strong></p>\n<p>Предоплату можно внести одним из следующих способов:</p>\n<ul>\n<li>Банковский перевод</li>\n<li>Кредитная карта (при оплате посредством кредитной карты, сервис взимает 3% от общей суммы)</li>\n</ul>\n<p>Окончательный платеж может быть осуществлен следующими способами:</p>\n<ul>\n<li>Оплата наличными (при оплате наличными Вы получаете скидку в размере 2% от общей суммы)</li>\n<li>Кредитная карта (при оплате посредством кредитной карты, сервис взимает 3% от общей суммы)</li>\n</ul>\n<p>&nbsp;</p>\n<p><strong>Условия аннуляции тура&nbsp;</strong></p>\n<p>Если Вы или один из членов Вашей группы желает отменить тур, сообщите об этом нашей компании, как можно скорее в письменной форме.&nbsp;Пожалуйста, обратите внимание, что в данном случае предоплата (200 евро) не подлежит возмещению, но Вы сможете использовать ее в течении всего года и заказать другой тур. В этом случае наша фирма будет вынуждена взять с Вас дополнительные 100 евро для повторного бронирования отеля.</p>",
 +
    "EndDate": "2024-03-30T00:00:00",
 +
    "DurationInNights": 5,
 +
    "NationalCurrency": "рб",
 +
    "NationalRate": {
 +
        "Id": 14,
 +
        "Code": "рб",
 +
        "IsoCode": "RUB",
 +
        "Symbol": "₽"
 +
    },
 +
    "Rate": {
 +
        "Id": 1,
 +
        "Code": "$",
 +
        "IsoCode": "USD",
 +
        "Symbol": "$"
 +
    },
 +
    "TimeLimit": null,
 +
    "TariffDescription": {
 +
        "flightId": null,
 +
        "universalParametrsSequence": null,
 +
        "price": 0.0,
 +
        "deltaPrice": 0.0,
 +
        "segments": null
 +
    },
 +
    "Baggage": "",
 +
    "CarryOnBaggage": "",
 +
    "HasRealCourses": true
 +
}
 +
 
 +
</syntaxhighlight>
 +
</TD></TR></TABLE>
 +
</div></div><br />
 +
Далее формируем запрос метода CreateReservation.</br>
 +
Вызываем http://localhost:9000/TourSearchOwin/CreateReservation/1 </br>
 +
С телом запроса, которое мы построим из предыдущего результат + данные о туристе.</br>
 +
<syntaxhighlight lang="java" enclose="div">
 +
{
 +
    "TourProgramId": 100011540,
 +
    "BeginDate": "2024-03-24T00:00:00",
 +
    "Duration": 7,
 +
    "Currency": "$",
 +
    "Services": [
 +
        {
 +
            "Service": {
 +
                "ServiceType": 3,
 +
                "Code": 112322,
 +
                "SubCode1": 1082739,
 +
                "SubCode2": 39,
 +
                "Packet": 779,
 +
                "Partner": 12667,
 +
                "Day": 1,
 +
                "DurationInNight": 5,
 +
                "City": 35,
 +
                "Country": 90,
 +
                "Attributes": 0,
 +
                "IsRemovable": false,
 +
                "Type": 1,
 +
                "IsHooded": false,
 +
                "IsNotCalculated": false,
 +
                "BeginDateTimeString": "2024-03-24T17:00:00",
 +
                "EndDateTimeString": "2024-03-29T17:00:00",
 +
                "TemplateId": 1,
 +
                "Cost": 0,
 +
                "ByPax": false,
 +
                "QuotaStatus": {
 +
                    "PlacesStatus": 4,
 +
                    "FreePlaces": 0,
 +
                    "IsFewPlaces": false
 +
                },
 +
                "Index": 1,
 +
                "IsRoute": true,
 +
                "ServiceTemplateIndex": 1,
 +
                "RemoteId": null,
 +
                "IsCommission": true,
 +
                "BaseFlightsParams": [
 +
                    {
 +
                        "CityArrival": 35,
 +
                        "FlightCode": 773,
 +
                        "TariffKey": 67,
 +
                        "PartnerId": 10760
 +
                    },
 +
                    {
 +
                        "CityArrival": 1,
 +
                        "FlightCode": 1059,
 +
                        "TariffKey": 89,
 +
                        "PartnerId": 10760
 +
                    }
 +
                ]
 +
            },
 +
            "TouristNumbersList": [
 +
                1,
 +
                2
 +
            ]
 +
        },
 +
        {
 +
            "Service": {
 +
                "ServiceType": 1,
 +
                "Code": 773,
 +
                "SubCode1": 67,
 +
                "SubCode2": 1,
 +
                "Packet": 779,
 +
                "Partner": 10760,
 +
                "Day": 1,
 +
                "DurationInNight": 0,
 +
                "City": 35,
 +
                "Country": 90,
 +
                "Attributes": 0,
 +
                "IsRemovable": false,
 +
                "Type": 1,
 +
                "IsHooded": false,
 +
                "IsNotCalculated": false,
 +
                "BeginDateTimeString": "2024-03-24T16:00:00",
 +
                "EndDateTimeString": "2024-03-24T17:00:00",
 +
                "TemplateId": 3,
 +
                "Cost": 0,
 +
                "ByPax": true,
 +
                "QuotaStatus": {
 +
                    "PlacesStatus": 4,
 +
                    "FreePlaces": 0,
 +
                    "IsFewPlaces": false
 +
                },
 +
                "Index": 0,
 +
                "IsRoute": true,
 +
                "ServiceTemplateIndex": 0,
 +
                "IsCommission": true,
 +
                "BaseFlightsParams": [
 +
                    {
 +
                        "CityArrival": 35,
 +
                        "FlightCode": 773,
 +
                        "TariffKey": 67,
 +
                        "PartnerId": 10760
 +
                    },
 +
                    {
 +
                        "CityArrival": 1,
 +
                        "FlightCode": 1059,
 +
                        "TariffKey": 89,
 +
                        "PartnerId": 10760
 +
                    }
 +
                ]
 +
            },
 +
            "TouristNumbersList": [
 +
                1,
 +
                2
 +
            ]
 +
        },
 +
        {
 +
            "Service": {
 +
                "ServiceType": 1,
 +
                "Code": 1059,
 +
                "SubCode1": 89,
 +
                "SubCode2": 35,
 +
                "Packet": 779,
 +
                "Partner": 10760,
 +
                "Day": 6,
 +
                "DurationInNight": 1,
 +
                "City": 1,
 +
                "Country": 460,
 +
                "Attributes": 0,
 +
                "IsRemovable": false,
 +
                "Type": 1,
 +
                "IsHooded": false,
 +
                "IsNotCalculated": false,
 +
                "BeginDateTimeString": "2024-03-29T20:00:00",
 +
                "EndDateTimeString": "2024-03-30T02:00:00",
 +
                "TemplateId": 4,
 +
                "Cost": 0,
 +
                "ByPax": true,
 +
                "QuotaStatus": {
 +
                    "PlacesStatus": 4,
 +
                    "FreePlaces": 0,
 +
                    "IsFewPlaces": false
 +
                },
 +
                "Index": 2,
 +
                "IsRoute": true,
 +
                "ServiceTemplateIndex": 2,
 +
                "IsCommission": true,
 +
                "BaseFlightsParams": [
 +
                    {
 +
                        "CityArrival": 35,
 +
                        "FlightCode": 773,
 +
                        "TariffKey": 67,
 +
                        "PartnerId": 10760
 +
                    },
 +
                    {
 +
                        "CityArrival": 1,
 +
                        "FlightCode": 1059,
 +
                        "TariffKey": 89,
 +
                        "PartnerId": 10760
 +
                    }
 +
                ]
 +
            },
 +
            "TouristNumbersList": [
 +
                1,
 +
                2
 +
            ]
 +
        }
 +
    ],
 +
    "Tourists": [
 +
        {
 +
            "IsMain": true,
 +
            "Number": 1,
 +
            "AgeType": 0,
 +
            "MaleFemaleSex": 0,
 +
            "FirstName": "DJON",
 +
            "LastName": "SNOW",
 +
            "Patronymic": "",
 +
            "EnableSmsNotifications": true,
 +
            "Howdidyouhear": "Магия",
 +
            "Residenceregion": "Волгоград",
 +
            "FirstNameRus": "",
 +
            "LastNameRus": "",
 +
            "PatronymicRus": "",
 +
            "InternationalPassportSeries": "",
 +
            "InternationalPassportNumber": "",
 +
            "InternationalPassportDateOfIssue": "",
 +
            "InternationalPassportDateOfIssueString": "",
 +
            "InternationalPassportDateOfExpiry": "",
 +
            "InternationalPassportDateOfExpiryString": "",
 +
            "internationalPassportByWhom": "",
 +
            "PassportSeries": "",
 +
            "PassportNumber": "",
 +
            "PassportDateOfIssue": "",
 +
            "PassportDateOfIssueString": "",
 +
            "PassportByWhom": "",
 +
            "Citizenship": "Россия",
 +
            "Phone": "",
 +
            "Email": "",
 +
            "BirthDay": "1994-05-29T20:00:00.000Z",
 +
            "BirthDayString": "30.05.1994",
 +
            "BirthPlace": "",
 +
            "CitizenID": "",
 +
            "Age": 29
 +
        },
 +
        {
 +
            "IsMain": false,
 +
            "Number": 2,
 +
            "AgeType": 0,
 +
            "MaleFemaleSex": 0,
 +
            "FirstName": "DJON",
 +
            "LastName": "SNOW",
 +
            "Patronymic": "",
 +
            "EnableSmsNotifications": true,
 +
            "Howdidyouhear": "Магия",
 +
            "Residenceregion": "Волгоград",
 +
            "FirstNameRus": "",
 +
            "LastNameRus": "",
 +
            "PatronymicRus": "",
 +
            "InternationalPassportSeries": "",
 +
            "InternationalPassportNumber": "",
 +
            "InternationalPassportDateOfIssue": "",
 +
            "InternationalPassportDateOfIssueString": "",
 +
            "InternationalPassportDateOfExpiry": "",
 +
            "InternationalPassportDateOfExpiryString": "",
 +
            "internationalPassportByWhom": "",
 +
            "PassportSeries": "",
 +
            "PassportNumber": "",
 +
            "PassportDateOfIssue": "",
 +
            "PassportDateOfIssueString": "",
 +
            "PassportByWhom": "",
 +
            "Citizenship": "Россия",
 +
            "Phone": "",
 +
            "Email": "",
 +
            "BirthDay": "1994-05-29T20:00:00.000Z",
 +
            "BirthDayString": "30.05.1994",
 +
            "BirthPlace": "",
 +
            "CitizenID": "",
 +
            "Age": 29
 +
        }
 +
    ],
 +
    "TechnicalProblemsDuringUpdateFlights": false,
 +
    "TimeLimit": null,
 +
    "DogovorComment": "",
 +
    "BranchId": 12850,
 +
    "OwnerId": 0,
 +
    "Day": "день",
 +
    "Day2": "дня",
 +
    "Days": "дней",
 +
    "Night": "ночь",
 +
    "Night2": "ночи",
 +
    "Nights": "ночей",
 +
    "adultsCountOverServiceLimit": "Количество взрослых туристов превышает лимит услуги",
 +
    "incorrectChildrenInf": "Возраст детей не соответствует допустимому в выбранном варианте размещения (см. Услуги: Проживание)",
 +
    "BookingHash": null
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 
</TD></TR></TABLE>
 
</TD></TR></TABLE>
 
</div></div><br />
 
</div></div><br />
 +
Результатом работы метода будет код путевки и ссылка для перехода в личный кабинет MasterWeb.</br>
 +
[[Файл: Ea_495.png|600px]]</br>
 +
 +
==Приложения==
 +
 +
===Приложение 1: параметры услуги (ServiceType, Code, SubCode1, SubCode2)===
 +
 +
Параметры ''ServiceType'' – это ключ типа услуги, ''Сode'' – ключ услуги, ''SubCode1'' и ''SubCode2'', возвращаемые при API-запросах – это параметры дополнительных описаний двух типов, индивидуальных для каждой услуги.
 +
 +
{| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse" width="1500px"
 +
 +
|- style="background-color:#F2F2F2"
 +
 +
! width="9%" | Ключ типа услуги (ServiceType)
 +
! width="13%" | Наименование типа услуги
 +
! width="13%" | Ключ услуги (Code)
 +
! width="13%" | Доп. описание 1 (SubCode1)
 +
! width="13%" | Таблица БД со значениями SubCode1
 +
! width="13%" | Доп. описание 2 (SubCode2)
 +
! width="13%" | Таблица БД со значениями SubCode2
 +
 +
|- style="vertical-align:text-top"
 +
 +
| 1
 +
| Авиаперелет
 +
| индивидуальный ключ услуги
 +
| Тариф
 +
| AirService
 +
| отсутствует
 +
| отсутствует
 +
 +
|- style="vertical-align:text-top"
 +
 +
| 2
 +
| Трансфер
 +
| индивидуальный ключ услуги
 +
| Вид транспорта
 +
| Transport
 +
| отсутствует
 +
| отсутствует
 +
 +
|- style="vertical-align:text-top"
 +
 +
| 3
 +
| Отель/Круиз
 +
| индивидуальный ключ услуги
 +
| Вид проживания (Тип номера + Категория номера + Тип размещения)
 +
| HotelRooms (Rooms + RoomCategory + Accmdmentype)
 +
| Тип питания
 +
| Pansion
 +
 +
|- style="vertical-align:text-top"
 +
 +
| 4
 +
| Экскурсия
 +
| индивидуальный ключ услуги
 +
| Вид транспорта
 +
| Transport
 +
| отсутствует
 +
| отсутствует
 +
 +
|- style="vertical-align:text-top"
 +
 +
| 5
 +
| Виза
 +
| индивидуальный ключ услуги
 +
| отсутствует
 +
| отсутствует
 +
| отсутствует
 +
| отсутствует
 +
 +
|- style="vertical-align:text-top"
 +
 +
| 6
 +
| Страховка
 +
| индивидуальный ключ услуги
 +
| Доп. описание 1
 +
| AddDescript1
 +
| Доп. описание 2
 +
| AddDescript2
 +
 +
|- style="vertical-align:text-top"
 +
 +
| 8
 +
| Доп услуга в отеле/круизе
 +
| индивидуальный ключ услуги
 +
| Вид проживания (Тип номера + Категория номера + Тип размещения)
 +
| HotelRooms (Rooms + RoomCategory + Accmdmentype)
 +
| Доп. описание 2
 +
| AddDescript2
 +
 +
|- style="vertical-align:text-top"
 +
 +
| 14
 +
| Автобусный переезд
 +
| индивидуальный ключ услуги
 +
| Место посадки
 +
| BusTransferPoints
 +
| Вид транспорта
 +
| Transport
 +
 +
|- style="vertical-align:text-top"
 +
 +
| 99
 +
| Любая пользовательская услуга
 +
| индивидуальный ключ услуги
 +
| Доп. описание 1
 +
| AddDescript1
 +
| Доп. описание 2
 +
| AddDescript2
 +
 +
|}
  
 
[[Category:Мастер-Тур(15)]]
 
[[Category:Мастер-Тур(15)]]

Текущая версия на 16:12, 20 ноября 2024

Версия статьи от 20-11-2024.

Поддерживаемые версии ПК «Мастер-Тур»:
Начиная с 15 версии


Содержание

Введение

Данный web-сервис разработан для отдачи цен во внешние поисковые системы и выполняет следующие задачи:

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

Выдача результатов осуществляется в формате JSON

Установка

Для работы с web-сервисом необходимо на отдающей стороне установить службу поиска.
После установки web-сервис будет доступен по адресу http://значение настройки "serviceAddress" в TourSearchOwin/searchApi?action="название метода" (пример: http://localhost:9000/TourSearchOwin/searchApi?action=GetCountries)

Для поддержки систем с большой нагрузкой можно использовать сторонние "балансировщики нагрузки".
Пример настройки балансировщика HaProxy.

Загрузка справочников

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

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

  • Формат запроса:
    •  ?action=GetCountries
  • Принимаемые параметры:
    • id – идентификатор страны (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
  • Возвращаемый результат:
    • id – идентификатор страны
    • name – название страны (рус)
    • lname – название страны (анг)
Пример

Вызов метода GetCountries

http://localhost:9000/TourSearchOwin/searchApi?action=GetCountries

Возвращаемый результат метода GetCountries (в формате JSON)

{
   "version": "1.08",
   "countries":    [
            {
         "id": 97,
         "name": "Тунис",
         "lname": "Tunisia"
      },            
            {
         "id": 90,
         "name": "Австрия",
         "lname": "Австрия"
      },
            {
         "id": 30,
         "name": "Франция",
         "lname": "France"
      }            
   ]
}


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

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

  • Формат запроса:
    •  ?action=GetDepartCities
  • Принимаемые параметры:
    • id – идентификатор города вылета (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
  • Возвращаемый результат:
    • id – идентификатор города
    • name – название города (рус)
    • lname – название города (анг)
    • countriesTo – идентификаторы стран, которые присутствуют в данном городе вылета
    • countryId – идентификатор страны города вылета
    • countryName – название страны города вылета
    • countryCode – код страны города вылета
Пример

Вызов метода GetDepartCities

http://localhost:9000/TourSearchOwin/searchApi?action=GetDepartCities

Возвращаемый результат метода GetDepartCities (в формате JSON)

{
   "version": "1.08",
   "departCities":    [
            {
         "id": -1,
         "name": "Без перелета",
         "lname": "No flights",
         "countriesTo":          [
            97,
            90
         ],
         "countryId": -1,
         "countryName": "",
         "countryCode": ""
      },
            {
         "id": 1,
         "name": "Москва",
         "lname": "Moscow",
         "countriesTo":          [
            90,
            30
         ],
         "countryId": 460,
         "countryName": "Россия",
         "countryCode": "RUS"
      }
   ]
}


Выгрузка списка городов (GetResorts)

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

  • Формат запроса:
    •  ?action=GetResorts
  • Принимаемые параметры:
    • id – идентификатор города (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
  • Возвращаемый результат:
    • id – идентификатор города
    • name – название города (рус)
    • lname – название города (анг)
    • countryId – идентификатор страны, в котором расположен город
Пример

Вызов метода GetResorts

http://localhost:9000/TourSearchOwin/searchApi?action=GetResorts

Возвращаемый результат метода GetResorts (в формате JSON)

{
   "version": "1.08",
   "resorts":    [
            {
         "id": 1,
         "name": "Каринтия",
         "lname": "Carinthia",
         "countryId": 90
      },           
            {
         "id": 42,
         "name": "Хаммамед",
         "lname": "Hammamet",
         "countryId": 97
      },
            {
         "id": 40,
         "name": "Сусс",
         "lname": "Sousse",
         "countryId": 97
      }           
   ]
}



Выгрузка типов тура (GetTourTypes) начиная с релиза 15.4

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

  • Формат запроса:
    •  ?action=GetTourTypes
  • Принимаемые параметры:
    • id – идентификатор типа тура (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
  • Либо
    • departureCityIds * – идентификатор города(ов) отправления (из метода GetDepartCities)
    • countryId * – идентификатор страны прибытия (из метода GetCountries)
    • resortIds * – идентификатор города(ов) прибытия (из метода GetResorts), при значении -1 будут переданы все города в рамках данной страны
  • Возвращаемый результат:
    • id – идентификатор типа тура
    • name – название типа тура
Пример

Вызов метода GetTourTypes

http://localhost:9000/TourSearchOwin/searchApi?action=GetTourTypes&departureCityIds=1&countryId=90&resortIds=-1

Возвращаемый результат метода GetTourTypes (в формате JSON)

{
   "version": "1.08",
   "TourTypes":    [
            {
         "id": 1,
         "name": "Стандартный тур"
      },           
            {
         "id": 5,
         "name": "Экскурсионный тур",
         "lname": "Hammamet"
      },
            {
         "id": 40,
         "name": "Пляжный отдых"
      }           
   ]
}



Выгрузка актуальных дат заездов (GetDates) начиная с релиза 15.4

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

  • Формат запроса:
    •  ?action=GetDates
  • Принимаемые параметры:
    • departureCityIds * – идентификатор города(ов) отправления (из метода GetDepartCities)
    • countryId * – идентификатор страны прибытия (из метода GetCountries)
    • resortIds * – идентификатор города(ов) прибытия (из метода GetResorts), при значении -1 будут переданы все города в рамках данной страны
    • tourTypeIds * – идентификатор типа(ов) тура (из метода GetTourTypes), при значении -1 будут переданы все типы тура в рамках данной страны
  • Возвращаемый результат:
    • массив актуальных дат заезда в формате dd.MM.yyyy
Пример

Вызов метода GetDates

http://localhost:9000/TourSearchOwin/searchApi?action=GetDates&departureCityIds=1&countryId=90&resortIds=-1&tourTypeIds=22

Возвращаемый результат метода GetDates (в формате JSON)

{
   "version": "1.08",
   "dates":    [
      "01.08.2019",
      "02.08.2019",
      "03.08.2019",
      "04.08.2019",
      "05.08.2019",
      "06.08.2019",
      "07.08.2019",
      "08.08.2019",
      "09.08.2019",
      "10.08.2019"   
   ]
}



Выгрузка актуальных продолжительностей (GetDurations) начиная с релиза 15.4

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

  • Формат запроса:
    •  ?action=GetDurations
  • Принимаемые параметры:
    • departureCityIds * – идентификатор города(ов) отправления (из метода GetDepartCities)
    • countryId * – идентификатор страны прибытия (из метода GetCountries)
    • resortIds * – идентификатор города(ов) прибытия (из метода GetResorts), при значении -1 будут переданы все города в рамках данной страны
    • tourTypeIds * – идентификатор типа(ов) тура (из метода GetTourTypes), при значении -1 будут переданы все типы тура в рамках данной страны
    • tourDates * – массив дат заездов в формате dd.MM.yyyy (из метода GetDates)
  • Возвращаемый результат:
    • durations – массив актуальных продолжительностей (в днях)
    • durationType – тип продолжительности: 0 – в днях тура, 1 – в ночах тура, 2 – в ночах проживания в отеле.
Пример

Вызов метода GetDurations

http://localhost:9000/TourSearchOwin/searchApi?action=GetDurations&departureCityIds=1&countryId=90&resortIds=-1&tourTypeIds=22&tourDates=22.05.2019,28.05.2019

Возвращаемый результат метода GetDurations (в формате JSON)

{
   "version": "1.08",
   "durations":    [
      8,
      9,
      10,
      11,
      12,
      13,
      14  
   ],
   "durationType": 0
}


Выгрузка программ туров (GetTourPrograms) начиная с релиза 15.4

Метод возвращает список актуальных для поиска программ туров

  • Формат запроса:
    •  ?action=GetTourPrograms
  • Принимаемые параметры:
    • id * – идентификатор программы тура (обязательный, передача в запрос нескольких id не обрабатывается, в этом случае возвращается ошибка. Если указан, то запрашивается только одна запись)
  • Либо
    • departureCityIds * – идентификатор города(ов) отправления (из метода GetDepartCities)
    • countryId * – идентификатор страны прибытия (из метода GetCountries)
    • resortIds * – идентификатор города(ов) прибытия (из метода GetResorts), при значении -1 передается город отправления "Без перелета"
    • tourTypeIds * – идентификатор типа(ов) тура (из метода GetTourTypes), при значении -1 будут переданы все типы тура в рамках данной страны
    • fromDateTime – дата (в формате dd.MM.yyyy HH:mm:ss), начиная с которой будут выгружаться изменения (то есть будут получены только те доступные программы туров, которые изменялись, начиная с указанной даты)
  • Возвращаемый результат:
    • id – ключ программы туров
    • name – название программы туров
    • updateDate – дата последнего изменения программы туров (или связанных с ней компонентов)
    • beginDate – дата начала заездов по программе туров (в формате dd.MM.yyyy)
    • endDate – дата окончания заездов по программе туров (в формате dd.MM.yyyy)
    • tourTypeIds – типы туров для данной программы туров
    • routes – массив возможных маршрутов в данной программе туров
      • departureCountryKey – страна начала поездки (для каждой страны начала поездки в одной программе тура будет отдельный маршрут)
      • departureCityKey – город начала поездки (для каждого города начала поездки в одной программе тура будет отдельный маршрут)
      • destinationCountryKeys – страны по туру (если в туре несколько услуг класса отель и они в разных странах, то будут возвращаться все страны отелей)
      • destinationCityKeys – города по туру (если в туре отели в нескольких городах, то будут возвращаться все города отелей)
Пример

Вызов метода GetTourPrograms

http://localhost:9000/TourSearchOwin/searchApi?action=GetTourPrograms&departureCityIds=1&countryId=90&resortIds=-1&tourTypeIds=22&fromDateTime=22.05.2019 12:00:00

Возвращаемый результат метода GetTourPrograms (в формате JSON)

{
	"version": "1.08",
	"TourPrograms": [{
		"id": 100004493,
		"name": "Автобусный тур",
		"updateDate": "2019-05-20T17:17:02.087",
		"beginDate": "01.06.2019",
		"endDate": "01.08.2019",
		"tourTypeIds": [2,
		22],
		"routes": [{
			"departureCountryId": 460,
			"departureCityId": 1,
			"destinationCountryIds": [90],
			"destinationCityIds": [35]
		}]
	},
	{
		"id": 100005542,
		"name": "Общая проверка системы",
		"updateDate": "2019-05-15T15:54:10.81",
		"beginDate": "01.03.2018",
		"endDate": "15.08.2019",
		"tourTypeIds": [22],
		"routes": [{
			"departureCountryId": 460,
			"departureCityId": 1,
			"destinationCountryIds": [90],
			"destinationCityIds": [35,
			440,
			562]
		}]
	}]
}


Выгрузка списка курортов (GetAreas) начиная с релиза 15.3

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

  • Формат запроса:
    •  ?action=GetAreas
  • Принимаемые параметры:
    • id – идентификатор курорта (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
  • Возвращаемый результат:
    • id – идентификатор курорта
    • name – название курорта (рус)
    • lname – название курорта (анг)
    • countryId – идентификатор страны, в котором расположен курорт
Пример

Вызов метода GetAreas

http://localhost:9000/TourSearchOwin/searchApi?action=GetAreas

Возвращаемый результат метода GetAreas (в формате JSON)

{
   "version": "1.08",
   "areas":    [
            {
         "id": 232,
         "name": "Малина",
         "lname": "Малина",
         "countryId": 90
      },           
            {
         "id": 233,
         "name": "Облако",
         "lname": "Облако",
         "countryId": 90
      },
            {
         "id": 1,
         "name": "Каринтия",
         "lname": "en_Каринтия",
         "countryId": 90
     },
            {
         "id": -1,
         "name": "Без курорта",
         "lname": "",
         "countryId": -1
      }           
   ]
}


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

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

  • Формат запроса:
    •  ?action=GetHotelCategories
  • Принимаемые параметры:
    • id – идентификатор категории отеля (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
  • Возвращаемый результат:
    • id – идентификатор категории отеля
    • name – название категории отеля
    • globalCode – глобальный код категории отеля
Пример

Вызов метода GetHotelCategories

http://localhost:9000/TourSearchOwin/searchApi?action=GetHotelCategories

Возвращаемый результат метода GetHotelCategories (в формате JSON)

{
   "version": "1.08",
   "hotelCategories":    [
            {
         "id": 59,
         "name": "5*"
         "globalCode": "5*"
      },
            {
         "id": 58,
         "name": "4*"
         "globalCode": null
      },
            {
         "id": 57,
         "name": "3*"
         "globalCode": null
      }
   ]
}


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

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

  • Формат запроса:
    •  ?action=GetHotels
  • Принимаемые параметры:
    • id – идентификатор отеля (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
  • Возвращаемый результат:
    • id – идентификатор отеля
    • name – название отеля
    • hotelCategoryId – идентификатор категории отеля
    • hotelCategoryName – название категории отеля
    • resortId – идентификатор города, в котором расположен отель
    • resortName – название города, в котором расположен отель
    • areaId – идентификатор курорта, в котором расположен отель
    • areaName – название курорта, в котором расположен отель
    • address – адрес отеля
    • phone – телефон отеля
    • email – e-mail отеля
    • fax – факс отеля
    • http – адрес в интернете отеля
    • latitude – GPS координаты: географическая широта (обрабатывается с релиза 15.6)
    • longitude – GPS координаты: географическая долгота (обрабатывается с релиза 15.6)
    • timeFrom – заезд в отель (обрабатывается с релиза 15.7)
    • timeTo – выезд из отеля (обрабатывается с релиза 15.7)
    • countryId – идентификатор страны, в которой расположен отель (обрабатывается с релиза 15.9)
    • countryName – название страны, в которой расположен отель (обрабатывается с релиза 15.9)
Пример

Вызов метода GetHotels

http://localhost:9000/TourSearchOwin/searchApi?action=GetHotels

Возвращаемый результат метода GetHotels (в формате JSON)

{
   "version": "1.08",
   "hotels":    [
            {
         "id": 112830,
            "name": "0012",
            "hotelCategoryId": 964,
            "hotelCategoryName": "!!",
            "resortId": 1464,
            "resortName": "Адлер",
            "areaId": 1187,
            "areaName": "Amur Oblast",
            "address": "",
            "phone": "",
            "email": "",
            "fax": "",
            "http": null,
            "latitude": "",
            "longitude": "",
            "timeFrom": "",
            "timeTo": "",
            "countryId": 460,
            "countryName": "Россия"
      },
            {
         "id": 111884,
            "name": "111",
            "hotelCategoryId": 964,
            "hotelCategoryName": "!!",
            "resortId": 35,
            "resortName": "Вена",
            "areaId": -1,
            "areaName": "Без курорта",
            "address": "",
            "phone": null,
            "email": "",
            "fax": null,
            "http": null,
            "latitude": null,
            "longitude": null,
            "timeFrom": "",
            "timeTo": "",
            "countryId": 90,
            "countryName": "Австрия"
      },
            {
         "id": 112827,
            "name": "11111",
            "hotelCategoryId": 964,
            "hotelCategoryName": "!!",
            "resortId": 1313,
            "resortName": "Kazan",
            "areaId": -1,
            "areaName": "Без курорта",
            "address": "",
            "phone": "",
            "email": "",
            "fax": "",
            "http": null,
            "latitude": "",
            "longitude": "",
            "timeFrom": "",
            "timeTo": "",
            "countryId": 6259,
            "countryName": "Russia"
      },
            {
         "id": 12303,
            "name": "4 Barcelona",
            "hotelCategoryId": 964,
            "hotelCategoryName": "!!",
            "resortId": 19,
            "resortName": "Барселона",
            "areaId": -1,
            "areaName": "Без курорта",
            "address": null,
            "phone": null,
            "email": null,
            "fax": null,
            "http": null,
            "latitude": null,
            "longitude": null,
            "timeFrom": "",
            "timeTo": "",
            "countryId": 84,
            "countryName": "Испания"
      }            
   ]
}


Выгрузка описания и изображений отеля (GetHotelInfo) начиная с релиза 15.5

Метод возвращает описания и изображения запрашиваемого отеля.

  • Формат запроса:
    •  ?action=GetHotelInfo
  • Принимаемые параметры:
    • hotelKey * – идентификатор отеля
    • needImages – возвращать ли изображения отеля в ответе: 0 – не возвращать, 1 – возвращать.
    • imageSize – варианты размера возвращаемых изображений. Обрабатывается только если передан параметр needImages = 1 и в этом случае является обязательным параметром. Возможные значения: 0 – small, 1 – medium, 2 – big.
  • Возвращаемый результат:
    • Images – массив изображений отеля
      • Key – ключ изображения
      • Description – описание изображения отеля
      • Priority – приоритет изображения
      • Image – изображение в byte array
    • Country – страна отеля
    • City – город отеля
    • Name – название отеля
    • HotelCategoryName – название категории отеля
    • Address – адрес отеля
    • Phone – телефон отеля
    • Email – e-mail отеля
    • Http – адрес в интернете отеля
    • Description – описание
    • InfrastructureHotel – инфраструктура отеля
    • RecreationSport – развлечение и спорт
    • Beach – пляж
    • Healing – лечение
    • Excursion – экскурсии
    • AdditionalService – дополнительные услуги
    • ForChildren – для детей
    • AddCost – доплаты
    • checkInTime – время заезда в отель (обрабатывается с релиза 15.6)
    • checkOutTime – время выезда из отеля (обрабатывается с релиза 15.6)
    • latitude – GPS координаты: географическая широта (обрабатывается с релиза 15.6)
    • longitude – GPS координаты: географическая долгота (обрабатывается с релиза 15.6)
Пример

Вызов метода GetHotelInfo

http://localhost:9000/TourSearchOwin/searchApi?action=GetHotelInfo&hotelKey=8659&needImages=1&imageSize=2

Возвращаемый результат метода GetHotelInfo (в формате JSON)

{
   "version": "1.08",
   "hotelInfoAndPhoto":    {
      "Images":       [
                  {
            "Key": 2618,
            "Description": "Общий вид отеля",
            "Priority": 1,
            "Image": "iVBORw0KGgoAAAANSUhEUgAAARUAAAC0CAYAAAC62bgdSR0IArs4c6QAAAARnQU1BAA....."
         },
                  {
            "Key": 2786,
            "Description": "Вид на бассейн",
            "Priority": 2,
            "Image": "/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw.....="
         }
      ],
      "Country": "Австрия",
      "City": "Вена",
      "Name": "ContinentalSun",
      "HotelCategoryName": "HV",
      "Address": "Ул. Пушкина, 100, Вена, Австрия",
      "Phone": "+79991234567",
      "Email": "sun@sun.com",
      "Http": "www.sun.ru",
      "Description": "<p>Описание<\/p>",
      "InfrastructureHotel": "<p>Инфраструктура отеля<\/p>",
      "RecreationSport": "<p>Развлечение и спорт<\/p>",
      "Beach": "<p>Пляж<\/p>",
      "Healing": "<p>Лечение<\/p>",
      "Excursion": "<p>Экскурсии<\/p>",
      "AdditionalService": "<p>Дополнительные услуги<\/p>",
      "ForChildren": "<p>Для детей<\/p>",
      "AddCost": "<p>Доплата<\/p>",
      "checkInTime": null,
      "checkOutTime": null,
      "latitude": null,
      "longitude": null
   }
}


Выгрузка списка типов номеров (GetRooms) начиная с релиза 15.3

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

  • Формат запроса:
    •  ?action=GetRooms
  • Принимаемые параметры:
    • id – идентификатор типа номера (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
  • Возвращаемый результат:
    • id – идентификатор типа номера
    • code – код типа номера
    • name – название типа номера
    • mainplaces – количество основных мест
    • extraplaces – количество дополнительных мест
Пример

Вызов метода GetRooms

http://localhost:9000/TourSearchOwin/searchApi?action=GetRooms

Возвращаемый результат метода GetRooms (в формате JSON)

{
   "version": "1.08",
   "rooms":    [
            {
         "id": 129,
         "code": "DBL",
         "name": "DBL",
         "mainplaces": 2,
         "extraplaces": 1
      },
            {
         "id": 175,
         "code": "DBL+CHD",
         "name": "DBL+CHD",
         "mainplaces": null,
         "extraplaces": null
      },
            {
         "id": 132,
         "code": "DBL+EXB",
         "name": "DBL+EXB",
         "mainplaces": 2,
         "extraplaces": 4
      },
            {
         "id": 2,
         "code": "Double1",
         "name": "Double2",
         "mainplaces": 2,
         "extraplaces": 3
      },
            {
         "id": 133,
         "code": "SNGL",
         "name": "SNGL",
         "mainplaces": null,
         "extraplaces": null
      },
            {
         "id": 54,
         "code": "SNGL+2 Child ",
         "name": "Sngl+2 Child",
         "mainplaces": 1,
         "extraplaces": 0
      },
            {
         "id": 173,
         "code": "TPL",
         "name": "TPL",
         "mainplaces": null,
         "extraplaces": null
      }      
   ]
}


Выгрузка списка типов номеров (GetRoomTypes) начиная с релиза 15.3

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

  • Формат запроса:
    •  ?action=GetRoomTypes
  • Принимаемые параметры:
    • id – идентификатор категории номера (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
  • Возвращаемый результат:
    • id – идентификатор категории номера
    • code – код категории номера
    • name – название категории номера
Пример

Вызов метода GetRoomTypes

http://localhost:9000/TourSearchOwin/searchApi?action=GetRoomTypes

Возвращаемый результат метода GetRoomTypes (в формате JSON)

{
   "version": "1.08",
   "roomTypes":    [
            {
         "id": 4129,
         "code": "Cottage Premier Deluxe",
         "name": "Cottage Premier Deluxe"
      },
             {
         "id": 39,
         "code": "Deluxe",
         "name": "Deluxe"
      },
            {
         "id": 2711,
         "code": "Luxe",
         "name": "Luxe"
      },
            {
         "id": 4470,
         "code": "Standard Room",
         "name": "Standard Room"
      }
   ]
}


Выгрузка списка типов размещения (GetHtPlaces) начиная с релиза 15.3

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

  • Формат запроса:
    •  ?action=GetHtPlaces
  • Принимаемые параметры:
    • id – идентификатор типа размещения (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
  • Возвращаемый результат:
    • id – идентификатор типа размещения
    • code – код типа размещения
    • name – название типа размещения
    • adultmainplaces – количество основных мест для взрослых
    • adultextraplaces – количество дополнительных мест для взрослых
    • childtmainplaces – количество основных мест для детей
    • childextraplaces – количество дополнительных мест для детей
    • mainplaces – общее количество основных мест для взрослых и детей
    • extraplaces – общее количество дополнительных мест для взрослых и детей
    • childAges – коллекция возможных возрастов детей в размещении (указывается полный возраст, то есть 12 - это 12,99)
      • from – нижняя граница возраста первого ребенка
      • to – верхняя граница возраста первого ребенка
      • from – нижняя граница возраста второго ребенка
      • to – верхняя граница возраста второго ребенка
Пример

Вызов метода GetHtPlaces

http://localhost:9000/TourSearchOwin/searchApi?action=GetHtPlaces

Возвращаемый результат метода GetHtPlaces (в формате JSON)

{
   "version": "1.08",
   "hotelPlaces":    [
            {
         "id": 1239,
         "code": "1 ADL",
         "name": "1 ADL",
         "adultmainplaces": 1,
         "adultextraplaces": 0,
         "childtmainplaces": 0,
         "childextraplaces": 0,
         "mainplaces": 1,
         "extraplaces": 0,
         "childAges":          [
                        {
               "from": null,
               "to": null
            },
                        {
               "from": null,
               "to": null
            }
         ]
      },
            {
         "id": 1372,
         "code": "2 ad + child (0-0.99)",
         "name": "2 ad + child (0-0.99)",
         "adultmainplaces": 2,
         "adultextraplaces": 0,
         "childtmainplaces": 0,
         "childextraplaces": 1,
         "mainplaces": 2,
         "extraplaces": 1,
         "childAges":          [
                        {
               "from": 0,
               "to": 1
            },
                        {
               "from": null,
               "to": null
            }
         ]
      },
            {
         "id": 1157,
         "code": "2 ad + child (2-4.99)",
         "name": "2 ad + child (2-4.99)",
         "adultmainplaces": 2,
         "adultextraplaces": 0,
         "childtmainplaces": 0,
         "childextraplaces": 1,
         "mainplaces": 2,
         "extraplaces": 1,
         "childAges":          [
                        {
               "from": 2,
               "to": 4
            },
                        {
               "from": null,
               "to": null
            }
         ]
      },
            {
         "id": 1238,
         "code": "2 ADL",
         "name": "2 ADL",
         "adultmainplaces": 2,
         "adultextraplaces": 0,
         "childtmainplaces": 0,
         "childextraplaces": 0,
         "mainplaces": 2,
         "extraplaces": 0,
         "childAges":          [
                        {
               "from": null,
               "to": null
            },
                        {
               "from": null,
               "to": null
            }
         ]
      }
   ]
}


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

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

  • Формат запроса:
    •  ?action=GetMeals
  • Принимаемые параметры:
    • id – идентификатор типа питания (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
  • Возвращаемый результат:
    • id – идентификатор типа питания
    • name – название типа питания
    • code – код типа питания
    • globalCode – глобальный код типа питания
Пример

Вызов метода GetMeals

http://localhost:9000/TourSearchOwin/searchApi?action=GetMeals

Возвращаемый результат метода GetMeals (в формате JSON)

{
   "version": "1.08",
   "meals":    [
            {
         "id": 1,
         "name": "Пансион"
         "code": "HB",
         "globalCode": "HB"
      },
            {
         "id": 2,
         "name": "Полупансион"
         "code": "FB",
         "globalCode": null
      },
            {
         "id": 4,
         "name": "Завтрак буфет"
         "code": "BB",
         "globalCode": null
      },
            {
         "id": 11,
         "name": "Шведский стол"
         "code": "UAI",
         "globalCode": "AI"
      }
   ]
}


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

Метод возвращает список используемых валют.

  • Формат запроса:
    •  ?action=GetCurrencies
  • Принимаемые параметры:
    • id – идентификатор валюты (опциональный, передача в запрос нескольких id не обрабатывается, в этом случае возвращаются все результаты. Если указан, то запрашивается только одна запись)
  • Возвращаемый результат:
    • id – идентификатор валюты
    • name – название валюты
Пример

Вызов метода GetCurrencies

http://localhost:9000/TourSearchOwin/searchApi?action=GetCurrencies

Возвращаемый результат метода GetCurrencies (в формате JSON)

{
   "version": "1.08",
   "currencies":    [
            {
         "id": 1,
         "name": "USD"
      },
            {
         "id": 2,
         "name": "EUR"
      },
            {
         "id": 3,
         "name": "RUR"
      },
            {
         "id": 9,
         "name": "UAH"
      }
   ]
}



Выгрузка курсов валют (GetCurrencyRates)

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

  • Формат запроса:
    •  ?action=GetCurrencyRates
  • Принимаемые параметры:
    • dateFrom – начальная дата, от которой вывести список курсов валют, в формате DD.MM.YYYY, не обязательный параметр
    • dateTo – конечная дата, до которой вывести список курсов валют, в формате DD.MM.YYYY, не обязательный параметр
  • Возвращаемый результат:
    • baseCurrencyId – идентификатор национальной валюты, либо произвольной валюты, указанной в настройке basketCurrency в конфигурационном файле (обрабатывается с релиза 15.6)
    • currencyId – идентификатор валюты, курс которой приводится
    • rate – курс валюты (отношение currencyId к baseCurrencyId)
    • date – дата, на которую был зарегистрирован выводимый курс валюты
Пример

Вызов метода GetCurrencyRates

http://localhost:9000/TourSearchOwin/searchApi?action=GetCurrencyRates&dateFrom=18.09.2024&dateTo=19.09.2024

Возвращаемый результат метода GetCurrencyRates (в формате JSON)

{
    "version": "1.08",
    "currencyRates": [
        {
            "BaseCurrencyId": 14,
            "CurrencyId": 1,
            "Rate": 91.429200,
            "Date": "18.09.2024"
        },
        {
            "BaseCurrencyId": 14,
            "CurrencyId": 2,
            "Rate": 101.505700,
            "Date": "18.09.2024"
        },
        {
            "BaseCurrencyId": 14,
            "CurrencyId": 1,
            "Rate": 91.671200,
            "Date": "19.09.2024"
        },
        {
            "BaseCurrencyId": 14,
            "CurrencyId": 2,
            "Rate": 102.039000,
            "Date": "19.09.2024"
        }
    ]
}


Поиск туров (GetTours)

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

  • Формат запроса:
    •  ?action=GetTours&count=int&countryId=int&departCityId=int&dateFrom=date&dateTo=date&adults=int&kids=int&nightsMin=int&nightsMax=int&currencyId=int
  • Принимаемые параметры ( * – обязательный):
    • offerId – уникальный идентификатор ранее найденного предложения. В случае, если данный параметр задан, все остальные параметры не обязательны и не принимаются в расчет, метод возвращает одну запись.
    • count * – максимальное количество предложений в выдаче.
    • countryId * – идентификатор страны.
    • departCityId * – идентификатор города вылета.
    • dateFrom * – начальная дата в диапазоне дат вылета в формате dd.MM.yyyy (пример: 31.12.2016).
    • dateTo * – конечная дата в диапазоне дат вылета в формате dd.MM.yyyy (пример: 31.12.2016).
    • adults * – количество взрослых.
    • kids * – количество детей.
    • kidsAges – количество полных лет каждому ребенку, передается в виде строки, перечисление через запятую (пример: 3,6).
    • nightsMin * – минимальное количество дней в туре (всегда запрашиваются дни тура, независимо он настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
    • nightsMax * – максимальное количество дней в туре (всегда запрашиваются дни тура, независимо он настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
    • resorts – идентификаторы городов, перечисление через запятую.
    • areas – идентификаторы курортов, перечисление через запятую.
    • tourTypeIds – идентификаторы типов тура, перечисление через запятую (начиная с релиза 15.4).
    • tourProgramIds – идентификаторы программ туров, перечисление через запятую (начиная с релиза 15.4).
    • hotelCategories – идентификаторы категорий отелей, перечисление через запятую.
    • hotels – идентификаторы отелей, перечисление через запятую.
    • meals – идентификаторы видов питания, перечисление через запятую.
    • currencyId * – валюта, в которой будут выданы цены, а также валюта для входящих параметров priceMin и priceMax (если они есть).
    • priceMin – Цена тура от.
    • priceMax – Цена тура до.
    • hotelIsNotInStop – при значении 1 в результатах не должно быть отелей в стопе (отели со статусом «под запрос» допустимы). При значении 0 в результат должны попадать как отели в стопе, так и отели с наличием мест и с местами по запросу.
    • ticketsIncluded * – при значении 1 в результатах должны быть только туры с включенной стоимостью перелета («только отель» недопустимы). При значении 0 в результат должны попадать как туры без перелета, так и туры с перелетом.
    • hasTickets – при значении 1 в результатах должны быть туры только с реальным наличием билетов в перелете (не должно быть туров со стопом на перелете, перелеты со статусом «под запрос» недопустимы). При значении 0 в результат должны попадать как туры без билетов на рейс, так и туры с наличием билетов и с билетами по запросу.
    • hasQuotas – при значении 1 в результатах должны быть туры только с реальным наличием мест во всех квотируемых услугах (не должно быть туров с услугами со стопом или со статусом «под запрос»). При значении 0 в результат должны попадать как туры с услугами на стопе, так и туры с наличием мест по квотам и с местами по запросу.
    • excludeUsualTours – при значении 1 из результатов должны быть исключены туры, являющиеся обычными турами (не являющиеся многоотельными). При значении 0 или отсутствии данного параметра такие туры должны быть включены в результат.
    • excludeCombined – при значении 1 из результатов должны быть исключены туры, являющиеся многоотельными. При значении 0 или отсутствии данного параметра такие туры должны быть включены в результат.
    • showToursWithoutHotels – при значении 1 в результатах поиска вместе с обычными турами должны подбираться туры без проживания (без услуги отель в составе тура). При значении 0 или отсутствии данного параметра такие туры должны быть исключены из результата поиска. Параметр обрабатывается, начиная с релиза 15.2.
    • hasGDSFlight – подбирать туры с GDS перелетами. Параметр обрабатывается, начиная с релиза 15.5.
      • 0 – подбирать любые туры, вне зависимости от того, есть в них GDS перелеты или нет (значение по умолчанию)
      • 1 – подбирать туры только с локальными перелетами
      • 2 – подбирать туры только с обязательными GDS перелетами
      • 3 – подбирать туры только с необязательными GDS перелетами
      • 4 – подбирать туры, в которых в одном направлении присутствует обязательный GDS перелет, а в другом направлении есть обязательный и необязательный GDS перелет (на двух вкладках в программе туров)
    • hasGDSHotel – подбирать туры с GDS отелями. Параметр обрабатывается, начиная с релиза 15.5.
      • 0 – подбирать любые туры, вне зависимости от того, есть в них GDS отели или нет (значение по умолчанию)
      • 1 – подбирать туры только с локальными отелями
      • 2 – подбирать туры только с GDS отелями
  • Возвращаемый результат:
    • offerId – уникальный идентификатор предложения, по которому в дальнейшем можно провести актуализацию тура.
    • tourId – идентификатор программы тура.
    • tourName – название программы тура.
    • countryId – идентификатор страны.
    • countryName – название страны.
    • resortId – идентификатор города, в котором расположен отель.
    • resortName – название города, в котором расположен отель.
    • areaId – идентификатор курорта, в котором расположен отель.
    • areaName – название курорта, в котором расположен отель.
    • hotelId – идентификатор отеля.
    • hotelName – название отеля.
    • hotelUrl – ссылка на страницу с описанием отеля.
    • hotelCategoryId – идентификатор категории отеля.
    • hotelCategoryName – название категории отеля.
    • roomId – идентификатор типа номера.
    • roomName – название типа номера.
    • roomTypeId – идентификатор категории номера.
    • roomTypeName – название категории номера (примеры: standard, deluxe, family, deluxe super ocean view).
    • htPlaceId – идентификатор типа размещения.
    • htPlaceName – название типа размещения в номере (примеры: 2 ADL + 1 CH (2-12), 2 ADL + INF).
    • mealId – идентификатор вида питания.
    • mealName – название питания.
    • tourDate – дата начала тура в формате dd.MM.yyyy (пример: 31.12.2016).
    • tourEndDate – дата окончания тура (дата прилета) в формате dd.MM.yyyy (пример: 31.12.2016).
    • nights – продолжительность тура в днях (всегда возвращается продолжительность тура в днях, независимо он настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
    • price – цена тура в валюте, которая была указана во входном параметре currencyId.
    • currencyId – идентификатор валюты.
    • currencyName – ISO код валюты.
    • hotelIsInStop – наличие мест в отеле, допустимы значения: 0 – есть места, 1 – нет мест, 2 – запрос.
    • ticketsIncluded – включена ли стоимость билетов в стоимость тура, допустимы значения: 0 – не включена (тур только отель), 1 – включена (пакетный тур).
    • hasEconomTicketsDpt – наличие билетов эконом класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
    • hasAnotherEconomTicketsDpt – наличие билетов эконом класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке flightTariffGroups.
    • hasEconomTicketsRtn – наличие обратных билетов эконом класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
    • hasAnotherEconomTicketsRtn – наличие обратных билетов эконом класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке flightTariffGroups.
    • hasBusinessTicketsDpt – наличие билетов бизнес класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
    • hasAnotherBusinessTicketsDpt – наличие билетов бизнес класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке flightTariffGroups.
    • hasBusinessTicketsRtn – наличие обратных билетов бизнес класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
    • hasAnotherBusinessTicketsRtn – наличие обратных билетов бизнес класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке flightTariffGroups.
    • hasGDSFlight – информация о GDS перелетах в туре: 1 – все перелеты локальные, 2 – хотя бы один перелет из GDS и его выбор обязателен, 3 – хотя бы один перелет из GDS и его выбор необязателен и нет обязательных перелетов из GDS. Начиная с релиза 15.5.
Если в туре используется перелет из GDS и мы получили в параметре hasGDSFlight 2 или 3, то для расчета стоимости перелетов после вызова GetTours необходимо вызвать ActualizeTour, а затем последовательно вызвать методы для получения цены регулярного перелета GetGDSFlights, RebuidFlights и CalculateReservation.
    • hasGDSHotel – информация о GDS отелях в туре: 1 – локальный отель, 2 – хотя бы один отель из GDS. Начиная с релиза 15.5.
    • tourUrl – ссылка на корзину (при переходе по которой можно забронировать тур), формируется сервисом ПК "Мастер-тур".
    • spoUrl – ссылка на описание тура (указывается в программе тура).
    • fewPlacesInHotel – числовое значение мест в отеле. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • fewTicketsDptY – числовое значение мест прямого перелета эконом класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • fewTicketsRtnY – числовое значение мест обратного перелета эконом класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • fewTicketsDptB – числовое значение мест прямого перелета бизнес класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • fewTicketsRtnB – числовое значение мест обратного перелета бизнес класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • flags – если тур многоотельный, возвращается код 1024. Во всех остальных случаях возвращается 0.
    • description – указывается информация о проживании. Если тур многоотельный, то указывается информация обо всех отелях в туре (пример: 1 н., Resort1, Hotel1, Standard, BB; 3 н., Resort2, Hotel2, Standard, BB; 2 н., Resort3, Hotel3, Standard, BB).
    • receivingParty – параметр не обрабатывается.
    • earlyBookingValidTill – параметр не обрабатывается.
    • TourTypes – массив типов тура, привязанных к программе тура.
      • Key – идентификатор типа тура.
      • Value – название типа тура.
    • hotelScheme – объект схемы отеля (для многоотельных туров - объект схемы первого отеля).
      • templateId – идентификатор шаблона услуги.
      • durationInNight – продолжительность отеля в ночах.
      • code – ключ отеля.
      • packetKey – ключ пакета.
      • partnerKey – ключ партнера.
      • gdsProviderId – ключ провайдера из внешней системы.
      • totalTourDuration – общая продолжительность тура в днях.
    • hotels – массив отелей, который соответствует количеству отелей в туре. Каждая запись массива содержит в себе информацию по одному отелю. Для многоотельных туров выводятся по порядку проживания в отелях.
      • countryId – идентификатор страны
      • countryName – название страны
      • resortId – идентификатор города, в котором расположен отель
      • resortName – название города, в котором расположен отель
      • areaId – идентификатор курорта, в котором расположен отель
      • areaName – название курорта, в котором расположен отель
      • hotelId – идентификатор отеля
      • hotelName – название отеля
      • hotelUrl – ссылка на страницу с описанием отеля
      • hotelCategoryId – идентификатор категории отеля
      • hotelCategoryName – название категории отеля
      • roomId – идентификатор типа номера
      • roomName – название типа номера
      • roomTypeId – идентификатор категории номера
      • roomTypeName – название категории номера
      • htPlaceId – идентификатор типа размещения
      • htPlaceName – название типа размещения
      • mealId – идентификатор питания
      • mealName – название питания
      • checkIn – дата заезда в отель
      • checkOut – дата выезда из отеля
      • checkInTime – время заезда в отель (обрабатывается с релиза 15.6)
      • checkOutTime – время выезда из отеля (обрабатывается с релиза 15.6)
      • latitude – GPS координаты: географическая широта (обрабатывается с релиза 15.6)
      • longitude – GPS координаты: географическая долгота (обрабатывается с релиза 15.6)
      • htNights – количество ночей в отеле
      • hotelIsInStop – наличие мест в отеле, допустимы значения: 0 – есть места, 1 – нет мест, 2 – запрос
      • isGDS – информация о том, локальный отель или из GDS системы: 0 – локальный отель, 1 – отель из GDS. Начиная с релиза 15.5.
      • hotelScheme – объект схемы отеля
        • templateId – идентификатор шаблона услуги
        • durationInNight – продолжительность отеля в ночах
        • code – ключ отеля
        • packetKey – ключ пакета
        • partnerKey – ключ партнера
        • gdsProviderId – ключ провайдера из внешней системы
        • totalTourDuration – общая продолжительность тура в днях
    • services – массив услуг, которые входят в тур (заполняется по настройке showServiceDescription в конфигурационном файле TourSearchOwin, обрабатывается с релиза 15.6)
      • ServiceType – класс услуги
      • Code – код (ключ) услуги
      • SubCode1 – доп. описание 1 услуги
      • SubCode2 – доп. описание 2 услуги
      • PacketId – ключ пакета цены услуги
      • PartnerId – ключ партнера цены услуги (заполняется по настройке showServicePartner в конфигурационном файле TourSearchOwin, обрабатывается с релиза 15.6)
      • CountryId – ключ страны услуги
      • CityId – ключ города услуги
      • DateBegin – дата предоставления услуги в формате dd.MM.yyyy (пример: 01.08.2020)
      • DateEnd – дата окончания услуги в формате dd.MM.yyyy (пример: 01.08.2020)
      • TimeBegin – время начала услуги в формате hh:mm (пример: 06:00), обрабатывается только для авиаперелетов и автобусных переездов
      • TimeEnd – время окончания услуги в формате hh:mm (пример: 22:00), обрабатывается только для авиаперелетов и автобусных переездов
      • Day – день предоставления услуги
      • DurationInNight – продолжительность услуги в ночах
      • GDSProviderId – ключ внешнего провайдера услуги (GDS)
      • Name – название услуги
      • Price – нетто стоимость услуги (заполняется по настройке showServiceNetto в конфигурационном файле TourSearchOwin, обрабатывается с релиза 15.6)
      • Cost – брутто стоимость услуги (заполняется по настройке showServiceBrutto в конфигурационном файле TourSearchOwin, обрабатывается с релиза 15.6)
      • Availability – результат проверки квоты по услуге: 0 – нет мест, 1 – есть места, 2 – запрос
      • Tariffs – поле cs_trfid из таблицы tbl_costs. В ответе должны быть через запятую уникальные id этих тарифов, исходя из цен, по которым считалось
    • nodeId – уникальный идентификатор узла в кластере балансировки нагрузки HaProxy
Пример

Вызов метода GetTours

http://localhost:9000/TourSearchOwin/searchApi?action=GetTours&count=20&countryId=90&departCityId=1
&dateFrom=10.10.2018&dateTo=10.10.2018&ticketsIncluded=0&adults=2&kids=0&nightsMin=7&nightsMax=7&currencyId=1

Возвращаемый результат метода GetTours (в формате JSON)

{
	"version": "1.08",
	"tours": [{
		"offerId": 45,
		"tourId": 100000004,
		"tourName": "Общая проверка системы",
		"countryId": 90,
		"countryName": "Австрия",
		"resortId": 35,
		"resortName": "Вена",
		"areaId": 1,
		"areaName": "Каринтия",
		"hotelId": 705,
		"hotelName": "Continental",
		"hotelUrl": "www.tophotels.com/NewHotel",
		"hotelCategoryId": 70,
		"hotelCategoryName": "Condotel",
		"roomId": 165,
		"roomName": "DBL",
		"roomTypeId": 1939,
		"roomTypeName": "Sea View",
		"htPlaceId": 1238,
		"htPlaceName": "2 ADL",
		"mealId": 62,
		"mealName": "BB",
		"tourDate": "10.11.2018",
		"tourEndDate": "21.11.2018",
		"nights": 12,
		"price": 15,
		"currencyId": 1,
		"currencyName": "$",
		"hotelIsInStop": 2,
		"ticketsIncluded": 1,
		"hasEconomTicketsDpt": 2,
		"hasEconomTicketsRtn": 2,
		"hasBusinessTicketsDpt": 2,
		"hasBusinessTicketsRtn": 2,
		"tourUrl": "http://localhost/TourSearchClient/Basket?departureCities=1&destination=1_22&tour=161&date=10.08.16&duration=8&hotelScheme=1_7_3239_221_10760_98
&adultCount=2&hotelQuota=7&aviaQuota=7&serviceDescriptions=2_1_586_89_1_22_33_221_10760_1_0,
1_3_3239_1148_38_22_33_221_10760_1_7,3_1_587_89_33_460_1_221_10760_8_0&currency=USD",
                "hasGDSFlight ": 0,
                "hasGDSHotel ": 0,
		"spoUrl": "www.megatec.ru",
		"fewPlacesInHotel": null,
		"fewTicketsDptY": null,
		"fewTicketsRtnY": null,
		"fewTicketsDptB": null,
		"fewTicketsRtnB": null,
		"flags": 0,
		"description": "10 н., Вена, Continental, 1 bedroom Sea View, BB",
		"receivingParty": "",
		"earlyBookingValidTill": "",
		"TourTypes": [{
			"Key": 2,
			"Value": "Стандартный тур"
		}],
		"hotelScheme": {
			"templateId": 1,
			"durationInNight": 10,
			"code": 705,
			"packetKey": 779,
			"partnerKey": 12667,
                        "gdsProviderId" 98,
                        "totalTourDuration" 11
		}
		"hotels": [{
			"countryId": 90,
			"countryName": "Австрия",
			"resortId": 35,
			"resortName": "Вена",
			"areaId": 1,
			"areaName": "Каринтия",
			"hotelId": 705,
			"hotelName": "Continental",
			"hotelUrl": "www.tophotels.com/NewHotel",
			"hotelCategoryId": 70,
			"hotelCategoryName": "Condotel",
			"roomId": 165,
			"roomName": "DBL",
			"roomTypeId": 1939,
			"roomTypeName": "Sea View",
			"htPlaceId": 1238,
			"htPlaceName": "2 ADL",
			"mealId": 62,
			"mealName": "BB",
			"checkIn": "2018-11-10T00:00:00",
			"checkOut": "2018-11-16T00:00:00",
                        "checkInTime": null,
                        "checkOutTime": null,
                        "latitude": null,
                        "longitude": null,
			"htNights": 6,
			"hotelIsInStop": 2,
                        "isGDS": 0,
			"hotelScheme": {
				"templateId": 4,
				"durationInNight": 6,
				"code": 705,
				"packetKey": 1083,
				"partnerKey": 12695,
                                "gdsProviderId": 98,
                                "totalTourDuration": 7
			}
		},
		{

			"countryId": 90,
			"countryName": "Австрия",
			"resortId": 35,
			"resortName": "Вена",
			"areaId": 1,
			"areaName": "Каринтия",
			"hotelId": 178,
			"hotelName": "Ananas",
			"hotelUrl": "www.tophotels.com/NewHotelAnanas",
			"hotelCategoryId": 63,
			"hotelCategoryName": "5+",
			"roomId": 165,
			"roomName": "DBL",
			"roomTypeId": 1939,
			"roomTypeName": "Sea View",
			"htPlaceId": 1238,
			"htPlaceName": "2 ADL",
			"mealId": 62,
			"mealName": "BB",
			"checkIn": "2018-11-16T00:00:00",
			"checkOut": "2018-11-20T00:00:00",
                        "checkInTime": null,
                        "checkOutTime": null,
                        "latitude": null,
                        "longitude": null,
			"htNights": 4,
			"hotelIsInStop": 2,
                        "isGDS": 0,
			"hotelScheme": {
				"templateId": 3,
				"durationInNight": 4,
				"code": 178,
				"packetKey": 1085,
				"partnerKey": 12796,
                                "gdsProviderId" 98,
                                "totalTourDuration" 5
			}
		}]
	},
"nodeId": 1
}


Поиск всех цен по туру (GetToursAllPrices) начиная с релиза 15.3

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

  • Формат запроса:
    •  ?action=GetToursAllPrices&count=int&countryId=int&departCityId=int&dateFrom=date&dateTo=date&adults=int&kids=int&nightsMin=int&nightsMax=int&currencyId=int
  • Принимаемые параметры ( * – обязательный):
    • offerId – уникальный идентификатор ранее найденного предложения. В случае, если данный параметр задан, все остальные параметры не обязательны и не принимаются в расчет, метод возвращает одну запись.
    • count * – максимальное количество предложений в выдаче.
    • countryId * – идентификатор страны.
    • departCityId * – идентификатор города вылета.
    • dateFrom * – начальная дата в диапазоне дат вылета в формате dd.MM.yyyy (пример: 31.12.2018).
    • dateTo * – конечная дата в диапазоне дат вылета в формате dd.MM.yyyy (пример: 31.12.2018).
    • adults * – количество взрослых.
    • kids * – количество детей.
    • kidsAges – количество полных лет каждому ребенку, передается в виде строки, перечисление через запятую (пример: 3,6).
    • nightsMin * – минимальное количество дней в туре (всегда запрашиваются дни тура, независимо он настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
    • nightsMax * – максимальное количество дней в туре (всегда запрашиваются дни тура, независимо он настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
    • resorts – идентификаторы городов, перечисление через запятую.
    • areas – идентификаторы курортов, перечисление через запятую.
    • tourTypeIds – идентификаторы типов тура, перечисление через запятую (начиная с релиза 15.4).
    • tourProgramIds – идентификаторы программ туров, перечисление через запятую (начиная с релиза 15.4).
    • hotelCategories – идентификаторы категорий отелей, перечисление через запятую.
    • hotels – идентификаторы отелей, перечисление через запятую.
    • meals – идентификаторы видов питания, перечисление через запятую.
    • currencyId * – валюта, в которой будут выданы цены, а также валюта для входящих параметров priceMin и priceMax (если они есть).
    • priceMin – Цена тура от.
    • priceMax – Цена тура до.
    • hotelIsNotInStop – при значении 1 в результатах не должно быть отелей в стопе (отели со статусом «под запрос» допустимы). При значении 0 в результат должны попадать как отели в стопе, так и отели с наличием мест и с местами по запросу.
    • ticketsIncluded * – при значении 1 в результатах должны быть только туры с включенной стоимостью перелета («только отель» недопустимы). При значении 0 в результат должны попадать как туры без перелета, так и туры с перелетом.
    • hasTickets – при значении 1 в результатах должны быть туры только с реальным наличием билетов в перелете (не должно быть туров со стопом на перелете, перелеты со статусом «под запрос» недопустимы). При значении 0 в результат должны попадать как туры без билетов на рейс, так и туры с наличием билетов и с билетами по запросу.
    • hasQuotas – при значении 1 в результатах должны быть туры только с реальным наличием мест во всех квотируемых услугах (не должно быть туров с услугами со стопом или со статусом «под запрос»). При значении 0 в результат должны попадать как туры с услугами на стопе, так и туры с наличием мест по квотам и с местами по запросу.
    • excludeUsualTours – при значении 1 из результатов должны быть исключены туры, являющиеся обычными турами (не являющиеся многоотельными). При значении 0 или отсутствии данного параметра такие туры должны быть включены в результат.
    • excludeCombined – при значении 1 из результатов должны быть исключены туры, являющиеся многоотельными. При значении 0 или отсутствии данного параметра такие туры должны быть включены в результат.
    • hasGDSFlight – подбирать туры с GDS перелетами. Параметр обрабатывается, начиная с релиза 15.5.
      • 0 – подбирать любые туры, вне зависимости от того, есть в них GDS перелеты или нет (значение по умолчанию)
      • 1 – подбирать туры только с локальными перелетами
      • 2 – подбирать туры только с обязательными GDS перелетами
      • 3 – подбирать туры только с необязательными GDS перелетами
      • 4 – подбирать туры, в которых в одном направлении присутствует обязательный GDS перелет, а в другом направлении есть обязательный и необязательный GDS перелет (на двух вкладках в программе туров)
    • hasGDSHotel – подбирать туры с GDS отелями. Параметр обрабатывается, начиная с релиза 15.5.
      • 0 – подбирать любые туры, вне зависимости от того, есть в них GDS отели или нет (значение по умолчанию)
      • 1 – подбирать туры только с локальными отелями
      • 2 – подбирать туры только с GDS отелями
    • showToursWithoutHotels – при значении 1 в результатах поиска вместе с обычными турами должны подбираться туры без проживания (без услуги отель в составе тура). При значении 0 или отсутствии данного параметра такие туры должны быть исключены из результата поиска. Параметр обрабатывается, начиная с релиза 15.2.
    • Sort – сортировка результатов. Возможно использование нескольких параметров через запятую. Если параметр не указан, то по умолчанию сортировка производится по возрастанию цены. Возможные значения:
      • ByPrice – сортировка по цене по возрастанию.
      • ByPrice_desc – сортировка по цене по убыванию.
      • ByStartDate – сортировка по дате начала тура по возрастанию.
      • ByStartDate_desc – сортировка по дате начала тура по убыванию.
      • ByEndDate – сортировка по дате окончания тура по возрастанию.
      • ByEndDate_desc – сортировка по дате окончания тура по убыванию.
      • ByDuration – сортировка по продолжительности тура по возрастанию.
      • ByDuration_desc – сортировка по продолжительности тура по убыванию.
      • ByHotel – сортировка по названию отеля (для многоотельных туров сортировка по названию первого отеля).
      • ByHotel_desc – сортировка по названию отеля в обратном порядке (для многоотельных туров сортировка по названию первого отеля в обратном порядке).
      • ByHotelCategory – сортировка по названию категории отеля (для многоотельных туров сортировка по названию категории первого отеля).
      • ByHotelCategory_desc – сортировка по названию категории отеля в обратном порядке (для многоотельных туров сортировка по названию категории первого отеля в обратном порядке).
      • ByMeal – сортировка по названию питания (для многоотельных туров сортировка по названию питания первого отеля).
      • ByMeal_desc – сортировка по названию питания в обратном порядке (для многоотельных туров сортировка по названию питания в обратном порядке первого отеля).
      • ByResort – сортировка по названию курорта (для многоотельных туров сортировка по названию курорта первого отеля).
      • ByResort_desc – сортировка по названию курорта в обратном порядке (для многоотельных туров сортировка по названию курорта в обратном порядке первого отеля).
      • ByCity – сортировка по названию города (для многоотельных туров сортировка по названию города первого отеля).
      • ByCity_desc – сортировка по названию города в обратном порядке (для многоотельных туров сортировка по названию города в обратном порядке первого отеля).
      • ByTour – сортировка по названию программы тура.
      • ByTour_desc – сортировка по названию программы тура в обратном порядке.
    • PageNumber – порядковый номер страницы. Если задан парамер PageNumber, то использование параметра PageSize становится обязательным.
    • PageSize – количество результатов на странице. Если задан парамер PageSize, то использование параметра PageNumber становится обязательным.
  • Возвращаемый результат:
    • offerId – уникальный идентификатор предложения, по которому в дальнейшем можно провести актуализацию тура.
    • tourId – идентификатор программы тура.
    • tourName – название программы тура.
    • countryId – идентификатор страны.
    • countryName – название страны.
    • resortId – идентификатор города, в котором расположен отель.
    • resortName – название города, в котором расположен отель.
    • areaId – идентификатор курорта, в котором расположен отель.
    • areaName – название курорта, в котором расположен отель.
    • hotelId – идентификатор отеля.
    • hotelName – название отеля.
    • hotelUrl – ссылка на страницу с описанием отеля.
    • hotelCategoryId – идентификатор категории отеля.
    • hotelCategoryName – название категории отеля.
    • roomId – идентификатор типа номера.
    • roomName – название типа номера.
    • roomTypeId – идентификатор категории номера.
    • roomTypeName – название категории номера (примеры: standard, deluxe, family, deluxe super ocean view).
    • htPlaceId – идентификатор типа размещения.
    • htPlaceName – название типа размещения в номере (примеры: 2 ADL + 1 CH (2-12), 2 ADL + INF).
    • mealId – идентификатор вида питания.
    • mealName – название питания.
    • tourDate – дата начала тура в формате dd.MM.yyyy (пример: 31.12.2016).
    • tourEndDate – дата окончания тура (дата прилета) в формате dd.MM.yyyy (пример: 31.12.2016).
    • nights – продолжительность тура в днях (всегда возвращается продолжительность тура в днях, независимо он настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
    • price – цена тура в валюте, которая была указана во входном параметре currencyId.
    • currencyId – идентификатор валюты.
    • currencyName – ISO код валюты.
    • hotelIsInStop – наличие мест в отеле, допустимы значения: 0 – есть места, 1 – нет мест, 2 – запрос.
    • ticketsIncluded – включена ли стоимость билетов в стоимость тура, допустимы значения: 0 – не включена (тур только отель), 1 – включена (пакетный тур).
    • hasEconomTicketsDpt – наличие билетов эконом класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
    • hasAnotherEconomTicketsDpt – наличие билетов эконом класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке flightTariffGroups.
    • hasEconomTicketsRtn – наличие обратных билетов эконом класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
    • hasAnotherEconomTicketsRtn – наличие обратных билетов эконом класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке flightTariffGroups.
    • hasBusinessTicketsDpt – наличие билетов бизнес класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
    • hasAnotherBusinessTicketsDpt – наличие билетов бизнес класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке flightTariffGroups.
    • hasBusinessTicketsRtn – наличие обратных билетов бизнес класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
    • hasAnotherBusinessTicketsRtn – наличие обратных билетов бизнес класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке flightTariffGroups.
    • hasGDSFlight – информация о GDS перелетах в туре: 1 – все перелеты локальные, 2 – хотя бы один перелет из GDS и его выбор обязателен, 3 – хотя бы один перелет из GDS и его выбор необязателен и нет обязательных перелетов из GDS. Начиная с релиза 15.5.
    • hasGDSHotel – информация о GDS отелях в туре: 1 – локальный отель, 2 – хотя бы один отель из GDS. Начиная с релиза 15.5.
    • tourUrl – ссылка на корзину (при переходе по которой можно забронировать тур).
    • spoUrl – ссылка на описание тура (указывается в программе тура).
    • fewPlacesInHotel – числовое значение мест в отеле. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • fewTicketsDptY – числовое значение мест прямого перелета эконом класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • fewTicketsRtnY – числовое значение мест обратного перелета эконом класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • fewTicketsDptB – числовое значение мест прямого перелета бизнес класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • fewTicketsRtnB – числовое значение мест обратного перелета бизнес класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • flags – если тур многоотельный, возвращается код 1024. Во всех остальных случаях возвращается 0.
    • description – указывается информация о проживании. Если тур многоотельный, то указывается информация обо всех отелях в туре (пример: 1 н., Resort1, Hotel1, Standard, BB; 3 н., Resort2, Hotel2, Standard, BB; 2 н., Resort3, Hotel3, Standard, BB).
    • receivingParty – параметр не обрабатывается.
    • earlyBookingValidTill – параметр не обрабатывается.
    • TourTypes – массив типов тура, привязанных к программе тура.
      • Key – идентификатор типа тура.
      • Value – название типа тура.
    • hotelScheme – объект схемы отеля (для многоотельных туров - объект схемы первого отеля).
      • templateId – идентификатор шаблона услуги.
      • durationInNight – продолжительность отеля в ночах.
      • code – ключ отеля.
      • packetKey – ключ пакета.
      • partnerKey – ключ партнера.
      • gdsProviderId – ключ провайдера из внешней системы.
      • totalTourDuration – общая продолжительность тура в днях.
    • hotels – массив отелей, который соответствует количеству отелей туре. Каждая запись массива содержит в себе информацию по одному отелю. Для многоотельных туров выводятся по порядку проживания в отелях.
      • countryId – идентификатор страны
      • countryName – название страны
      • resortId – идентификатор города, в котором расположен отель
      • resortName – название города, в котором расположен отель
      • areaId – идентификатор курорта, в котором расположен отель
      • areaName – название курорта, в котором расположен отель
      • hotelId – идентификатор отеля
      • hotelName – название отеля
      • hotelUrl – ссылка на страницу с описанием отеля
      • hotelCategoryId – идентификатор категории отеля
      • hotelCategoryName – название категории отеля
      • roomId – идентификатор типа номера
      • roomName – название типа номера
      • roomTypeId – идентификатор категории номера
      • roomTypeName – название категории номера
      • htPlaceId – идентификатор типа размещения
      • htPlaceName – название типа размещения
      • mealId – идентификатор питания
      • mealName – название питания
      • checkIn – дата заезда в отель
      • checkOut – дата выезда из отеля
      • CheckInTime – время заезда в отель (обрабатывается с релиза 15.6)
      • CheckOutTime – время выезда из отеля (обрабатывается с релиза 15.6)
      • latitude – GPS координаты: географическая широта (обрабатывается с релиза 15.6)
      • longitude – GPS координаты: географическая долгота (обрабатывается с релиза 15.6)
      • htNights – количество ночей в отеле
      • hotelIsInStop – наличие мест в отеле, допустимы значения: 0 – есть места, 1 – нет мест, 2 – запрос
      • isGDS – информация о том, локальный отель или из GDS системы: 0 – локальный отель, 1 – отель из GDS. Начиная с релиза 15.5.
      • hotelScheme – объект схемы отеля
        • templateId – идентификатор шаблона услуги
        • durationInNight – продолжительность отеля в ночах
        • code – ключ отеля
        • packetKey – ключ пакета
        • partnerKey – ключ партнера
        • gdsProviderId – ключ провайдера из внешней системы
        • totalTourDuration – общая продолжительность тура в днях
    • services – массив услуг, которые входят в тур (заполняется по настройке showServiceDescription в конфигурационном файле TourSearchOwin, обрабатывается с релиза 15.6)
      • ServiceType – класс услуги
      • Code – код (ключ) услуги
      • SubCode1 – доп. описание 1 услуги
      • SubCode2 – доп. описание 2 услуги
      • PacketId – ключ пакета цены услуги
      • PartnerId – ключ партнера цены услуги (заполняется по настройке showServicePartner в конфигурационном файле TourSearchOwin, обрабатывается с релиза 15.6)
      • CountryId – ключ страны услуги
      • CityId – ключ города услуги
      • DateBegin – дата предоставления услуги в формате dd.MM.yyyy (пример: 01.08.2020)
      • DateEnd – дата окончания услуги в формате dd.MM.yyyy (пример: 01.08.2020)
      • TimeBegin – время начала услуги в формате hh:mm (пример: 06:00), обрабатывается только для авиаперелетов и автобусных переездов
      • TimeEnd – время окончания услуги в формате hh:mm (пример: 22:00), обрабатывается только для авиаперелетов и автобусных переездов
      • Day – день предоставления услуги
      • DurationInNight – продолжительность услуги в ночах
      • GDSProviderId – ключ внешнего провайдера услуги (GDS)
      • Name – название услуги
      • Price – нетто стоимость услуги (заполняется по настройке showServiceNetto в конфигурационном файле TourSearchOwin, обрабатывается с релиза 15.6)
      • Cost – брутто стоимость услуги (заполняется по настройке showServiceBrutto в конфигурационном файле TourSearchOwin, обрабатывается с релиза 15.6)
      • Availability – результат проверки квоты по услуге: 0 – нет мест, 1 – есть места, 2 – запрос
      • Tariffs – поле cs_trfid из таблицы tbl_costs. В ответе должны быть через запятую уникальные id этих тарифов, исходя из цен, по которым считалось
    • nodeId – уникальный идентификатор узла в кластере балансировки нагрузки HaProxy
Пример

Вызов метода GetToursAllPrices

http://localhost:9000/TourSearchOwin/searchApi?action=GetToursAllPrices&count=20&countryId=90&departCityId=1
&dateFrom=10.10.2018&dateTo=10.10.2018&ticketsIncluded=0&adults=2&kids=0&nightsMin=7&nightsMax=7&currencyId=1
&Sort=ByStartDate

Возвращаемый результат метода GetToursAllPrices (в формате JSON)

{
	"version": "1.08",
	"tours": [{
		"offerId": 45,
		"tourId": 100000004,
		"tourName": "Общая проверка системы",
		"countryId": 90,
		"countryName": "Австрия",
		"resortId": 35,
		"resortName": "Вена",
		"areaId": 1,
		"areaName": "Каринтия",
		"hotelId": 705,
		"hotelName": "Continental",
		"hotelUrl": "www.tophotels.com/NewHotel",
		"hotelCategoryId": 70,
		"hotelCategoryName": "Condotel",
		"roomId": 165,
		"roomName": "DBL",
		"roomTypeId": 1939,
		"roomTypeName": "Sea View",
		"htPlaceId": 1238,
		"htPlaceName": "2 ADL",
		"mealId": 62,
		"mealName": "BB",
		"tourDate": "10.11.2018",
		"tourEndDate": "21.11.2018",
		"nights": 12,
		"price": 15,
		"currencyId": 1,
		"currencyName": "$",
		"hotelIsInStop": 2,
		"ticketsIncluded": 1,
		"hasEconomTicketsDpt": 2,
		"hasEconomTicketsRtn": 2,
		"hasBusinessTicketsDpt": 2,
		"hasBusinessTicketsRtn": 2,
		"tourUrl": "http://localhost/TourSearchClient/Basket?departureCities=1&destination=1_22&tour=161&date=10.08.16&duration=8&hotelScheme=1_7_3239_221_10760_0
&adultCount=2&hotelQuota=7&aviaQuota=7&serviceDescriptions=2_1_586_89_1_22_33_221_10760_1_0,
1_3_3239_1148_38_22_33_221_10760_1_7,3_1_587_89_33_460_1_221_10760_8_0&currency=USD",
                "hasGDSFlight ": 0,
                "hasGDSHotel ": 0,
		"spoUrl": "www.megatec.ru",
		"fewPlacesInHotel": null,
		"fewTicketsDptY": null,
		"fewTicketsRtnY": null,
		"fewTicketsDptB": null,
		"fewTicketsRtnB": null,
		"flags": 0,
		"description": "10 н., Вена, Continental, 1 bedroom Sea View, BB",
		"receivingParty": "",
		"earlyBookingValidTill": "",
		"TourTypes": [{
			"Key": 2,
			"Value": "Стандартный тур"
		}],
		"hotelScheme": {
			"templateId": 1,
			"durationInNight": 10,
			"code": 705,
			"packetKey": 779,
			"partnerKey": 12667,
                        "gdsProviderId": 0,
                        "totalTourDuration": 11
		}
		"hotels": [{
			"countryId": 90,
			"countryName": "Австрия",
			"resortId": 35,
			"resortName": "Вена",
			"areaId": 1,
			"areaName": "Каринтия",
			"hotelId": 705,
			"hotelName": "Continental",
			"hotelUrl": "www.tophotels.com/NewHotel",
			"hotelCategoryId": 70,
			"hotelCategoryName": "Condotel",
			"roomId": 165,
			"roomName": "DBL",
			"roomTypeId": 1939,
			"roomTypeName": "Sea View",
			"htPlaceId": 1238,
			"htPlaceName": "2 ADL",
			"mealId": 62,
			"mealName": "BB",
			"checkIn": "2018-11-10T00:00:00",
			"checkOut": "2018-11-16T00:00:00",
                        "checkInTime": null,
                        "checkOutTime": null,
                        "latitude": null,
                        "longitude": null,
			"htNights": 6,
			"hotelIsInStop": 2,
                        "isGDS": 0,
			"hotelScheme": {
				"templateId": 4,
				"durationInNight": 6,
				"code": 705,
				"packetKey": 1083,
				"partnerKey": 12695,
                                "gdsProviderId" 0,
                                "totalTourDuration": 7
			}
		},
		{

			"countryId": 90,
			"countryName": "Австрия",
			"resortId": 35,
			"resortName": "Вена",
			"areaId": 1,
			"areaName": "Каринтия",
			"hotelId": 178,
			"hotelName": "Ananas",
			"hotelUrl": "www.tophotels.com/NewHotelAnanas",
			"hotelCategoryId": 63,
			"hotelCategoryName": "5+",
			"roomId": 165,
			"roomName": "DBL",
			"roomTypeId": 1939,
			"roomTypeName": "Sea View",
			"htPlaceId": 1238,
			"htPlaceName": "2 ADL",
			"mealId": 62,
			"mealName": "BB",
			"checkIn": "2018-11-16T00:00:00",
			"checkOut": "2018-11-20T00:00:00",
                        "checkInTime": null,
                        "checkOutTime": null,
                        "latitude": null,
                        "longitude": null,
			"htNights": 4,
			"hotelIsInStop": 2,
                        "isGDS": 0,
			"hotelScheme": {
				"templateId": 3,
				"durationInNight": 4,
				"code": 178,
				"packetKey": 1085,
				"partnerKey": 12796,
                                "gdsProviderId" 0,
                                "totalTourDuration": 5
			}
		}]
	},
"nodeId": 1
}


Поиск минимальных цен по каждому варианту питания (GetToursAllPricesPansion) начиная с релиза 15.9

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

  • Формат запроса:
    •  ?action=GetToursAllPricesPansion&count=int&countryId=int&departCityId=int&dateFrom=date&dateTo=date&adults=int&kids=int&nightsMin=int&nightsMax=int&currencyId=int
  • Принимаемые параметры ( * – обязательный):
    • count * – максимальное количество предложений в выдаче.
    • countryId * – идентификатор страны.
    • departCityId * – идентификатор города вылета.
    • dateFrom * – начальная дата в диапазоне дат вылета в формате dd.MM.yyyy (пример: 31.12.2024).
    • dateTo * – конечная дата в диапазоне дат вылета в формате dd.MM.yyyy (пример: 31.12.2024).
    • adults * – количество взрослых.
    • kids * – количество детей.
    • kidsAges – количество полных лет каждому ребенку, передается в виде строки, перечисление через запятую (пример: 3,6).
    • nightsMin * – минимальное количество дней в туре (всегда запрашиваются дни тура, независимо от настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
    • nightsMax * – максимальное количество дней в туре (всегда запрашиваются дни тура, независимо от настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
    • resorts – идентификаторы городов, перечисление через запятую.
    • areas – идентификаторы курортов, перечисление через запятую.
    • tourTypeIds – идентификаторы типов тура, перечисление через запятую.
    • tourProgramIds – идентификаторы программ туров, перечисление через запятую.
    • hotelCategories – идентификаторы категорий отелей, перечисление через запятую.
    • hotels – идентификаторы отелей, перечисление через запятую.
    • meals – идентификаторы видов питания, перечисление через запятую.
    • currencyId * – валюта, в которой будут выданы цены, а также валюта для входящих параметров priceMin и priceMax (если они есть).
    • priceMin – Цена тура от.
    • priceMax – Цена тура до.
    • hotelIsNotInStop – при значении 1 в результатах не должно быть отелей в стопе (отели со статусом «под запрос» допустимы). При значении 0 в результат должны попадать как отели в стопе, так и отели с наличием мест и с местами по запросу.
    • ticketsIncluded * – при значении 1 в результатах должны быть только туры с включенной стоимостью перелета («только отель» недопустимы). При значении 0 в результат должны попадать как туры без перелета, так и туры с перелетом.
    • hasTickets – при значении 1 в результатах должны быть туры только с реальным наличием билетов в перелете (не должно быть туров со стопом на перелете, перелеты со статусом «под запрос» недопустимы). При значении 0 в результат должны попадать как туры без билетов на рейс, так и туры с наличием билетов и с билетами по запросу.
    • hasQuotas – при значении 1 в результатах должны быть туры только с реальным наличием мест во всех квотируемых услугах (не должно быть туров с услугами со стопом или со статусом «под запрос»). При значении 0 в результат должны попадать как туры с услугами на стопе, так и туры с наличием мест по квотам и с местами по запросу.
    • excludeUsualTours – при значении 1 из результатов должны быть исключены туры, являющиеся обычными турами (не являющиеся многоотельными). При значении 0 или отсутствии данного параметра такие туры должны быть включены в результат.
    • excludeCombined – при значении 1 из результатов должны быть исключены туры, являющиеся многоотельными. При значении 0 или отсутствии данного параметра такие туры должны быть включены в результат.
    • hasGDSFlight – подбирать туры с GDS перелетами.
      • 0 – подбирать любые туры, вне зависимости от того, есть в них GDS перелеты или нет (значение по умолчанию)
      • 1 – подбирать туры только с локальными перелетами
      • 2 – подбирать туры только с обязательными GDS перелетами
      • 3 – подбирать туры только с необязательными GDS перелетами
      • 4 – подбирать туры, в которых в одном направлении присутствует обязательный GDS перелет, а в другом направлении есть обязательный и необязательный GDS перелет (на двух вкладках в программе туров)
    • hasGDSHotel – подбирать туры с GDS отелями.
      • 0 – подбирать любые туры, вне зависимости от того, есть в них GDS отели или нет (значение по умолчанию)
      • 1 – подбирать туры только с локальными отелями
      • 2 – подбирать туры только с GDS отелями
  • Возвращаемый результат:
    • offerId – уникальный идентификатор предложения, по которому в дальнейшем можно провести актуализацию тура.
    • tourId – идентификатор программы тура.
    • tourName – название программы тура.
    • countryId – идентификатор страны.
    • countryName – название страны.
    • resortId – идентификатор города, в котором расположен отель.
    • resortName – название города, в котором расположен отель.
    • areaId – идентификатор курорта, в котором расположен отель.
    • areaName – название курорта, в котором расположен отель.
    • hotelId – идентификатор отеля.
    • hotelName – название отеля.
    • hotelUrl – ссылка на страницу с описанием отеля.
    • hotelCategoryId – идентификатор категории отеля.
    • hotelCategoryName – название категории отеля.
    • roomId – идентификатор типа номера.
    • roomName – название типа номера.
    • roomTypeId – идентификатор категории номера.
    • roomTypeName – название категории номера (примеры: standard, deluxe, family, deluxe super ocean view).
    • htPlaceId – идентификатор типа размещения.
    • htPlaceName – название типа размещения в номере (примеры: 2 ADL + 1 CH (2-12), 2 ADL + INF).
    • mealId – идентификатор вида питания.
    • mealName – название питания.
    • tourDate – дата начала тура в формате dd.MM.yyyy (пример: 30.12.2024).
    • tourEndDate – дата окончания тура (дата прилета) в формате dd.MM.yyyy (пример: 31.12.2024).
    • nights – продолжительность тура в днях (всегда возвращается продолжительность тура в днях, независимо от настройки осуществления поиска: в днях тура/в ночах тура/в ночах проживания в отеле).
    • price – цена тура в валюте, которая была указана во входном параметре currencyId.
    • currencyId – идентификатор валюты.
    • currencyName – ISO код валюты.
    • 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 значение данного параметра будет проигнорировано.
    • hasAnotherEconomTicketsDpt – наличие билетов эконом класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке flightTariffGroups.
    • hasAnotherEconomTicketsRtn – наличие обратных билетов эконом класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке flightTariffGroups.
    • hasAnotherBusinessTicketsDpt – наличие билетов бизнес класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке flightTariffGroups.
    • hasAnotherBusinessTicketsRtn – наличие обратных билетов бизнес класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке flightTariffGroups.
    • hasGDSFlight – информация о GDS перелетах в туре: 1 – все перелеты локальные, 2 – хотя бы один перелет из GDS и его выбор обязателен, 3 – хотя бы один перелет из GDS и его выбор необязателен и нет обязательных перелетов из GDS.
    • hasGDSHotel – информация о GDS отелях в туре: 1 – локальный отель, 2 – хотя бы один отель из GDS.
    • tourUrl – ссылка на корзину (при переходе по которой можно забронировать тур).
    • spoUrl – ссылка на описание тура (указывается в программе тура).
    • fewPlacesInHotel – числовое значение мест в отеле. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • fewTicketsDptY – числовое значение мест прямого перелета эконом класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • fewTicketsRtnY – числовое значение мест обратного перелета эконом класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • fewTicketsDptB – числовое значение мест прямого перелета бизнес класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • fewTicketsRtnB – числовое значение мест обратного перелета бизнес класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • flags – если тур многоотельный, возвращается код 1024. Во всех остальных случаях возвращается 0.
    • description – указывается информация о проживании. Если тур многоотельный, то указывается информация обо всех отелях в туре (пример: 1 н., Resort1, Hotel1, Standard, BB; 3 н., Resort2, Hotel2, Standard, BB; 2 н., Resort3, Hotel3, Standard, BB).
    • receivingParty – параметр не обрабатывается.
    • earlyBookingValidTill – параметр не обрабатывается.
    • TourTypes – массив типов тура, привязанных к программе тура.
      • Key – идентификатор типа тура.
      • Value – название типа тура.
    • hotelScheme – объект схемы отеля (для многоотельных туров - объект схемы первого отеля).
      • templateId – идентификатор шаблона услуги.
      • durationInNight – продолжительность отеля в ночах.
      • code – ключ отеля.
      • packetKey – ключ пакета.
      • partnerKey – ключ партнера.
      • gdsProviderId – ключ провайдера из внешней системы.
      • totalTourDuration – общая продолжительность тура в днях.
    • hotels – массив отелей, который соответствует количеству отелей туре. Каждая запись массива содержит в себе информацию по одному отелю. Для многоотельных туров выводятся по порядку проживания в отелях.
      • countryId – идентификатор страны
      • countryName – название страны
      • resortId – идентификатор города, в котором расположен отель
      • resortName – название города, в котором расположен отель
      • areaId – идентификатор курорта, в котором расположен отель
      • areaName – название курорта, в котором расположен отель
      • hotelId – идентификатор отеля
      • hotelName – название отеля
      • hotelUrl – ссылка на страницу с описанием отеля
      • hotelCategoryId – идентификатор категории отеля
      • hotelCategoryName – название категории отеля
      • roomId – идентификатор типа номера
      • roomName – название типа номера
      • roomTypeId – идентификатор категории номера
      • roomTypeName – название категории номера
      • htPlaceId – идентификатор типа размещения
      • htPlaceName – название типа размещения
      • mealId – идентификатор питания
      • mealName – название питания
      • checkIn – дата заезда в отель
      • checkOut – дата выезда из отеля
      • CheckInTime – время заезда в отель
      • CheckOutTime – время выезда из отеля
      • latitude – GPS координаты: географическая широта
      • longitude – GPS координаты: географическая долгота
      • htNights – количество ночей в отеле
      • hotelIsInStop – наличие мест в отеле, допустимы значения: 0 – есть места, 1 – нет мест, 2 – запрос
      • isGDS – информация о том, локальный отель или из GDS системы: 0 – локальный отель, 1 – отель из GDS.
      • hotelScheme – объект схемы отеля
        • templateId – идентификатор шаблона услуги
        • durationInNight – продолжительность отеля в ночах
        • code – ключ отеля
        • packetKey – ключ пакета
        • partnerKey – ключ партнера
        • gdsProviderId – ключ провайдера из внешней системы
        • totalTourDuration – общая продолжительность тура в днях
    • services – массив услуг, которые входят в тур (заполняется по настройке showServiceDescription в конфигурационном файле TourSearchOwin)
      • ServiceType – класс услуги
      • Code – код (ключ) услуги
      • SubCode1 – доп. описание 1 услуги
      • SubCode2 – доп. описание 2 услуги
      • PacketId – ключ пакета цены услуги
      • PartnerId – ключ партнера цены услуги (заполняется по настройке showServicePartner в конфигурационном файле TourSearchOwin)
      • CountryId – ключ страны услуги
      • CityId – ключ города услуги
      • DateBegin – дата предоставления услуги в формате dd.MM.yyyy (пример: 01.08.2020)
      • DateEnd – дата окончания услуги в формате dd.MM.yyyy (пример: 01.08.2020)
      • TimeBegin – время начала услуги в формате hh:mm (пример: 06:00), обрабатывается только для авиаперелетов и автобусных переездов
      • TimeEnd – время окончания услуги в формате hh:mm (пример: 22:00), обрабатывается только для авиаперелетов и автобусных переездов
      • Day – день предоставления услуги
      • DurationInNight – продолжительность услуги в ночах
      • GDSProviderId – ключ внешнего провайдера услуги (GDS)
      • Name – название услуги
      • Price – нетто стоимость услуги (заполняется по настройке showServiceNetto в конфигурационном файле TourSearchOwin)
      • Cost – брутто стоимость услуги (заполняется по настройке showServiceBrutto в конфигурационном файле TourSearchOwin)
      • Availability – результат проверки квоты по услуге: 0 – нет мест, 1 – есть места, 2 – запрос
      • Tariffs – поле cs_trfid из таблицы tbl_costs. В ответе должны быть через запятую уникальные id этих тарифов, исходя из цен, по которым считалось
    • nodeId – уникальный идентификатор узла в кластере балансировки нагрузки HaProxy
Пример

Вызов метода GetToursAllPrices

http://localhost:9000/TourSearchOwin/searchApi?action=GetToursAllPricesPansion&count=20&countryId=90&departCityId=1
&dateFrom=10.12.2024&dateTo=10.12.2024&ticketsIncluded=0&adults=2&kids=0&nightsMin=7&nightsMax=7&currencyId=1

Возвращаемый результат метода GetToursAllPricesPansion (в формате JSON)

{
	{
    "version": "1.08",
    "tours": [
        {
            "offerId": 101,
            "tourId": 100011396,
            "tourName": "AustriaNEMOALLTEST",
            "countryId": 90,
            "countryName": "Австрия",
            "resortId": 35,
            "resortName": "Вена",
            "areaId": 1,
            "areaName": "Карентия",
            "hotelId": 12610,
            "hotelName": "Отель для удаления 56",
            "hotelUrl": null,
            "hotelCategoryId": 668,
            "hotelCategoryName": "1*",
            "roomId": 132,
            "roomName": "DBL+EXB",
            "roomTypeId": 26,
            "roomTypeName": "Colonial Wings room",
            "htPlaceId": 1238,
            "htPlaceName": "2 ADL",
            "mealId": 46,
            "mealName": "RO2",
            "tourDate": "10.12.2024",
            "tourEndDate": "17.12.2024",
            "nights": 8,
            "price": 27.0,
            "currencyId": 1,
            "currencyName": "USD",
            "hotelIsInStop": 2,
            "ticketsIncluded": 1,
            "hasEconomTicketsDpt": 0,
            "hasEconomTicketsRtn": 2,
            "hasBusinessTicketsDpt": 2,
            "hasBusinessTicketsRtn": 0,
            "hasAnotherEconomTicketsDpt": 0,
            "hasAnotherEconomTicketsRtn": 0,
            "hasAnotherBusinessTicketsDpt": 0,
            "hasAnotherBusinessTicketsRtn": 0,
            "hasGDSFlight": 2,
            "hasGDSHotel": 1,
            "tourUrl": "http://localhost/TourSearchClient/Basket?departureCities=1&destination=1_90&tour=100011396&date=10.12.24&duration=7&hotelScheme=2_6_12610_779_12685_0_8&adultCount=2&hotelQuota=7&aviaQuota=7&busTransferQuota=7&serviceDescriptions=1_0_1_1_1043_67_1_90_35_1037_12792_1_1,2_0_0_3_12610_66717_46_90_35_779_12685_2_6,3_1_1_1_1076_89_35_460_1_1037_12792_8_0&currency=USD",
            "spoUrl": null,
            "fewPlacesInHotel": null,
            "fewTicketsDptY": null,
            "fewTicketsRtnY": null,
            "fewTicketsDptB": null,
            "fewTicketsRtnB": null,
            "flags": 0,
            "description": "6 н., Вена, Отель для удаления 56, Colonial Wings room, RO2",
            "receivingParty": "",
            "earlyBookingValidTill": "",
            "TourTypes": [
                {
                    "Key": 2,
                    "Value": "Стандартный тур"
                }
            ],
            "hotelScheme": {
                "templateId": 2,
                "durationInNight": 6,
                "code": 12610,
                "packetKey": 779,
                "partnerKey": 12685,
                "gdsProviderId": null,
                "totalTourDuration": 8
            },
            "hotels": [
                {
                    "countryId": 90,
                    "countryName": "Австрия",
                    "resortId": 35,
                    "resortName": "Вена",
                    "areaId": 1,
                    "areaName": "Карентия",
                    "hotelId": 12610,
                    "hotelName": "Отель для удаления 56",
                    "hotelUrl": null,
                    "hotelCategoryId": 668,
                    "hotelCategoryName": "1*",
                    "roomId": 132,
                    "roomName": "DBL+EXB",
                    "roomTypeId": 26,
                    "roomTypeName": "Colonial Wings room",
                    "htPlaceId": 1238,
                    "htPlaceName": "2 ADL",
                    "mealId": 46,
                    "mealName": "RO2",
                    "checkIn": "11.12.2024",
                    "checkOut": "17.12.2024",
                    "checkInTime": "14:00",
                    "checkOutTime": "8:00",
                    "latitude": "4.123840°",
                    "longitude": "36.300000°",
                    "htNights": 6,
                    "hotelIsInStop": 2,
                    "isGDS": 0,
                    "hotelScheme": {
                        "templateId": 2,
                        "durationInNight": 6,
                        "code": 12610,
                        "packetKey": 779,
                        "partnerKey": 12685,
                        "gdsProviderId": null,
                        "totalTourDuration": 8
                    }
                }
            ],
            "services": [
                {
                    "ServiceType": 1,
                    "Code": 1043,
                    "SubCode1": 67,
                    "SubCode2": 1,
                    "PacketId": 1037,
                    "PartnerId": null,
                    "CountryId": 90,
                    "CityId": 35,
                    "DateBegin": "10.12.2024",
                    "DateEnd": "11.12.2024",
                    "TimeBegin": "16:00",
                    "TimeEnd": "6:00",
                    "Day": 1,
                    "DurationInNight": 0,
                    "GDSProviderId": 82,
                    "Name": "А_П::Москва/Вена/SU2354, SVO4-VIE1, 16:00-06:00/C Бизнес класс",
                    "Price": null,
                    "Cost": null,
                    "Availability": 2,
                    "Tariffs": [
                        0
                    ]
                },
                {
                    "ServiceType": 3,
                    "Code": 12610,
                    "SubCode1": 66717,
                    "SubCode2": 46,
                    "PacketId": 779,
                    "PartnerId": null,
                    "CountryId": 90,
                    "CityId": 35,
                    "DateBegin": "11.12.2024",
                    "DateEnd": "17.12.2024",
                    "TimeBegin": null,
                    "TimeEnd": null,
                    "Day": 2,
                    "DurationInNight": 6,
                    "GDSProviderId": null,
                    "Name": "HOTEL::Вена/Отель для удаления 56-1*,6 [nights]/DBL+EXB(Colonial Wings room),2 ADL/RO2 RO2",
                    "Price": null,
                    "Cost": null,
                    "Availability": 2,
                    "Tariffs": [
                        1
                    ]
                },
                {
                    "ServiceType": 1,
                    "Code": 1076,
                    "SubCode1": 89,
                    "SubCode2": 35,
                    "PacketId": 1037,
                    "PartnerId": null,
                    "CountryId": 460,
                    "CityId": 1,
                    "DateBegin": "17.12.2024",
                    "DateEnd": "17.12.2024",
                    "TimeBegin": "17:00",
                    "TimeEnd": "21:00",
                    "Day": 8,
                    "DurationInNight": 0,
                    "GDSProviderId": 82,
                    "Name": "А_П::Вена/Москва/SU2355, VIE1-SVO4, 17:00-21:00/Y Basic (ручная кладь 20х30х40)",
                    "Price": null,
                    "Cost": null,
                    "Availability": 2,
                    "Tariffs": [
                        0
                    ]
                }
            ]
        },
        {
            "offerId": 102,
            "tourId": 100006755,
            "tourName": "Общая проверка системы (М_2)",
            "countryId": 90,
            "countryName": "Австрия",
            "resortId": 35,
            "resortName": "Вена",
            "areaId": -1,
            "areaName": null,
            "hotelId": 8661,
            "hotelName": "Continental5 Gardırop veya dolap, El dezenfektanı, Çay / Kah",
            "hotelUrl": "https://yandex.ruGardırop veya ",
            "hotelCategoryId": 64,
            "hotelCategoryName": "3*",
            "roomId": 141,
            "roomName": "2AD",
            "roomTypeId": 1939,
            "roomTypeName": "1 bedroom Jacuzzi Suite",
            "htPlaceId": 1238,
            "htPlaceName": "2 ADL",
            "mealId": 63,
            "mealName": "HH для удаления3",
            "tourDate": "10.12.2024",
            "tourEndDate": "17.12.2024",
            "nights": 8,
            "price": 110.0,
            "currencyId": 1,
            "currencyName": "USD",
            "hotelIsInStop": 2,
            "ticketsIncluded": 1,
            "hasEconomTicketsDpt": 2,
            "hasEconomTicketsRtn": 2,
            "hasBusinessTicketsDpt": 0,
            "hasBusinessTicketsRtn": 0,
            "hasAnotherEconomTicketsDpt": 2,
            "hasAnotherEconomTicketsRtn": 2,
            "hasAnotherBusinessTicketsDpt": 0,
            "hasAnotherBusinessTicketsRtn": 0,
            "hasGDSFlight": 1,
            "hasGDSHotel": 1,
            "tourUrl": "http://localhost/TourSearchClient/Basket?departureCities=1&destination=1_90&tour=100006755&date=10.12.24&duration=7&hotelScheme=1_6_8661_779_12667_0_8&adultCount=2&hotelQuota=7&aviaQuota=7&busTransferQuota=7&serviceDescriptions=3_17_17_1_1397_89_1_90_35_779_10760_1_0,18_0_0_2_1137_30_0_90_275_779_11246_1_0,1_0_0_3_8661_47289_63_90_35_779_12667_1_6,4_5_4_1_1059_285_35_460_1_779_10760_7_1&currency=USD",
            "spoUrl": "www.megatec.ru",
            "fewPlacesInHotel": null,
            "fewTicketsDptY": null,
            "fewTicketsRtnY": null,
            "fewTicketsDptB": null,
            "fewTicketsRtnB": null,
            "flags": 0,
            "description": "6 н., Вена, Continental5 Gardırop veya dolap, El dezenfektanı, Çay / Kah, 1 bedroom Jacuzzi Suite, HH3",
            "receivingParty": "",
            "earlyBookingValidTill": "",
            "TourTypes": [
                {
                    "Key": 2,
                    "Value": "Стандартный тур"
                }
            ],
            "hotelScheme": {
                "templateId": 1,
                "durationInNight": 6,
                "code": 8661,
                "packetKey": 779,
                "partnerKey": 12667,
                "gdsProviderId": null,
                "totalTourDuration": 8
            },
            "hotels": [
                {
                    "countryId": 90,
                    "countryName": "Австрия",
                    "resortId": 35,
                    "resortName": "Вена",
                    "areaId": -1,
                    "areaName": null,
                    "hotelId": 8661,
                    "hotelName": "Continental5 Gardırop veya dolap, El dezenfektanı, Çay / Kah",
                    "hotelUrl": "https://yandex.ruGardırop veya ",
                    "hotelCategoryId": 64,
                    "hotelCategoryName": "3*",
                    "roomId": 141,
                    "roomName": "2AD",
                    "roomTypeId": 1939,
                    "roomTypeName": "1 bedroom Jacuzzi Suite",
                    "htPlaceId": 1238,
                    "htPlaceName": "2 ADL",
                    "mealId": 63,
                    "mealName": "HH для удаления3",
                    "checkIn": "10.12.2024",
                    "checkOut": "16.12.2024",
                    "checkInTime": null,
                    "checkOutTime": null,
                    "latitude": "48.074409°",
                    "longitude": "15.971374°",
                    "htNights": 6,
                    "hotelIsInStop": 2,
                    "isGDS": 0,
                    "hotelScheme": {
                        "templateId": 1,
                        "durationInNight": 6,
                        "code": 8661,
                        "packetKey": 779,
                        "partnerKey": 12667,
                        "gdsProviderId": null,
                        "totalTourDuration": 8
                    }
                }
            ],
            "services": [
                {
                    "ServiceType": 1,
                    "Code": 1397,
                    "SubCode1": 89,
                    "SubCode2": 1,
                    "PacketId": 779,
                    "PartnerId": null,
                    "CountryId": 90,
                    "CityId": 35,
                    "DateBegin": "10.12.2024",
                    "DateEnd": "10.12.2024",
                    "TimeBegin": "1:35",
                    "TimeEnd": "2:40",
                    "Day": 1,
                    "DurationInNight": 0,
                    "GDSProviderId": null,
                    "Name": "А_П::Москва/Вена/AT234, DME-VIE1, 01:35-02:40/Y Basic (ручная кладь 20х30х40)",
                    "Price": null,
                    "Cost": null,
                    "Availability": 2,
                    "Tariffs": [
                        0
                    ]
                },
                {
                    "ServiceType": 2,
                    "Code": 1137,
                    "SubCode1": 30,
                    "SubCode2": 0,
                    "PacketId": 779,
                    "PartnerId": null,
                    "CountryId": 90,
                    "CityId": 275,
                    "DateBegin": "10.12.2024",
                    "DateEnd": "10.12.2024",
                    "TimeBegin": null,
                    "TimeEnd": null,
                    "Day": 1,
                    "DurationInNight": 0,
                    "GDSProviderId": null,
                    "Name": "Трансфер::Арльберг/Копия\r ТРАНСФЕР_12 (Аэропорт не выбран - отель не выбран)/Coach 14 чел.",
                    "Price": null,
                    "Cost": null,
                    "Availability": 1,
                    "Tariffs": null
                },
                {
                    "ServiceType": 3,
                    "Code": 8661,
                    "SubCode1": 47289,
                    "SubCode2": 63,
                    "PacketId": 779,
                    "PartnerId": null,
                    "CountryId": 90,
                    "CityId": 35,
                    "DateBegin": "10.12.2024",
                    "DateEnd": "16.12.2024",
                    "TimeBegin": null,
                    "TimeEnd": null,
                    "Day": 1,
                    "DurationInNight": 6,
                    "GDSProviderId": null,
                    "Name": "HOTEL::Вена/Continental5 Gardırop veya dolap, El dezenfektanı, Çay / Kah-3*,6 [nights]/2AD(1 bedroom Jacuzzi Suite),2 ADL/HH3 HH для удаления3",
                    "Price": null,
                    "Cost": null,
                    "Availability": 2,
                    "Tariffs": [
                        0
                    ]
                },
                {
                    "ServiceType": 1,
                    "Code": 1059,
                    "SubCode1": 285,
                    "SubCode2": 35,
                    "PacketId": 779,
                    "PartnerId": null,
                    "CountryId": 460,
                    "CityId": 1,
                    "DateBegin": "16.12.2024",
                    "DateEnd": "17.12.2024",
                    "TimeBegin": "20:00",
                    "TimeEnd": "2:00",
                    "Day": 7,
                    "DurationInNight": 0,
                    "GDSProviderId": null,
                    "Name": "А_П::Вена/Москва/AT333, VIE1-DME, 20:00-02:00/DAF Бизнес класс",
                    "Price": null,
                    "Cost": null,
                    "Availability": 2,
                    "Tariffs": [
                        0
                    ]
                }
            ]
        },
"nodeId": 1
}


Актуализация тура (ActualizeTour)

Метод служит для получения окончательной цены тура (со всеми обязательными доплатами и сборами), списка включенных в стоимость тура услуг, а также вариантов перелета, возможных дополнительных услуг и доплат по ним. Метод должен возвращать цену самой дешевой конфигурации запрашиваемого предложения. Для корректной работы метода необходимо, чтобы offerId был уникален для предложений с разным составом группы туристов, даже в случае если все прочие параметры предложений совпадают.

  • Формат запроса:
    •  ?action=ActualizeTour
  • Принимаемые параметры ( * – обязательный):
    • offerId * – уникальный идентификатор ранее найденного предложения.
    • currencyId * – валюта, в которой рассчитывается цена и доплаты.
    • nodeId – уникальный идентификатор узла в кластере балансировки нагрузки HaProxy
Значение nodeid берется из ответов gettours и gettourallprices
Значение nodeid для каждого запроса методов gettours и gettourallprices берется из конфига службы поиска (если не указан, то берется предопределенное значение 2147483647). Полученное значение необходимо сопоставлять для каждого offerid.
  • Возвращаемый результат ( * – обязательный):
    • price * – актуализированная цена тура в валюте, которая была указана во входном параметре currencyId.
    • ticketsIsIncluded * – включена ли стоимость билетов в стоимость тура, допустимы значения: 0 – не включена (тур только отель), 1 – включена (пакетный тур).
    • hotelIsInStop – наличие мест в отеле, допустимы значения: 0 – есть места, 1 – нет мест, 2 – запрос.
    • hasEconomTicketsDpt – наличие билетов эконом класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
    • hasAnotherEconomTicketsDpt – наличие билетов эконом класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке flightTariffGroups.
    • hasEconomTicketsRtn – наличие обратных билетов эконом класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
    • hasAnotherEconomTicketsRtn – наличие обратных билетов эконом класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке flightTariffGroups.
    • hasBusinessTicketsDpt – наличие билетов бизнес класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
    • hasAnotherBusinessTicketsDpt – наличие билетов бизнес класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке flightTariffGroups.
    • hasBusinessTicketsRtn – наличие обратных билетов бизнес класса из рассчитанной цены, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано.
    • hasAnotherBusinessTicketsRtn – наличие обратных билетов бизнес класса из групп перелетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. При значении атрибута ticketsIncluded = 0 значение данного параметра будет проигнорировано. Группы перелетов задаются в настройке flightTariffGroups.
    • fewPlacesInHotel – числовое значение мест в отеле. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • fewEconomTicketsDpt – числовое значение мест прямого перелета эконом класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • fewEconomTicketsRtn – числовое значение мест обратного перелета эконом класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • fewBusinessTicketsDpt – числовое значение мест прямого перелета бизнес класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • fewBusinessTicketsRtn – числовое значение мест обратного перелета бизнес класса. По умолчанию поле возвращается с пустым значением. Если удовлетворяются условия, заданные в настройке "Мало", но не включена настройка "Отображать числовое значение оставшихся мест" в панели администрирования, то возвращается значение «-1». Если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест", то возвращается числовое значение того количества мест, которое осталось.
    • tourUrl – ссылка на корзину (при переходе по которой можно забронировать тур).
    • services – список услуг, которые могут быть в туре
      • id * – идентификатор услуги, уникальный в рамках данного предложения.
      • type * – Тип услуги. Может принимать одно из следующих значений:
        • HotelInfo – отель
        • Insurance – страховка
        • DptTransport – перелет туда
        • RtnTransport – перелет обратно
        • MidDptTransport – промежуточный перелет туда (при пересадке)
        • MidRtnTransport – промежуточный перелет обратно (при пересадке)
        • AdditionalService – дополнительная услуга
        • Transfer – трансфер
        • Excursion – экскурсия
        • Visa – виза
      • name * – наименование услуги
      • isIncluded * – включена ли данная услуга в стоимость текущей конфигурации тура, допустимы значения: 0 – не включена, 1 – включена.
      • description – описание услуги в произвольной форме (не обрабатывается).
      • surcharge – стоимость услуги.
      • flightCompatibleIds – совместимые перелеты. Идентификаторы услуг перелетов, представленных в секции services, которые могут применяться совместно с текущей услугой перелета. Для перелета туда заполняется id перелетов обратно и наоборот. Применяется и является обязательным только для услуг типа: DptTransport, RtnTransport, MidDptTransport, MidRtnTransport.
      • flightClass – класс перелета. Группы перелетов для классов задаются в настройке flightTariffGroups. Применяется и является обязательным только для услуг типа: DptTransport, RtnTransport, MidDptTransport, MidRtnTransport. Может принимать одно из следующих значений:
        • ECONOM – эконом
        • BUSINESS – бизнес
      • flightAvailability – наличие билетов, допустимы значения: 0 – нет мест, 1 есть места, 2 – запрос. Применяется и является обязательным только для услуг типа: DptTransport, RtnTransport, MidDptTransport, MidRtnTransport.
      • flightPlacesCount – параметр не обрабатывается, всегда возвращается -1.
      • flightAirportFrom – код аэропорта вылета. Применяется и является обязательным только для услуг типа: DptTransport, RtnTransport, MidDptTransport, MidRtnTransport.
      • flightAirportTo – код аэропорта прилета. Применяется и является обязательным только для услуг типа: DptTransport, RtnTransport, MidDptTransport, MidRtnTransport.
      • flightNum – код авиакомпании и номер рейса. Применяется и является обязательным только для услуг типа: DptTransport, RtnTransport.
      • flightAirline – код авиакомпании. Применяется только для услуг типа: DptTransport, RtnTransport, MidDptTransport, MidRtnTransport.
      • flightStartDateTime – Дата и время вылета в формате dd.MM.yyyy HH:mm (пример: 31.12.2016 14:30). Применяется только для услуг типа: DptTransport, RtnTransport, MidDptTransport, MidRtnTransport.
      • flightEndDateTime – Дата и время прилета в формате dd.MM.yyyy HH:mm (пример: 31.12.2016 14:30). Применяется только для услуг типа: DptTransport, RtnTransport, MidDptTransport, MidRtnTransport.
      • flightAircraft – тип самолета. Применяется только для услуг типа: DptTransport, RtnTransport, MidDptTransport, MidRtnTransport.
      • isGDS – информация о том, локальный отель или из GDS системы: 0 – локальный отель, 1 – отель из GDS. Начиная с релиза 15.5.
      • cancelationPolicy – информация о правилах аннуляции из GDS систем. Начиная с релиза 15.5.
        • Date – дата наступления штрафа
        • Amount – величина штрафа
        • Currency – валюта штрафа
        • Info – информация по штрафу
      • bookingAdditionalInfo – информация об отеле из GDS систем. Начиная с релиза 15.5.
        • DateFrom – дата действия предложения с
        • DateTo – дата действия предложения по
        • Message – информация
Начиная с релиза 15.8 был добавлен блок flightGDSRequest, возвращающий данные по внешним перелетам. Если в туре используется перелет из GDS, то ответ из секции flightGDSRequest метода API ActualizeTour передается в метод GetGDSFlights. Далее для получения цены выполняем методы RebuidFlights и CalculateReservation. 
    • flightGDSRequest – общий блок информации о внешних перелетах
      • flightsSource – блок, который возвращает информацию по перелетам
        • flightSettings – информация о шаблоне услуги авиаперелета
          • templateId – идентификатор шаблона услуги
          • patternId – идентификатор паттерна услуги (внутренняя информация из программы туров)
          • serviceId – идентификатор класса услуги (внутренняя информация из программы туров)
        • service – информация об услуге авиаперелета
          • ServiceType – тип услуги
          • Code – ключ услуги
          • SubCode1доп. описание 1
          • SubCode2доп. описание 2
          • CountryId – страна услуги
          • CityId – город услуги
          • PacketId – пакет услуги
          • PartnerId – партнер услуги
          • Day – день предоставления услуги
          • DurationInNight – продолжительность услуги в ночах
        • price – стоимость перелета
        • quotaInfo – объект информация по квотам
          • status – статус по квотам (есть места / нет мест / под запрос)
          • freePlaces – количество свободных мест, если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест". Иначе возвращается 0. Если в данном параметре 0, то руководствоваться следует значением, полученном в параметре PlacesStatus.
          • isFewPlaces – выполнены ли условия, заданные в настройке "Мало": true – если заданы условия количества мест "Мало" и данные условия выполнены, false – если не заданы условия количества мест "Мало" или они заданы, но не выполнены.
        • flightDateTimeLimitationInterval
          • startLimitation – начало тайм-лимита
          • finishLimitation – объект тайм-лимита
            • dateTimeString – дата окончания тайм-лимита
            • serviceType – тип услуги
            • serviceCode – код услуги
        • flightSourceMode – тип перелета (1 – локальный, 2 – из внешний системы)
        • passengers – информация о пассажирах
          • IsMain – главный турист
          • Number – порядковый номер туриста
          • AgeType – тип туриста (0 – взрослый, 1 – ребенок, 2 – инфант)
          • MaleFemaleSex – пол (0 – мужской, 1 – женский)
          • FirstName – имя (лат)
          • LastName – фамилия (лат)
          • Patronymic – отчество (лат)
          • FirstNameRus – имя (рус)
          • LastNameRus – фамилия (рус)
          • PatronymicRus – отчество (рус)
          • InternationalPassportSeries – серия загранпаспорта
          • InternationalPassportNumber – номер загранпаспорта
          • InternationalPassportDateOfIssue – дата выдачи загранпаспорта (YYYY-MM-DDThh:mm:ssz)
          • InternationalPassportDateOfIssueString – дата выдачи загранпаспорта в строке (DD.MM.YYYY)
          • InternationalPassportDateOfExpiry – дата окончания действия загранпаспорта (YYYY-MM-DDThh:mm:ssz)
          • InternationalPassportDateOfExpiryString – дата окончания действия загранпаспорта в строке (DD.MM.YYYY)
          • internationalPassportByWhom – кем выдан загранпаспорт
          • PassportSeries – серия паспорта
          • PassportNumber – номер паспорта
          • PassportDateOfIssue – дата выдачи паспорта (YYYY-MM-DDThh:mm:ssz)
          • PassportDateOfIssueString – дата выдачи паспорта в строке (DD.MM.YYYY)
          • PassportByWhom – кем выдан паспорт
          • Citizenship – название страны
          • Phone – телефон
          • Email – e-mail
          • BirthDay – дата рождения (YYYY-MM-DDThh:mm:ssz)
          • BirthDayString – дата рождения в строковом формате (DD.MM.YYYY)
          • BirthPlace – место рождения
          • CitizenID – гражданство
          • Age – количество полных лет на момент окончания тура
        • tourDate – дата тура
        • tourCurrency – валюта тура
        • tourId – ключ программы тура
        • filterTariff – информация о тарифах
        • filterDeptime – информация о времени вылета
        • isCommission – признак комиссионной цены
        • baseFlightsParams – параметра авиаперелета
          • CityArrival – город прибытия
          • FlightCode – код авиаперелета
          • TariffKey – ключ тарифа
          • PartnerId – ключ партнера
        • isUpdated – информация об обновлении перелета
        • key – ключ запроса
        • tourDurationByDays – продолжительность перелета
        • langueCode – локализация
Начиная с релиза 15.9 был добавлен блок servicesCalculateReservations (регулируется настройкой showServiceDescriptionForActualizeTour в конфигурационном файле TourSearchOwin), возвращающий детальную информацию об услугах в туре, идентичную методу Tour или Simple.
    • showServiceDescriptionForActualizeTour – общий блок информации об услугах в туре
      • {} – блок, который возвращает информацию по услугам
        • DepartureCity – город отправления
          • Key – идентификатор
          • Value – название
        • DepartureCountry – страна отправления
          • Key – идентификатор
          • Value – название
        • ArrivalCity – город прибытия
          • Key – идентификатор
          • Value – название
        • ArrivalCountry – страна прибытия
          • Key – идентификатор
          • Value – название
        • DepartureAirport – аэропорт отправления
          • Key – идентификатор
          • Value – название
        • ArrivalAirport – аэропорт прибытия
          • Key – идентификатор
          • Value – название
        • Airline – авиакомпания
          • Key – идентификатор
          • Value – название
        • Aircraft – воздушное судно
          • Key – идентификатор
          • Value – название
        • Flight – рейс
          • Key – идентификатор
          • Value – название
        • DepartureTime – время вылета
        • ArrivalTime – время прилета
        • TotalTimeOfFlight – полное время перелета
        • FlightDetails – детали авиаперелета
          • Tariff – информация о тарифе перелета
            • Key – идентификатор
            • Code – код тарифа
            • Name – наименование тарифа
          • IsCommission – признак, комиссионная ли услуга
          • Cost – разница в стоимости с самым дешевым вариантом
          • QuotaStatus – информация о квоте
            • PlacesStatus – статус по квотам (есть места / нет мест / под запрос)
            • FreePlaces – количество свободных мест, если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест". Иначе возвращается 0. Если в данном параметре 0, то руководствоваться следует значением, полученном в параметре PlacesStatus.
            • IsFewPlaces – выполнены ли условия, заданные в настройке "Мало": true – если заданы условия количества мест "Мало" и данные условия выполнены, false – если не заданы условия количества мест "Мало" или они заданы, но не выполнены.
          • PartnerId – ключ партнера
          • ByPax – цена за человека (true/false)
          • Partner – информация о партнере
            • Key – идентификатор
            • Value – наименование
        • FlightSetting – информация о шаблоне услуги авиаперелета
          • ServiceId – идентификатор класса услуги (внутренняя информация из программы туров)
          • PatternId – идентификатор паттерна услуги (внутренняя информация из программы туров)
          • FlightId – идентификатор внешнего перелета
        • FlightSourceMode – локальный или внешний перелет (внутренняя информация из программы туров)
        • Id – идентификатор базового шаблона услуги (внутренняя информация из программы туров)
        • SvKey – ключ типа услуги
        • IsSubCode1 – признак наличия доп. описания 1
        • IsSubCode2 – признак наличия доп. описания 2
        • IsPartnerBasedOn – признак услуга с приоритетным подбором поставщика
        • Day – день предоставления услуги
        • DurationInNight – продолжительность услуги в ночах
        • BeginDateTime – дата предоставления услуги
        • EndDateTime – дата окончания услуги
        • IsHooded – признак скрытая услуга
        • IsDeleted – признак удаляемая услуга
        • IsNotCalculate – признак не рассчитываемая услуга
        • PacketId – ключ пакета
        • Index – порядковый номер услуги
        • Hotel – отель
          • Key – ключ отеля
          • Value – наименование отеля
        • City – город
          • Key – ключ города
          • Value – наименование города
        • Stars – категория отеля
          • Key – ключ категории отеля
          • Value – наименование категории отеля
        • StarsGlobalCode – глобальный код категории отеля
          • Key – глобальный ключ категории отеля
          • Value – наименование категории отеля
        • Resort – курорт
          • Key – ключ курорта
          • Value – наименование курорта
        • ImageURL – ссылка на лого отеля
        • Http – ссылка на сайт отеля
        • Description – описание
        • Latitude – GPS координаты: географическая широта
        • Longitude – GPS координаты: географическая долгота
        • Country – страна
          • Key – ключ страны
          • Value – наименование страны
        • HotelDetails – массив данных отель
          • HotelRoom – категория номера
          • Room – номер
            • Key – ключ номера
            • Value – наименование номера
          • RoomCategory – тип номера
            • Key – ключ типа номера
            • Value – наименование типа номера
          • AccomodationType – тип размещения
            • Key – ключ типа размещения
            • Value – наименование типа размещения
            • AdultCount – количество взрослых
            • ChildCount – количество детей
          • Pansion – тип питания
            • Key – ключ типа питания
            • Value – наименование типа питания
          • PansionGlobalCode – глобальный код типа питания
            • Key – ключ типа питания
            • Value – наименование типа питания
          • RemoteId – не используется
          • Cost – разница в стоимости с самым дешевым вариантом
          • QuotaStatus – информация о квоте
            • PlacesStatus – статус по квотам (есть места-1 / нет мест-2 / под запрос-4)
            • FreePlaces – количество свободных мест, если удовлетворяются условия, заданные в настройке "Мало" и включена настройка "Отображать числовое значение оставшихся мест". Иначе возвращается 0. Если в данном параметре 0, то руководствоваться следует значением, полученном в параметре PlacesStatus.
            • IsFewPlaces – выполнены ли условия, заданные в настройке "Мало": true – если заданы условия количества мест "Мало" и данные условия выполнены, false – если не заданы условия количества мест "Мало" или они заданы, но не выполнены.
          • PartnerId – ключ партнера
          • ByPax – цена за человека (true/false)
          • Partner – информация о партнере
            • Key – идентификатор
            • Value – название
        • HotelTypes – признаки отелей в дополнительных фильтрах
          • Key – ключ
          • Value – значение
        • RemoteId – не используется
        • COAndSpecialsInfo – формирует, фильтрует и выдаёт списки применённых акций и ценовых блоков
          • AppliedCostOffersKeys – коллекция идентификаторов всех применённых ценовых блоков к одной цене
          • AppliedSpeciasInfo – коллекция всех применённых акций к одной цене, содержит информацию об условиях, с которыми применилась каждая акция
        • Id – идентификатор базового шаблона услуги (внутренняя информация из программы туров)
        • SvKey – ключ типа услуги
        • IsSubCode1 – признак наличия доп. описания 1
        • IsSubCode2 – признак наличия доп. описания 2
        • IsPartnerBasedOn – признак услуга с приоритетным подбором поставщика
        • Day – день предоставления услуги
        • DurationInNight – продолжительность услуги в ночах
        • BeginDateTime – дата предоставления услуги
        • EndDateTime – дата окончания услуги
        • IsHooded – признак скрытая услуга
        • IsDeleted – признак удаляемая услуга
        • IsNotCalculate – признак не рассчитываемая услуга
        • PacketId – ключ пакета
        • Index – порядковый номер услуги
Пример

Вызов метода ActualizeTour

http://localhost:9000/TourSearchOwin/searchApi?action=ActualizeTour&offerID=256&currencyId=1

Возвращаемый результат метода ActualizeTour (в формате JSON)

{
    "version": "1.08",
    "actualizedTour": {
        "price": 201,
        "ticketsIsIncluded": 1,
        "hotelIsInStop": 2,
        "hasEconomTicketsDpt": 0,
        "hasEconomTicketsRtn": 2,
        "hasBusinessTicketsDpt": 2,
        "hasBusinessTicketsRtn": 0,
        "hasAnotherEconomTicketsDpt": 0,
        "hasAnotherEconomTicketsRtn": 0,
        "hasAnotherBusinessTicketsDpt": 0,
        "hasAnotherBusinessTicketsRtn": 2,
        "fewPlacesInHotel": null,
        "fewEconomTicketsDpt": null,
        "fewEconomTicketsRtn": null,
        "fewBusinessTicketsDpt": null,
        "fewBusinessTicketsRtn": null,
        "tourUrl": "http://localhost/TourSearchClient/Basket?departureCities=1&destination=1_90&tour=100011349&date=01.11.22&duration=8&hotelScheme=3_7_178_779_12667_0_8&adultCount=2&hotelQuota=7&aviaQuota=7&busTransferQuota=7&serviceDescriptions=1_0_0_1_1448_67_1_90_35_1037_12792_1_0,3_0_0_3_178_13125_4_90_35_779_12667_1_7,2_1_0_1_1076_89_35_460_1_1037_12792_8_0&currency=USD",
        "services": [{
                "id": 0,
                "type": "DptTransport",
                "name": "А_П::Москва/Вена/3G000, DME-VIE1, 10:00-13:00/C Бизнес класс",
                "isIncluded": 1,
                "description": "",
                "surcharge": 0,
                "flightCompatibleIds": "2",
                "flightClass": "BUSINESS",
                "flightAvailability": 2,
                "flightPlacesCount": -1,
                "flightAirportFrom": "DME",
                "flightAirportTo": "VIE1",
                "flightNum": "3G 000",
                "flightAirline": "3G",
                "flightStartDateTime": "01.11.2022 15:00",
                "flightEndDateTime": "01.11.2022 18:00",
                "flightAircraft": "757",
                "isGDS": 1,
                "cancelationPolicy": null,
                "bookingAdditionalInfo": null
            }, {
                "id": 1,
                "type": "HotelInfo",
                "name": "HOTEL::Вена/Ananas-5+++*,7 [nights]/Double(D Suite),2Ad/BB2 Завтрак",
                "isIncluded": 1,
                "description": "",
                "surcharge": 0,
                "flightCompatibleIds": null,
                "flightClass": null,
                "flightAvailability": -1,
                "flightPlacesCount": -1,
                "flightAirportFrom": null,
                "flightAirportTo": null,
                "flightNum": " ",
                "flightAirline": null,
                "flightStartDateTime": null,
                "flightEndDateTime": null,
                "flightAircraft": null,
                "isGDS": 0,
                "cancelationPolicy": null,
                "bookingAdditionalInfo": null
            }, {
                "id": 2,
                "type": "RtnTransport",
                "name": "А_П::Вена/Москва/SU2355, VIE1-SVO4, 00:10-04:50/Y Экономический класс",
                "isIncluded": 1,
                "description": "",
                "surcharge": 0,
                "flightCompatibleIds": "0",
                "flightClass": "ECONOM",
                "flightAvailability": 2,
                "flightPlacesCount": -1,
                "flightAirportFrom": "VIE1",
                "flightAirportTo": "SVO4",
                "flightNum": "SU 2355",
                "flightAirline": "SU",
                "flightStartDateTime": "08.11.2022 00:10",
                "flightEndDateTime": "08.11.2022 04:50",
                "flightAircraft": "321",
                "isGDS": 1,
                "cancelationPolicy": null,
                "bookingAdditionalInfo": null
            }
        ],
        "flightGDSRequest": {
            "flightsSource": [{
                    "flightSettings": {
                        "templateId": 1,
                        "patternId": 0,
                        "serviceId": 0
                    },
                    "service": {
                        "serviceType": 1,
                        "code": 1448,
                        "subCode1": 67,
                        "subCode2": 1,
                        "countryId": 90,
                        "cityId": 35,
                        "packetId": 1037,
                        "partnerId": 12792,
                        "day": 1,
                        "durationInNight": 0
                    },
                    "price": 40,
                    "quotaInfo": {
                        "status": 4,
                        "freePlaces": 0,
                        "isFewPlaces": false
                    },
                    "flightDateTimeLimitationInterval": {
                        "startLimitation": {
                            "dateTimeString": "2022-11-01T15:00:00",
                            "serviceType": 1,
                            "serviceCode": 1448
                        },
                        "finishLimitation": {
                            "dateTimeString": "2022-11-01T18:00:00",
                            "serviceType": 1,
                            "serviceCode": 1448
                        }
                    },
                    "flightSourceMode": 2
                }, {
                    "flightSettings": {
                        "templateId": 2,
                        "patternId": 1,
                        "serviceId": 0
                    },
                    "service": {
                        "serviceType": 1,
                        "code": 1076,
                        "subCode1": 89,
                        "subCode2": 35,
                        "countryId": 460,
                        "cityId": 1,
                        "packetId": 1037,
                        "partnerId": 12792,
                        "day": 8,
                        "durationInNight": 0
                    },
                    "price": 20,
                    "quotaInfo": {
                        "status": 4,
                        "freePlaces": 0,
                        "isFewPlaces": false
                    },
                    "flightDateTimeLimitationInterval": {
                        "startLimitation": {
                            "dateTimeString": "2022-11-08T00:10:00",
                            "serviceType": 1,
                            "serviceCode": 1076
                        },
                        "finishLimitation": {
                            "dateTimeString": "2022-11-08T04:50:00",
                            "serviceType": 1,
                            "serviceCode": 1076
                        }
                    },
                    "flightSourceMode": 2
                }
            ],
            "passengers": [{
                    "IsMain": true,
                    "Number": 1,
                    "AgeType": 0,
                    "MaleFemaleSex": 0,
                    "FirstName": "",
                    "LastName": "",
                    "Patronymic": "",
                    "FirstNameRus": "",
                    "LastNameRus": "",
                    "PatronymicRus": "",
                    "InternationalPassportSeries": "",
                    "InternationalPassportNumber": "",
                    "InternationalPassportDateOfIssue": "",
                    "InternationalPassportDateOfIssueString": "",
                    "InternationalPassportDateOfExpiry": "",
                    "InternationalPassportDateOfExpiryString": "",
                    "internationalPassportByWhom": "",
                    "PassportSeries": "",
                    "PassportNumber": "",
                    "PassportDateOfIssue": "",
                    "PassportDateOfIssueString": "",
                    "PassportByWhom": "",
                    "Citizenship": "",
                    "Phone": "",
                    "Email": "",
                    "BirthDay": "",
                    "BirthDayString": "",
                    "BirthPlace": "",
                    "CitizenID": "",
                    "Age": 18
                }, {
                    "IsMain": false,
                    "Number": 2,
                    "AgeType": 0,
                    "MaleFemaleSex": 0,
                    "FirstName": "",
                    "LastName": "",
                    "Patronymic": "",
                    "FirstNameRus": "",
                    "LastNameRus": "",
                    "PatronymicRus": "",
                    "InternationalPassportSeries": "",
                    "InternationalPassportNumber": "",
                    "InternationalPassportDateOfIssue": "",
                    "InternationalPassportDateOfIssueString": "",
                    "InternationalPassportDateOfExpiry": "",
                    "InternationalPassportDateOfExpiryString": "",
                    "internationalPassportByWhom": "",
                    "PassportSeries": "",
                    "PassportNumber": "",
                    "PassportDateOfIssue": "",
                    "PassportDateOfIssueString": "",
                    "PassportByWhom": "",
                    "Citizenship": "",
                    "Phone": "",
                    "Email": "",
                    "BirthDay": "",
                    "BirthDayString": "",
                    "BirthPlace": "",
                    "CitizenID": "",
                    "Age": 18
                }
            ],
            "tourDate": "2022-11-01T00:00:00",
            "tourCurrency": "$",
            "tourId": 100011349,
            "filterTariff": null,
            "filterDeptime": [
                "all"
            ],
            "isCommission": true,
            "baseFlightsParams": [{
                    "CityArrival": 35,
                    "FlightCode": 1448,
                    "TariffKey": 67,
                    "PartnerId": 12792
                }, {
                    "CityArrival": 1,
                    "FlightCode": 1076,
                    "TariffKey": 89,
                    "PartnerId": 12792
                }
            ],
            "isUpdated": false,
            "key": 0,
            "tourDurationByDays": 8,
            "langueCode": "ru",
            "isCanary": false
        }
    }
}


Пример работы с методами

Для примера вызываем метод GetToursAllPrices со следующими параметрами:
Ea 492.png
Результат работы метода: Выдано 5 вариантов, в соответствии с отправленным в запросе параметром count=5
Ea 493.png
Внутри каждого результата имеется подробная информация о туре (страна, город, отель, описание и т.д.). На основе этих данных, мы уже можем вызвать «переход в корзину».
Выбираем понравившийся нам вариант и далее формируем запрос вида (все необходимые данные мы возьмем из выбранного нами варианта):
http://localhost:9000/TourSearchOwin/Tour?DepartureCityKeys=1&DestinationType=1&DestinationKey=90&Dates=24.03.24&Durations=6&AdultCount=2&CurrencyName=%24&HotelQuota=7&AviaQuota=7&BusTransferQuota=7&HotelScheme=%5B%7B%22TemplateId%22%3A%221%22%2C%22DurationInNight%22%3A%225%22%2C%22Code%22%3A%22112322%22%2C%22PacketKey%22%3A%22779%22%2C%22PartnerKey%22%3A%2212667%22%2C%22GDSProviderId%22%3A%220%22%2C%22TotalTourDuration%22%3A%227%22%7D%5D&TourKey=100011540&TourDuration=6&PageNumber=1&PageSize=20&IsFromBasket=true&isFillSecondaryFilters=false&RemoteHotelMode=1
Ea 494.png
А результатом работы будет список рассчитанных вариантов тура (варианты зависят от маршрутных услуг).
Далее, мы выбираем понравившийся нам результат. И готовимся формировать запрос CalculateReservation - это POST метод, который передает объект.
http://localhost:9000/TourSearchOwin/CalculateReservation
Данные для формирования CalculateReservation берем из предыдущего запроса:

"tourProgramId": 100011540,
    "beginDate": "2024-03-24T00:00:00",
    "duration": 7,
    "currency": "$",
    "initialPrice": {
        "price": 80,
        "currency": "$"    },


Это данные туриста, эти данные заполняются на форме. Сейчас здесь данные по умолчанию (форма туристы не заполнена).

"tourists": [
        {
            "IsMain": true,
            "Number": 1,
            "AgeType": 0,
            "MaleFemaleSex": 0,
            "FirstName": "",
            "LastName": "",
            "Patronymic": "",
            "EnableSmsNotifications": null,
            "Howdidyouhear": "",
            "Residenceregion": "",
            "FirstNameRus": "",
            "LastNameRus": "",
            "PatronymicRus": "",
            "InternationalPassportSeries": "",
            "InternationalPassportNumber": "",
            "InternationalPassportDateOfIssue": "",
            "InternationalPassportDateOfIssueString": "",
            "InternationalPassportDateOfExpiry": "",
            "InternationalPassportDateOfExpiryString": "",
            "internationalPassportByWhom": "",
            "PassportSeries": "",
            "PassportNumber": "",
            "PassportDateOfIssue": "",
            "PassportDateOfIssueString": "",
            "PassportByWhom": "",
            "Citizenship": "",
            "Phone": "",
            "Email": "",
            "BirthDay": "",
            "BirthDayString": "",
            "BirthPlace": "",
            "CitizenID": "",
            "Age": 19
        },
        {
            "IsMain": false,
            "Number": 2,
            "AgeType": 0,
            "MaleFemaleSex": 0,
            "FirstName": "",
            "LastName": "",
            "Patronymic": "",
            "EnableSmsNotifications": null,
            "Howdidyouhear": "",
            "Residenceregion": "",
            "FirstNameRus": "",
            "LastNameRus": "",
            "PatronymicRus": "",
            "InternationalPassportSeries": "",
            "InternationalPassportNumber": "",
            "InternationalPassportDateOfIssue": "",
            "InternationalPassportDateOfIssueString": "",
            "InternationalPassportDateOfExpiry": "",
            "InternationalPassportDateOfExpiryString": "",
            "internationalPassportByWhom": "",
            "PassportSeries": "",
            "PassportNumber": "",
            "PassportDateOfIssue": "",
            "PassportDateOfIssueString": "",
            "PassportByWhom": "",
            "Citizenship": "",
            "Phone": "",
            "Email": "",
            "BirthDay": "",
            "BirthDayString": "",
            "BirthPlace": "",
            "CitizenID": "",
            "Age": 19
        }
    ],


Далее заполняем услуги. Также берем из предыдущего запроса из секции Services.

"FlightSetting": {
                        "ServiceId": 3,
                        "PatternId": 17,
                        "FlightId": 17
                    },
"IsHooded": false,
"IsDeleted": false,
"IsNotCalculate": false,


Благодаря этим параметрам мы можем определять значение Attributes и Type: IsHooded - это isInvisible isRemovable - это IsDeleted isNotCalculated - это IsNotCalculate Формируем следующее тело запроса:

{
    "tourProgramId": 100011540,
    "beginDate": "2024-03-24T00:00:00",
    "duration": 7,
    "currency": "$",
    "initialPrice": {
        "price": 80,
        "currency": "$"
    },
    "services": [
        {
            "Service": {
                "ServiceType": 3,
                "Code": 112322,
                "SubCode1": 1082739,
                "SubCode2": 39,
                "Packet": 779,
                "Partner": 12667,
                "Day": 1,
                "DurationInNight": 5,
                "City": 35,
                "Country": 90,
                "Attributes": 0,
                "IsRemovable": false,
                "Type": 1,
                "IsHooded": false,
                "IsNotCalculated": false,
                "BeginDateTimeString": "2024-03-24T17:00:00",
                "EndDateTimeString": "2024-03-29T17:00:00",
                "TemplateId": 1,
                "Cost": 0,
                "ByPax": false,
                "QuotaStatus": {
                    "PlacesStatus": 4,
                    "FreePlaces": 0,
                    "IsFewPlaces": false
                },
                "Index": 1,
                "IsRoute": true,
                "ServiceTemplateIndex": 1,
                "RemoteId": null,
                "IsCommission": true,
                "BaseFlightsParams": [
                    {
                        "CityArrival": 35,
                        "FlightCode": 773,
                        "TariffKey": 67,
                        "PartnerId": 10760
                    },
                    {
                        "CityArrival": 1,
                        "FlightCode": 1059,
                        "TariffKey": 89,
                        "PartnerId": 10760
                    }
                ]
            },
            "TouristNumbersList": [
                1,
                2
            ]
        },
        {
            "Service": {
                "ServiceType": 1,
                "Code": 773,
                "SubCode1": 67,
                "SubCode2": 1,
                "Packet": 779,
                "Partner": 10760,
                "Day": 1,
                "DurationInNight": 0,
                "City": 35,
                "Country": 90,
                "Attributes": 0,
                "IsRemovable": false,
                "Type": 1,
                "IsHooded": false,
                "IsNotCalculated": false,
                "BeginDateTimeString": "2024-03-24T16:00:00",
                "EndDateTimeString": "2024-03-24T17:00:00",
                "TemplateId": 3,
                "Cost": 0,
                "ByPax": true,
                "QuotaStatus": {
                    "PlacesStatus": 4,
                    "FreePlaces": 0,
                    "IsFewPlaces": false
                },
                "Index": 0,
                "IsRoute": true,
                "ServiceTemplateIndex": 0,
                "IsCommission": true,
                "BaseFlightsParams": [
                    {
                        "CityArrival": 35,
                        "FlightCode": 773,
                        "TariffKey": 67,
                        "PartnerId": 10760
                    },
                    {
                        "CityArrival": 1,
                        "FlightCode": 1059,
                        "TariffKey": 89,
                        "PartnerId": 10760
                    }
                ]
            },
            "TouristNumbersList": [
                1,
                2
            ]
        },
        {
            "Service": {
                "ServiceType": 1,
                "Code": 1059,
                "SubCode1": 89,
                "SubCode2": 35,
                "Packet": 779,
                "Partner": 10760,
                "Day": 6,
                "DurationInNight": 1,
                "City": 1,
                "Country": 460,
                "Attributes": 0,
                "IsRemovable": false,
                "Type": 1,
                "IsHooded": false,
                "IsNotCalculated": false,
                "BeginDateTimeString": "2024-03-29T20:00:00",
                "EndDateTimeString": "2024-03-30T02:00:00",
                "TemplateId": 4,
                "Cost": 0,
                "ByPax": true,
                "QuotaStatus": {
                    "PlacesStatus": 4,
                    "FreePlaces": 0,
                    "IsFewPlaces": false
                },
                "Index": 2,
                "IsRoute": true,
                "ServiceTemplateIndex": 2,
                "IsCommission": true,
                "BaseFlightsParams": [
                    {
                        "CityArrival": 35,
                        "FlightCode": 773,
                        "TariffKey": 67,
                        "PartnerId": 10760
                    },
                    {
                        "CityArrival": 1,
                        "FlightCode": 1059,
                        "TariffKey": 89,
                        "PartnerId": 10760
                    }
                ]
            },
            "TouristNumbersList": [
                1,
                2
            ]
        }
    ],
    "tourists": [
        {
            "IsMain": true,
            "Number": 1,
            "AgeType": 0,
            "MaleFemaleSex": 0,
            "FirstName": "",
            "LastName": "",
            "Patronymic": "",
            "EnableSmsNotifications": null,
            "Howdidyouhear": "",
            "Residenceregion": "",
            "FirstNameRus": "",
            "LastNameRus": "",
            "PatronymicRus": "",
            "InternationalPassportSeries": "",
            "InternationalPassportNumber": "",
            "InternationalPassportDateOfIssue": "",
            "InternationalPassportDateOfIssueString": "",
            "InternationalPassportDateOfExpiry": "",
            "InternationalPassportDateOfExpiryString": "",
            "internationalPassportByWhom": "",
            "PassportSeries": "",
            "PassportNumber": "",
            "PassportDateOfIssue": "",
            "PassportDateOfIssueString": "",
            "PassportByWhom": "",
            "Citizenship": "",
            "Phone": "",
            "Email": "",
            "BirthDay": "",
            "BirthDayString": "",
            "BirthPlace": "",
            "CitizenID": "",
            "Age": 19
        },
        {
            "IsMain": false,
            "Number": 2,
            "AgeType": 0,
            "MaleFemaleSex": 0,
            "FirstName": "",
            "LastName": "",
            "Patronymic": "",
            "EnableSmsNotifications": null,
            "Howdidyouhear": "",
            "Residenceregion": "",
            "FirstNameRus": "",
            "LastNameRus": "",
            "PatronymicRus": "",
            "InternationalPassportSeries": "",
            "InternationalPassportNumber": "",
            "InternationalPassportDateOfIssue": "",
            "InternationalPassportDateOfIssueString": "",
            "InternationalPassportDateOfExpiry": "",
            "InternationalPassportDateOfExpiryString": "",
            "internationalPassportByWhom": "",
            "PassportSeries": "",
            "PassportNumber": "",
            "PassportDateOfIssue": "",
            "PassportDateOfIssueString": "",
            "PassportByWhom": "",
            "Citizenship": "",
            "Phone": "",
            "Email": "",
            "BirthDay": "",
            "BirthDayString": "",
            "BirthPlace": "",
            "CitizenID": "",
            "Age": 19
        }
    ],
    "Day": "день",
    "Day2": "дня",
    "Days": "дней",
    "Night": "ночь",
    "Night2": "ночи",
    "Nights": "ночей",
    "adultsCountOverServiceLimit": "Количество взрослых туристов превышает лимит услуги",
    "at": "на",
    "incorrectChildrenInf": "Возраст детей не соответствует допустимому в выбранном варианте размещения (см. Услуги: Проживание)",
    "languageCode": "ru"
}


Формируется такой результат работы метода:

{
    "IsValid": true,
    "ErrorMessage": "",
    "CalculatedReservation": {
        "TourKey": 100011540,
        "BeginDate": "2024-03-24T00:00:00",
        "Duration": 7,
        "Currency": "$",
        "CalculatedServicesPrice": 86.0,
        "ChangedPrice": 0.0,
        "Price": 86.0,
        "TotalPrice": 86.0,
        "IsDiscountIsPercent": true,
        "NationalChangedPrice": 0.0,
        "NationalTotalDiscount": 0.0,
        "NationalTotalPrice": 7856.3923999999999999999999971,
        "NatinoalCalculatedServicesPrice": 7856.3923999999999999999999971,
        "NationalPrice": 7856.3923999999999999999999971,
        "Discount": 0.0,
        "TotalDiscount": 0.0,
        "ServiceTourists": [
            {
                "ServiceType": 1,
                "Day": 1,
                "DurationInNight": 0,
                "Time": "16:00:00",
                "Name": "А_П::Москва/Вена/AT111, DME-VIE1, 16:00-17:00/C Бизнес класс",
                "TouristCount": 2,
                "Attributes": 0,
                "Type": 1,
                "Brutto": 0.39,
                "NationalBrutto": 35.627825999999999999999999987,
                "TotalBrutto": 0.39,
                "CancellationPolicy": null,
                "BookingAdditionalInfo": null,
                "AppliedCOInfo": [
                    {
                        "IdCostOffer": 41966,
                        "InfoText": null
                    }
                ],
                "AppliedSpecials": null,
                "AppldCostOffers": null,
                "QuotaPlaces": {
                    "PlacesStatus": 4,
                    "FreePlaces": 0,
                    "TotalPlaces": 0
                },
                "TimeLimit": null,
                "BookHash": null
            },
            {
                "ServiceType": 3,
                "Day": 1,
                "DurationInNight": 5,
                "Time": "17:00:00",
                "Name": "HOTEL::Вена/Resort&Spa-5*,5 ночей/2 ADL(\"Капитанский\"1),2 ADL/ПР По программе",
                "TouristCount": 2,
                "Attributes": 0,
                "Type": 1,
                "Brutto": 55.0,
                "NationalBrutto": 5024.4369999999999999999999982,
                "TotalBrutto": 55.0,
                "CancellationPolicy": null,
                "BookingAdditionalInfo": null,
                "AppliedCOInfo": [
                    {
                        "IdCostOffer": 41729,
                        "InfoText": null
                    }
                ],
                "AppliedSpecials": null,
                "AppldCostOffers": null,
                "QuotaPlaces": {
                    "PlacesStatus": 4,
                    "FreePlaces": 0,
                    "TotalPlaces": 0
                },
                "TimeLimit": null,
                "BookHash": null
            },
            {
                "ServiceType": 1,
                "Day": 6,
                "DurationInNight": 1,
                "Time": "20:00:00",
                "Name": "А_П::Вена/Москва/AT333, VIE1-DME, 20:00-02:00/Y Экономический класс",
                "TouristCount": 2,
                "Attributes": 0,
                "Type": 1,
                "Brutto": 30.0,
                "NationalBrutto": 2740.601999999999999999999999,
                "TotalBrutto": 30.0,
                "CancellationPolicy": null,
                "BookingAdditionalInfo": null,
                "AppliedCOInfo": [
                    {
                        "IdCostOffer": 12371,
                        "InfoText": null
                    }
                ],
                "AppliedSpecials": null,
                "AppldCostOffers": null,
                "QuotaPlaces": {
                    "PlacesStatus": 4,
                    "FreePlaces": 0,
                    "TotalPlaces": 0
                },
                "TimeLimit": null,
                "BookHash": null
            }
        ]
    },
    "TourName": "Общая проверка системы_зелсофт",
    "BookingConditions": "<p><strong>Условия бронирования</strong></p>\n<p>Сразу же после получения Вашей заявки и обсуждения всех деталей, мы вышлем Вам счет-фактуру на безвозвратный депозит. После получения депозита в размере 50-100 евро (в зависимости от стоимости тура) на человека, Вы получите Тур Ваучер, подтверждающий все детали и условия поездки в Армению</p>\n<p><strong>Условия оплаты</strong></p>\n<p>После бронирования тура необходимо внести безвозвратный депозит в размере 50-100 евро, что обеспечит нашим координаторам возможность начать организацию поездки (бронирование гостиницы, питание, транспорт и т.п.). При покупки тура с авиабилетом, предоплата составит 80% от стоимости всего тура.</p>\n<p>Оставшуюся сумму Вы можете выплатить после Вашего прибытия в страну.</p>\n<p>Мы оставляем за собой право отменить бронирование, если платежи не будут произведены в установленные сроки.</p>\n<p><strong>Форма оплаты</strong></p>\n<p>Предоплату можно внести одним из следующих способов:</p>\n<ul>\n<li>Банковский перевод</li>\n<li>Кредитная карта (при оплате посредством кредитной карты, сервис взимает 3% от общей суммы)</li>\n</ul>\n<p>Окончательный платеж может быть осуществлен следующими способами:</p>\n<ul>\n<li>Оплата наличными (при оплате наличными Вы получаете скидку в размере 2% от общей суммы)</li>\n<li>Кредитная карта (при оплате посредством кредитной карты, сервис взимает 3% от общей суммы)</li>\n</ul>\n<p>&nbsp;</p>\n<p><strong>Условия аннуляции тура&nbsp;</strong></p>\n<p>Если Вы или один из членов Вашей группы желает отменить тур, сообщите об этом нашей компании, как можно скорее в письменной форме.&nbsp;Пожалуйста, обратите внимание, что в данном случае предоплата (200 евро) не подлежит возмещению, но Вы сможете использовать ее в течении всего года и заказать другой тур. В этом случае наша фирма будет вынуждена взять с Вас дополнительные 100 евро для повторного бронирования отеля.</p>",
    "EndDate": "2024-03-30T00:00:00",
    "DurationInNights": 5,
    "NationalCurrency": "рб",
    "NationalRate": {
        "Id": 14,
        "Code": "рб",
        "IsoCode": "RUB",
        "Symbol": "₽"
    },
    "Rate": {
        "Id": 1,
        "Code": "$",
        "IsoCode": "USD",
        "Symbol": "$"
    },
    "TimeLimit": null,
    "TariffDescription": {
        "flightId": null,
        "universalParametrsSequence": null,
        "price": 0.0,
        "deltaPrice": 0.0,
        "segments": null
    },
    "Baggage": "",
    "CarryOnBaggage": "",
    "HasRealCourses": true
}


Далее формируем запрос метода CreateReservation.
Вызываем http://localhost:9000/TourSearchOwin/CreateReservation/1
С телом запроса, которое мы построим из предыдущего результат + данные о туристе.

{
    "TourProgramId": 100011540,
    "BeginDate": "2024-03-24T00:00:00",
    "Duration": 7,
    "Currency": "$",
    "Services": [
        {
            "Service": {
                "ServiceType": 3,
                "Code": 112322,
                "SubCode1": 1082739,
                "SubCode2": 39,
                "Packet": 779,
                "Partner": 12667,
                "Day": 1,
                "DurationInNight": 5,
                "City": 35,
                "Country": 90,
                "Attributes": 0,
                "IsRemovable": false,
                "Type": 1,
                "IsHooded": false,
                "IsNotCalculated": false,
                "BeginDateTimeString": "2024-03-24T17:00:00",
                "EndDateTimeString": "2024-03-29T17:00:00",
                "TemplateId": 1,
                "Cost": 0,
                "ByPax": false,
                "QuotaStatus": {
                    "PlacesStatus": 4,
                    "FreePlaces": 0,
                    "IsFewPlaces": false
                },
                "Index": 1,
                "IsRoute": true,
                "ServiceTemplateIndex": 1,
                "RemoteId": null,
                "IsCommission": true,
                "BaseFlightsParams": [
                    {
                        "CityArrival": 35,
                        "FlightCode": 773,
                        "TariffKey": 67,
                        "PartnerId": 10760
                    },
                    {
                        "CityArrival": 1,
                        "FlightCode": 1059,
                        "TariffKey": 89,
                        "PartnerId": 10760
                    }
                ]
            },
            "TouristNumbersList": [
                1,
                2
            ]
        },
        {
            "Service": {
                "ServiceType": 1,
                "Code": 773,
                "SubCode1": 67,
                "SubCode2": 1,
                "Packet": 779,
                "Partner": 10760,
                "Day": 1,
                "DurationInNight": 0,
                "City": 35,
                "Country": 90,
                "Attributes": 0,
                "IsRemovable": false,
                "Type": 1,
                "IsHooded": false,
                "IsNotCalculated": false,
                "BeginDateTimeString": "2024-03-24T16:00:00",
                "EndDateTimeString": "2024-03-24T17:00:00",
                "TemplateId": 3,
                "Cost": 0,
                "ByPax": true,
                "QuotaStatus": {
                    "PlacesStatus": 4,
                    "FreePlaces": 0,
                    "IsFewPlaces": false
                },
                "Index": 0,
                "IsRoute": true,
                "ServiceTemplateIndex": 0,
                "IsCommission": true,
                "BaseFlightsParams": [
                    {
                        "CityArrival": 35,
                        "FlightCode": 773,
                        "TariffKey": 67,
                        "PartnerId": 10760
                    },
                    {
                        "CityArrival": 1,
                        "FlightCode": 1059,
                        "TariffKey": 89,
                        "PartnerId": 10760
                    }
                ]
            },
            "TouristNumbersList": [
                1,
                2
            ]
        },
        {
            "Service": {
                "ServiceType": 1,
                "Code": 1059,
                "SubCode1": 89,
                "SubCode2": 35,
                "Packet": 779,
                "Partner": 10760,
                "Day": 6,
                "DurationInNight": 1,
                "City": 1,
                "Country": 460,
                "Attributes": 0,
                "IsRemovable": false,
                "Type": 1,
                "IsHooded": false,
                "IsNotCalculated": false,
                "BeginDateTimeString": "2024-03-29T20:00:00",
                "EndDateTimeString": "2024-03-30T02:00:00",
                "TemplateId": 4,
                "Cost": 0,
                "ByPax": true,
                "QuotaStatus": {
                    "PlacesStatus": 4,
                    "FreePlaces": 0,
                    "IsFewPlaces": false
                },
                "Index": 2,
                "IsRoute": true,
                "ServiceTemplateIndex": 2,
                "IsCommission": true,
                "BaseFlightsParams": [
                    {
                        "CityArrival": 35,
                        "FlightCode": 773,
                        "TariffKey": 67,
                        "PartnerId": 10760
                    },
                    {
                        "CityArrival": 1,
                        "FlightCode": 1059,
                        "TariffKey": 89,
                        "PartnerId": 10760
                    }
                ]
            },
            "TouristNumbersList": [
                1,
                2
            ]
        }
    ],
    "Tourists": [
        {
            "IsMain": true,
            "Number": 1,
            "AgeType": 0,
            "MaleFemaleSex": 0,
            "FirstName": "DJON",
            "LastName": "SNOW",
            "Patronymic": "",
            "EnableSmsNotifications": true,
            "Howdidyouhear": "Магия",
            "Residenceregion": "Волгоград",
            "FirstNameRus": "",
            "LastNameRus": "",
            "PatronymicRus": "",
            "InternationalPassportSeries": "",
            "InternationalPassportNumber": "",
            "InternationalPassportDateOfIssue": "",
            "InternationalPassportDateOfIssueString": "",
            "InternationalPassportDateOfExpiry": "",
            "InternationalPassportDateOfExpiryString": "",
            "internationalPassportByWhom": "",
            "PassportSeries": "",
            "PassportNumber": "",
            "PassportDateOfIssue": "",
            "PassportDateOfIssueString": "",
            "PassportByWhom": "",
            "Citizenship": "Россия",
            "Phone": "",
            "Email": "",
            "BirthDay": "1994-05-29T20:00:00.000Z",
            "BirthDayString": "30.05.1994",
            "BirthPlace": "",
            "CitizenID": "",
            "Age": 29
        },
        {
            "IsMain": false,
            "Number": 2,
            "AgeType": 0,
            "MaleFemaleSex": 0,
            "FirstName": "DJON",
            "LastName": "SNOW",
            "Patronymic": "",
            "EnableSmsNotifications": true,
            "Howdidyouhear": "Магия",
            "Residenceregion": "Волгоград",
            "FirstNameRus": "",
            "LastNameRus": "",
            "PatronymicRus": "",
            "InternationalPassportSeries": "",
            "InternationalPassportNumber": "",
            "InternationalPassportDateOfIssue": "",
            "InternationalPassportDateOfIssueString": "",
            "InternationalPassportDateOfExpiry": "",
            "InternationalPassportDateOfExpiryString": "",
            "internationalPassportByWhom": "",
            "PassportSeries": "",
            "PassportNumber": "",
            "PassportDateOfIssue": "",
            "PassportDateOfIssueString": "",
            "PassportByWhom": "",
            "Citizenship": "Россия",
            "Phone": "",
            "Email": "",
            "BirthDay": "1994-05-29T20:00:00.000Z",
            "BirthDayString": "30.05.1994",
            "BirthPlace": "",
            "CitizenID": "",
            "Age": 29
        }
    ],
    "TechnicalProblemsDuringUpdateFlights": false,
    "TimeLimit": null,
    "DogovorComment": "",
    "BranchId": 12850,
    "OwnerId": 0,
    "Day": "день",
    "Day2": "дня",
    "Days": "дней",
    "Night": "ночь",
    "Night2": "ночи",
    "Nights": "ночей",
    "adultsCountOverServiceLimit": "Количество взрослых туристов превышает лимит услуги",
    "incorrectChildrenInf": "Возраст детей не соответствует допустимому в выбранном варианте размещения (см. Услуги: Проживание)",
    "BookingHash": null
}


Результатом работы метода будет код путевки и ссылка для перехода в личный кабинет MasterWeb.
Ea 495.png

Приложения

Приложение 1: параметры услуги (ServiceType, Code, SubCode1, SubCode2)

Параметры ServiceType – это ключ типа услуги, Сode – ключ услуги, SubCode1 и SubCode2, возвращаемые при API-запросах – это параметры дополнительных описаний двух типов, индивидуальных для каждой услуги.

Ключ типа услуги (ServiceType) Наименование типа услуги Ключ услуги (Code) Доп. описание 1 (SubCode1) Таблица БД со значениями SubCode1 Доп. описание 2 (SubCode2) Таблица БД со значениями SubCode2
1 Авиаперелет индивидуальный ключ услуги Тариф AirService отсутствует отсутствует
2 Трансфер индивидуальный ключ услуги Вид транспорта Transport отсутствует отсутствует
3 Отель/Круиз индивидуальный ключ услуги Вид проживания (Тип номера + Категория номера + Тип размещения) HotelRooms (Rooms + RoomCategory + Accmdmentype) Тип питания Pansion
4 Экскурсия индивидуальный ключ услуги Вид транспорта Transport отсутствует отсутствует
5 Виза индивидуальный ключ услуги отсутствует отсутствует отсутствует отсутствует
6 Страховка индивидуальный ключ услуги Доп. описание 1 AddDescript1 Доп. описание 2 AddDescript2
8 Доп услуга в отеле/круизе индивидуальный ключ услуги Вид проживания (Тип номера + Категория номера + Тип размещения) HotelRooms (Rooms + RoomCategory + Accmdmentype) Доп. описание 2 AddDescript2
14 Автобусный переезд индивидуальный ключ услуги Место посадки BusTransferPoints Вид транспорта Transport
99 Любая пользовательская услуга индивидуальный ключ услуги Доп. описание 1 AddDescript1 Доп. описание 2 AddDescript2