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