Vignetim

Autentificare (Authentication)

Fiecare cerere către API-ul pentru Parteneri trebuie autentificată utilizând semnarea cererilor HMAC-SHA256. Aceasta asigură că cererile sunt autentice și nu au fost modificate în tranzit.

Anteturi obligatorii

AntetDescriere
X-API-KeyCheia API a organizației dumneavoastră
X-TimestampMarca temporală Unix curentă în secunde (de ex., 1711000000)
X-NonceUn șir unic per cerere (se recomandă UUID v4)
X-SignatureSemnătura hex HMAC-SHA256 a cererii

Construcția semnăturii

Semnătura se calculează prin construirea unui șir de mesaj separat prin puncte și semnarea acestuia cu secretul cheii API:

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

Componentele mesajului, unite prin puncte (.):

  1. timestamp — Marca temporală Unix în secunde (aceeași valoare ca antetul X-Timestamp)
  2. nonce — Aceeași valoare trimisă în antetul X-Nonce
  3. method — Metoda HTTP cu majuscule (de ex., GET, POST)
  4. path — Calea completă a cererii (de ex., /v2/partners/products/tickets)
  5. body — Corpul cererii JSON brut ca șir de caractere. Pentru cererile GET fără corp, utilizați un șir gol ""

Digestul HMAC rezultat trebuie codificat ca hex cu litere mici.

Exemple

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}"

Note importante

  • X-Timestamp trebuie să fie în interval de 5 minute (300 secunde) față de ora serverului. Cererile cu mărci temporale expirate vor fi respinse cu eroarea 401.
  • Fiecare valoare X-Nonce trebuie să fie unică și poate fi utilizată o singură dată. Reutilizarea unui nonce va rezulta într-o eroare 401.
  • Utilizați întotdeauna corpul JSON brut, neformatat, pentru calculul semnăturii. Nu formatați și nu re-serializați corpul înainte de semnare.
  • Semnătura trebuie să fie codificată hex cu litere mici. Nu utilizați base64.