Старая версия API поиска авиабилетов (более не поддерживается)

Данное API устарело. Его поддержка и обновление не осуществляется. Описание актуальной версии.

 

Уважаемые партнеры! Обратите внимание, что по умолчанию установлено ограничение: 100 запросов в час. Если требуется обрабатывать больше запросов, напишите в службу поддержки.

 

С помощью поискового API можно разработать собственный поиск авиабилетов. Доступ к API поиска ограничен и предоставляется в индивидуальном порядке. Обязательное условие предоставления доступа к API поиска — каждый запрос к API должен быть инициирован пользователем, результат каждого запроса должен быть показан пользователю в полном объеме. В результатах запроса должна быть кнопка Купить рядом с каждым вариантом перелета.

Для получения доступа к API поиска авиабилетов отправьте заявку с указанием следующей информации:

  1. URL вашего проекта
  2. Как именно будет использоваться API поиска?
  3. Почему не подходят стандартные методы интеграции (поисковые формы, 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 необходимо:

  1. Отсортировать параметры из запроса по алфавиту, например: adults=1&children=0&depart_date=2014-12-04&destination_name=LED&direct=0&origin_name=MOW&trip_class=0.
  2. Собрать строку, содержащую только значения параметров (порядок следования остается таким же как в п.1): 1:0:2014-12-04:LED:0:MOW:0Друг от друга значения отделяются двоеточием.
  3. Добавить в начало строки из п. 2 значение вашего партнерского токена и маркера. 
  4. Используя полученную строку "ВашТокен:ВашМаркер: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 минут, после чего необходимо повторить поиск и получить новую ссылку.

Автокомплит для названий городов

URL: http://places.aviasales.ru/?term={term}&locale={locale}
Метод: GET

Параметры запроса

term– часть названия или IATA кода города, не менее 3 символов.
locale - "en" или "ru".

Пример запроса

http://places.aviasales.ru/?term=DME&locale=ru

Описание ответа

  • id: id города;
  • iata: IATA код города. IATA код указывается буквами верхнего регистра, например MOW;
  • name: название города и страны через запятую.

Пример ответа

[{"id":19467,"iata":"PRD","name":"Парду, Австралия"}]

 

Была ли эта статья полезной?

Еще есть вопросы? Отправить запрос