Vignetim

Аутентификация

Каждый запрос к Partner API должен быть аутентифицирован с использованием подписи HMAC-SHA256. Это гарантирует, что запросы являются подлинными и не были изменены при передаче.

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

ЗаголовокОписание
X-API-KeyAPI-ключ вашей организации
X-TimestampТекущая метка времени Unix в секундах (например, 1711000000)
X-NonceУникальная строка для каждого запроса (рекомендуется UUID v4)
X-SignatureHex-подпись запроса HMAC-SHA256

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

Подпись вычисляется путём построения строки сообщения с разделением точками и подписания её секретом вашего API-ключа:

message = "{timestamp}.{nonce}.{method}.{path}.{body}"
signature = HMAC-SHA256(apiKeySecret, message).hexDigest()

Компоненты сообщения, объединённые точками (.):

  1. timestamp — Метка времени Unix в секундах (то же значение, что и в заголовке X-Timestamp)
  2. nonce — То же значение, что отправлено в заголовке X-Nonce
  3. method — HTTP-метод в верхнем регистре (например, GET, POST)
  4. path — Полный путь запроса (например, /v2/partners/products/tickets)
  5. body — Необработанная строка тела запроса в формате JSON. Для GET-запросов без тела используйте пустую строку ""

Результирующий HMAC-дайджест должен быть закодирован в формате hex в нижнем регистре.

Примеры

API_KEY="your-api-key"
API_SECRET="your-api-secret"
TIMESTAMP=$(date +%s)
NONCE=$(uuidgen | tr '[:upper:]' '[:lower:]')
METHOD="GET"
REQ_PATH="/v2/partners/products/tickets"
BODY=""

MESSAGE="${TIMESTAMP}.${NONCE}.${METHOD}.${REQ_PATH}.${BODY}"

SIGNATURE=$(echo -n "${MESSAGE}" | \
  openssl dgst -sha256 -hmac "${API_SECRET}" | \
  awk '{print $2}')

curl -X GET "https://api.vignetim.com${REQ_PATH}" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: ${API_KEY}" \
  -H "X-Timestamp: ${TIMESTAMP}" \
  -H "X-Nonce: ${NONCE}" \
  -H "X-Signature: ${SIGNATURE}"

Важные замечания

  • Значение X-Timestamp должно быть в пределах 5 минут (300 секунд) от серверного времени. Запросы с устаревшими метками времени будут отклонены с ошибкой 401.
  • Каждое значение X-Nonce должно быть уникальным и может использоваться только один раз. Повторное использование nonce приведёт к ошибке 401.
  • Всегда используйте необработанную, неформатированную строку JSON-тела для вычисления подписи. Не форматируйте и не пересериализуйте тело перед подписанием.
  • Подпись должна быть в формате hex в нижнем регистре. Не используйте base64.