Autorisation

Les méthodes API protégées nécessitent une autorisation avec une signature HMAC-SHA256.

Required headers

Chaque requête doit contenir trois en-têtes obligatoires :

X-Timestamp
Timestamp Unix en secondes
X-Signature
Signature HMAC-SHA256 de la requête au format hex
X-Client-Id
ID de votre marchand

Signature generation

La signature est générée à partir du timestamp et du corps de la requête.

Format :

{timestamp}.{canonicalBody}

Format description

timestamp
Heure Unix actuelle en secondes
canonicalBody
Corps JSON de la requête converti au format canonique

Algorithme de signature :

  • Obtenez l'heure Unix actuelle en secondes
  • Obtenez le corps de la requête
  • Convertissez le JSON au format canonique
  • Formez la chaîne : timestamp + "." + canonicalBody
  • Signez la chaîne avec HMAC-SHA256 en utilisant api_secret
  • Transmettez le timestamp et la signature dans les en-têtes de la requête

Exigences importantes :

  • api_secret ne doit pas être transmis dans la requête
  • api_secret doit être stocké uniquement côté serveur du marchand
  • La signature doit être calculée séparément pour chaque requête
  • X-Timestamp doit correspondre au moment de génération de la signature
  • Le corps de la requête envoyé à l'API doit correspondre exactement au corps utilisé pour calculer la signature
  • Pour les requêtes sans corps, la chaîne signée a le format : {timestamp}

Exemples :

Authorization errors

401 Invalid X-Timestamp

{
  "status": 401,
  "message": "Invalid X-Timestamp"
}

401 Expired X-Timestamp

{
  "status": 401,
  "message": "Expired X-Timestamp"
}

401 Invalid X-Signature

{
  "status": 401,
  "message": "Invalid X-Signature"
}

401 Invalid token

{
  "status": 401,
  "message": "Invalid token"
}

401 Merchant secret not configured

{
  "status": 401,
  "message": "Merchant secret not configured"
}

500 Internal Server Error

{
  "status": 500,
  "message": "Internal Server Error"
}