Authentification
Chaque requete envoyee a l'API Partenaire doit etre authentifiee a l'aide de la signature de requete HMAC-SHA256. Cela garantit que les requetes sont authentiques et n'ont pas ete alterees pendant le transit.
En-tetes requis
| En-tete | Description |
|---|---|
X-API-Key | Votre cle API d'organisation |
X-Timestamp | Horodatage Unix actuel en secondes (par ex., 1711000000) |
X-Nonce | Une chaine unique par requete (UUID v4 recommande) |
X-Signature | Signature hexadecimale HMAC-SHA256 de la requete |
Construction de la signature
La signature est calculee en construisant une chaine de message separee par des points et en la signant avec le secret de votre cle API :
message = "{timestamp}.{nonce}.{method}.{path}.{body}"
signature = HMAC-SHA256(apiKeySecret, message).hexDigest()
Les composants du message, joints par des points (.) :
- timestamp — Horodatage Unix en secondes (meme valeur que l'en-tete
X-Timestamp) - nonce — La meme valeur envoyee dans l'en-tete
X-Nonce - method — La methode HTTP en majuscules (par ex.,
GET,POST) - path — Le chemin complet de la requete (par ex.,
/v2/partners/products/tickets) - body — La chaine brute du corps de la requete en JSON. Pour les requetes GET sans corps, utilisez une chaine vide
""
Le condensat HMAC resultant doit etre encode en hexadecimal minuscule.
Exemples
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}"Notes importantes
- Le
X-Timestampdoit etre dans un intervalle de 5 minutes (300 secondes) par rapport a l'heure du serveur. Les requetes avec un horodatage expire seront rejetees avec une erreur401. - Chaque valeur
X-Noncedoit etre unique et ne peut etre utilisee qu'une seule fois. La reutilisation d'un nonce entrainera une erreur401. - Utilisez toujours la chaine JSON brute et non formatee du corps pour le calcul de la signature. Ne mettez pas en forme et ne re-serialisez pas le corps avant de le signer.
- La signature doit etre encodee en hexadecimal minuscule. N'utilisez pas le base64.