Авторизация

Для защищенных методов API требуется авторизация с помощью HMAC-SHA256 подписи.

Обязательные заголовки

Каждый запрос должен содержать три обязательных заголовка:

X-Timestamp
Unix timestamp в секундах
X-Signature
HMAC-SHA256 подпись запроса в hex-формате
X-Client-Id
ID вашего мерчанта

Формирование подписи

Подпись формируется на основе timestamp и тела запроса.

Формат:

{timestamp}.{canonicalBody}

Описание формата

timestamp
Текущее Unix-время в секундах
canonicalBody
JSON-тело запроса, приведенное к единому формату

Алгоритм подписи:

  • Получите текущее Unix-время в секундах
  • Получите тело запроса
  • Приведите JSON к canonical-формату
  • Сформируйте строку: timestamp + "." + canonicalBody
  • Подпишите строку с помощью HMAC-SHA256, используя api_secret
  • Передайте timestamp и подпись в заголовках запроса

Важные требования:

  • api_secret нельзя передавать в запросе
  • api_secret должен храниться только на стороне сервера мерчанта
  • Подпись должна рассчитываться отдельно для каждого запроса
  • X-Timestamp должен соответствовать времени формирования подписи
  • Тело запроса, отправленное в API, должно полностью совпадать с телом, по которому была рассчитана подпись
  • Для запросов без тела подписывается строка вида: {timestamp}

Примеры:

Ошибки авторизации

401 Invalid X-Timestamp

{
  "status": 401,
  "message": "Invalid X-Timestamp"
}

401 Expired X-Timestamp

{
  "status": 401,
  "message": "Expired X-Timestamp"
}

401 Invalid X-Signature

{
  "status": 401,
  "message": "Invalid X-Signature"
}

401 Invalid token

{
  "status": 401,
  "message": "Invalid token"
}

401 Merchant secret not configured

{
  "status": 401,
  "message": "Merchant secret not configured"
}

500 Internal Server Error

{
  "status": 500,
  "message": "Internal Server Error"
}