Старая версия API поиска авиабилетов (более не поддерживается)
Данное API устарело. Его поддержка и обновление не осуществляется. Описание актуальной версии.
Уважаемые партнёры! Обратите внимание, что по умолчанию установлено ограничение: 100 запросов в час. Если требуется обрабатывать больше запросов, напишите в службу поддержки.
С помощью поискового API можно разработать собственный поиск авиабилетов. Доступ к API поиска ограничен и предоставляется в индивидуальном порядке. Обязательное условие предоставления доступа к API поиска — каждый запрос к API должен быть инициирован пользователем, результат каждого запроса должен быть показан пользователю в полном объеме. В результатах запроса должна быть кнопка «Купить» рядом с каждым вариантом перелета.
Для получения доступа к API поиска авиабилетов отправьте заявку с указанием следующей информации:
- URL вашего проекта.
- Как именно будет использоваться API поиска?
- Почему не подходят стандартные методы интеграции (поисковые формы, White Label, API доступа к данным)?
URL
http://yasen.aviasales.ru/searches.json
(Метод POST) (запрос нельзя вызывать через AJAX)
Пример запроса
<? $token = ''; $marker = ''; $aParams = array( 'search[params_attributes][origin_name]' => 'MOW', 'search[params_attributes][destination_name]' => 'LED', 'search[params_attributes][depart_date]' => '2014-12-04', 'search[params_attributes][adults]' => '1', 'search[params_attributes][children]' => '0', 'search[params_attributes][infants]' => '0', 'search[params_attributes][trip_class]' => '0', 'search[params_attributes][direct]' => '0', ); ksort($aParams); $signature = md5("$token:$marker:".implode(':', array_values($aParams))); $bParams = array( 'signature' => $signature, 'enable_api_auth' => true, 'marker' => $marker ); $aParams = $aParams + $bParams; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://yasen.aviasales.ru/searches.json'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($aParams)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FAILONERROR, 1); $answer = curl_exec($ch); if(curl_errno($ch)) echo 'Curl error: ' . curl_error($ch); curl_close($ch); echo $answer;
?>
Параметры запроса
Для авторизации используется токен, выдаваемый по запросу. Используя токен, необходимо создавать подпись к каждому запросу и передавать её в GET-параметре signature
. Чтобы получить signature, необходимо:
- Отсортировать параметры из запроса по алфавиту, например: adults=1&children=0&depart_date=2014-12-04&destination_name=LED&direct=0&origin_name=MOW&trip_class=0.
- Собрать строку, содержащую только значения параметров (порядок следования остаётся таким же, как в п.1): 1:0:2014-12-04:LED:0:MOW:0. Друг от друга значения отделяются двоеточием.
- Добавить в начало строки из п. 2 значение вашего партнерского токена и маркера.
- Используя полученную строку "ВашТокен:ВашМаркер:1:0:2014-12-04:LED:0:MOW:0" сформировать md-5 подпись. Полученный результат 00ca6e0b7d78f39abae9a4e42416b38d и является сигнатурой запроса.
locale
— определяет язык агентств/авиакомпаний в ответе. Может быть "ru", "en", "de";
marker
— уникальный идентификатор партнёра;
Хеш search
— содержит все остальные параметры:
Хеш params_attributes
— параметры поиска:
origin_name
: пункт отправления: IATA-код (3 буквы латинского алфавита в верхнем регистре) города или аэропортa, строка вида "Город, Страна(код)" (например: "Москва, Россия (MOW)");destination_name
: пункт назначения, аналогично с origin_name ;depart_date
: дата вылета в формате yyyy-mm-dd (например: "2014-12-08");return_date
: дата возвращения в формате yyyy-mm-dd (например: "2014-12-08"). При поиске билетов "в одну сторону" не передаётся;adults
: количество взрослых пассажиров (от 1 до 9);children
: количество пассажиров-детей (от 0 до 6);infants
: количество пассажиров-младенцев (от 0 до 6), не должно превышать количество пассажиров других категорий;trip_class
: класс перелета (0 — Эконом, 1 — Бизнес).
Описание ответа
search_id
: идентификатор поиска в системе (используйте его для перенаправления посетителя к бронированию);metadata
: служебные данные:count
: общее количество билетов;gate_meta
: хеш.tickets
: массив найденных вариантов перелета:native_prices
: хеш {gate_id: value}, цены указаны в валюте гейтов;order_urls
: хеш {gate_id: order_url_id}, используется для перехода на бронирование.direct_flights
: массив рейсов, входящих в прямой перелёт. Каждый элемент массива — хеш со следующими ключами:number
: номер рейса;airline
: IATA-код авиакомпании;departure
: время отправления в формате UNIX-time;arrival
: время прибытия в формате UNIX-time;duration
: длительность рейса в минутах;delay
: длительность пересадки в минутах между этим и предыдущим рейсом;origin
: IATA-код пункта отправления;destination
: IATA-код пункта назначения;aircraft
: модель самолета, выполняющего рейс. Пример: "Airbus A319".return_flights
: массив рейсов, входящих в обратный перелет. Описание аналогично direct_flights;airlines
: хэш, содержащий IATA-коды и названия авиакомпаний. Пример: {"UN":"Transaero Airlines"};airports
: хэш, содержащий информацию об аэропортах. IATA-коду аэропорта сопоставляются название (name), город (city) и страна (country).
Пример: {"DME":{"name":"Domodedovo", "city":"Moscow", "country":"Russia"}};
currency_rates
: курсы валют по отношению к рублю, например: {"eur":"41.3564", "uah":"3.72911"};gates_info
: информация о гейтах, осуществляющих продажу билетов;search_cache_time
: время актуальности результатов поиска в минутах.
Обратите внимание! Дата отправления и возвращения приходит в формате Unix Timestamp по Гринвичу. При обработке результатов требуется учитывать время сервера или принудительно приводить его к времени Гринвича с помощью функции date_default_timezone_set('GMT').
Пример ответа
{ "search_id":"66", "metadata" : {}, "tickets" : [ { "native_prices":{"7":"5500.0", "6":"5680.0", "3":"5657.0"}, "order_urls":{"7":"1","6":"557","3":"906"}, "direct_flights":[ { "number":"1837", "airline":"FV", "departure":"1294037100", "arrival":"1294041900", "duration":"80", "delay":"0", "origin":"DME", "destination":"LED", "aircraft":"Airbus A319" } ], "return_flights":[ { "number":"1858", "airline":"FV", "departure":"1295503800", "arrival":"1295508600", "duration":"80", "delay":"0", "origin":"LED", "destination":"DME", "aircraft":"Airbus A320" } ] } ], "airlines": { "AB": { "alliance_name": null, "average_rate": 3.84, "deeplink_id": 18, "homepage_id": "4ec0ff7b9f1c2760af0049d7", "id": 35, "name": "airberlin", "rates": 377 }, "AF": { "alliance_name": "SkyTeam", "average_rate": 2.89, "id": 48, "name": "Air France", "rates": 292 } }, "airports":{ "ALA": { "average_rate": 3.66, "city": "\u0410\u043b\u043c\u0430\u0442\u044b", "country": "\u041a\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043d", "name": "\u0410\u043b\u043c\u0430\u0442\u044b", "rates": 60, "time_zone": "Asia/Almaty" }, "AMM": { "average_rate": 3.42, "city": "\u0410\u043c\u043c\u0430\u043d", "country": "\u0418\u043e\u0440\u0434\u0430\u043d\u0438\u044f", "name": "Queen Alia International", "rates": 5, "time_zone": "Asia/Amman" } }, "currency_rates":{"eur":"41.3564", "uah":"3.72911"}, "gates_info": [ { "average_rate": 4.34, "currency_code": "rub", "id": 1, "is_airline": false, "label": "Nabortu", "mobile_version": false, "payment_methods": [ "bank", "yandex_money", "web_money", "terminal", "card", "svyaznoy", "euroset" ], "rates": 336 }, { "average_rate": 4.34, "currency_code": "rub", "id": 2, "is_airline": false, "label": "Davs", "mobile_version": false, "payment_methods": [ "cash", "bank", "yandex_money", "web_money", "terminal", "card", "exp", "euroset" ], "rates": 416 } ] }
Переход на бронирование
URL: http://yasen.aviasales.ru/searches/{search_id}/order_urls/{order_url_id}?marker={marker}
— в качестве параметра marker
укажите идентификатор партнёра.
Метод: POST
Пример: http://yasen.aviasales.ru/searches/866/order_urls/1?marker=11111
В результате будет получен ответ вида:
{
"params": {},
"method": "GET",
"url": " http://www.kupibilet.ru/ ",
"gate_id": 70,
"click_id": 21553068384646
}
Для перехода к бронированию перенаправьте посетителя сайта по адресу указанному в параметре url.
Обратите внимание! Ссылка на бронирование сохраняет свою актуальность в течение 15 минут, после чего необходимо повторить поиск и получить новую ссылку.
Автокомплит для названий городов
Данное API устарело. Его поддержка и обновление не осуществляется. Описание актуальной версии.