Avtentikacija
Vsaka zahteva do Partner API-ja mora biti avtenticirana z uporabo HMAC-SHA256 podpisovanja zahtev (request signing). To zagotavlja, da so zahteve avtentične in da med prenosom niso bile spremenjene.
Zahtevane glave
| Header | Opis |
|---|---|
X-API-Key | Vaš organizacijski API ključ |
X-Timestamp | Trenutni Unix časovni žig v sekundah (npr. 1711000000) |
X-Nonce | Edinstven niz za vsako zahtevo (priporočen UUID v4) |
X-Signature | HMAC-SHA256 šestnajstiški podpis zahteve |
Konstruiranje podpisa
Podpis se izračuna z gradnjo sporočilnega niza, ločenega s pikami, in podpisovanjem z vašo API ključno skrivnostjo:
message = "{timestamp}.{nonce}.{method}.{path}.{body}"
signature = HMAC-SHA256(apiKeySecret, message).hexDigest()
Komponente sporočila, združene s pikami (.):
- timestamp — Unix časovni žig v sekundah (enaka vrednost kot v glavi
X-Timestamp) - nonce — Enaka vrednost, poslana v glavi
X-Nonce - method — HTTP metoda z velikimi črkami (npr.
GET,POST) - path — Polna pot zahteve (npr.
/v2/partners/products/tickets) - body — Surov JSON niz telesa zahteve. Za GET zahteve brez telesa uporabite prazen niz
""
Rezultirajoči HMAC povzetek mora biti kodiran kot šestnajstiške male črke (lowercase hex).
Primeri
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}"Pomembne opombe
X-Timestampmora biti znotraj 5 minut (300 sekund) od strežniškega časa. Zahteve z zastarelimi časovnimi žigi bodo zavrnjene z napako401.- Vsaka vrednost
X-Noncemora biti edinstvena in se lahko uporabi samo enkrat. Ponovna uporaba nonce-a bo povzročila napako401. - Za izračun podpisa vedno uporabite surov, neformatiran JSON niz telesa. Telesa pred podpisovanjem ne polepšujte ali ponovno serializirajte.
- Podpis mora biti kodiran v šestnajstiškem zapisu z malimi črkami. Ne uporabljajte base64.