Аутентификация
Каждый запрос к Partner API должен быть аутентифицирован с использованием подписи HMAC-SHA256. Это гарантирует, что запросы являются подлинными и не были изменены при передаче.
Обязательные заголовки
| Заголовок | Описание |
|---|---|
X-API-Key | API-ключ вашей организации |
X-Timestamp | Текущая метка времени Unix в секундах (например, 1711000000) |
X-Nonce | Уникальная строка для каждого запроса (рекомендуется UUID v4) |
X-Signature | Hex-подпись запроса HMAC-SHA256 |
Формирование подписи
Подпись вычисляется путём построения строки сообщения с разделением точками и подписания её секретом вашего API-ключа:
message = "{timestamp}.{nonce}.{method}.{path}.{body}"
signature = HMAC-SHA256(apiKeySecret, message).hexDigest()
Компоненты сообщения, объединённые точками (.):
- timestamp — Метка времени Unix в секундах (то же значение, что и в заголовке
X-Timestamp) - nonce — То же значение, что отправлено в заголовке
X-Nonce - method — HTTP-метод в верхнем регистре (например,
GET,POST) - path — Полный путь запроса (например,
/v2/partners/products/tickets) - 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.