PayRouterDocs

Erreurs & codes de statut

Chaque erreur renvoie la même enveloppe JSON, vous pouvez donc gérer les échecs de façon cohérente sur l'ensemble de l'API.

json
{
  "error": {
    "code": "validation_error",
    "message": "The request payload is invalid.",
    "details": {
      "currency": "No currency matches \"ZZZ\"."
    }
  }
}
ChampDescription
codeUn code d'erreur stable et lisible par machine (faites votre switch dessus).
messageUn résumé lisible par un humain, sûr à journaliser.
detailsDétail optionnel par champ ou contextuel. Pour les erreurs de validation, les clés sont des noms de champs.

Lisez details, repliez sur message

Pour les 400, affichez les erreurs de champ depuis error.details.<field> ; sinon affichez error.message. Lire un champ de premier niveau sur le corps (au lieu de sous error.details) masque silencieusement de vraies erreurs de validation.

Codes de statut HTTP

StatutSignificationCause typique
200 OKSuccèsUne lecture ou une action a réussi.
201 CreatedCrééUne transaction (ou une autre ressource) a été créée.
204 No ContentSuccès, corps videUne suppression a réussi.
400 Bad RequestErreur de validation / de domaineChamp manquant/invalide, devise/service inconnu, référence en doublon.
401 UnauthorizedAuthentification échouéeJeton manquant, mal formé, expiré ou révoqué ; mauvaise signature de webhook.
403 ForbiddenPermission refuséeLe jeton est valide mais le rôle ne peut pas effectuer cette action (p. ex. un non-marchand créant un paiement).
404 Not FoundRessource introuvableRéférence inconnue, ou enregistrement hors de votre périmètre.
409 ConflictTransition d'état invalideUn changement de statut illégal a été tenté.
500 Internal Server ErrorErreur serveurÉchec inattendu — réessayez plus tard ; contactez le support si cela persiste.
502 Bad GatewayErreur fournisseurLe fournisseur de paiement en amont a renvoyé une erreur.

Codes d'erreur

codeHTTPSignification & que faire
validation_error400La charge utile a échoué à la validation. Inspectez details pour le(s) champ(s) en cause et corrigez la requête.
not_found404La ressource n'existe pas ou ne vous appartient pas. Vérifiez la reference.
invalid_state_transition409Un changement de statut illégal a été tenté (les états terminaux sont immuables). Ré-interrogez le statut courant.
provider_error502Le fournisseur de paiement a échoué. Sûr à réessayer après un court délai ; rapprochez par statut.
unknown_provider400provider_code_name ne correspond à aucun fournisseur enregistré. Omettez-le pour un routage automatique, ou utilisez un code valide.
webhook_verification_failed401Un webhook fournisseur entrant a échoué à la vérification de signature (rejeté par PayRouter, pas par vous).
request_error4xxUne erreur de requête générique au niveau du framework (p. ex. auth/permission). Lisez message/details.
internal_error500Erreur serveur inattendue. Réessayez ; si cela persiste, contactez le support avec l'horodatage.

Erreurs de validation courantes à la création de paiement

Clé de detailsCauseCorrectif
currencyCode de devise inconnuUtilisez un code valide (CDF, USD) ; listez via GET /api/organization/currency/.
serviceService inconnuUtilisez un nom/symbole valide (Vodacom, Airtel, Orange, Africell).
merchantAucun profil marchand intégréComplétez l'intégration sur /complete-profile.
merchant_referenceRéférence en doublonUtilisez une nouvelle référence unique, ou traitez-la comme déjà soumise.
amountManquant ou inférieur au minimumEnvoyez une chaîne décimale ≥ "0.01".

Bien gérer les erreurs

  • Faites un switch sur code, pas sur message (les messages peuvent être localisés ou reformulés).
  • Réessayez les 502/500 avec un backoff exponentiel ; ne réessayez jamais un 400/403 inchangé.
  • Journalisez code, message et les reference/merchant_reference de la requête pour le support.

Voir aussi Dépannage pour des correctifs basés sur les symptômes.