Как сформировать сигнатуру (md5-подпись) для запроса к API поиска билетов?

В данной статье рассматривается вариант создания специального ключа-подписи (сигнатуры), который используется для отправки запроса в API поиска авиабилетов Авиасейлс.

Сигнатура — это закодированный ключ запроса, который формируется из параметров запроса, партнёрского маркера и токена. Чтобы создать сигнатуру, необходимо выполнить несколько шагов.

Допустим, наш запрос имеет вид:

{
 "marker": "%marker%",
 "host": "%server_host%",
 "user_ip": "%user_ip_address%",
 "locale": "ru",
 "trip_class": "Y",
 "passengers": {
 "adults": "1",
 "children": "0",
 "infants": "0"
 },
 "segments": [
 {
 "origin": "MOW",
 "destination": "LED",
 "date": "2015-05-25"
 },
 {
 "origin": "LED",
 "destination": "MOW",
 "date": "2015-06-18" }]}
  1. Отсортируйте параметры из запроса по алфавиту: host=beta.aviasales.ru&locale=ru&marker=16886&adults=1&children=0&infants=0&date=2014-12-18&destination=LED&origin=MOW&date=2014-12-25&destination=MOW&origin=LED&trip_class=Y&user_ip=127.0.0.1. Обратите внимание: при сортировке учитывается вложенность данных. Если элемент содержит массив (например, segments) или список параметров (например, passengers), то содержимое данного элемента сортируется отдельно и ставится на его место в общем списке. При этом содержимое не сортируется с параметрами верхнего уровня. Параметры внутри массива сортируются в порядке следования фигурных скобок { }. Пример сортировки запроса (нажмите, чтобы открыть в новом окне).
  2. После сортировки соберите строку, содержащую только значения параметров (порядок следования остается таким же, как в п. 1): beta.aviasales.ru:ru:16886:1:0:0:2015-05-25:LED:MOW:2015-06-18:MOW:LED:Y:127.0.0.1. Друг от друга значения отделяются двоеточием.
  3. Добавьте в начало строки из п. 2 значение вашего партнёрского токена. Например: 321d6a221f8926b5ec41ae89a3b2ae7b.
  4. Используя полученную строку «321d6a221f8926b5ec41ae89a3b2ae7b:beta.aviasales.ru:ru:16886:1:0:0:2015-05-25:LED:MOW:2015-06-18:MOW:LED:Y:127.0.0.1», сформируйте md-5 подпись. Полученный результат 2d0c311eb0fe9cd84fcd1b875759c313 и является сигнатурой запроса.
    Внимание! Сигнатура чувствительна к регистру.