Vignetim

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

HeaderOpis
X-API-KeyVaš organizacijski API ključ
X-TimestampTrenutni Unix časovni žig v sekundah (npr. 1711000000)
X-NonceEdinstven niz za vsako zahtevo (priporočen UUID v4)
X-SignatureHMAC-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 (.):

  1. timestamp — Unix časovni žig v sekundah (enaka vrednost kot v glavi X-Timestamp)
  2. nonce — Enaka vrednost, poslana v glavi X-Nonce
  3. method — HTTP metoda z velikimi črkami (npr. GET, POST)
  4. path — Polna pot zahteve (npr. /v2/partners/products/tickets)
  5. 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-Timestamp mora biti znotraj 5 minut (300 sekund) od strežniškega časa. Zahteve z zastarelimi časovnimi žigi bodo zavrnjene z napako 401.
  • Vsaka vrednost X-Nonce mora biti edinstvena in se lahko uporabi samo enkrat. Ponovna uporaba nonce-a bo povzročila napako 401.
  • 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.