Aller au contenu principal

Gestion des Erreurs

AWDPay utilise des codes HTTP standards combinés à des codes d'erreur internes pour vous aider à diagnostiquer et résoudre rapidement les problèmes.

Format de réponse d'erreur

{
"error": {
"code": 40010,
"message": "Montant invalide",
"details": "Le montant doit être supérieur à 0"
}
}
ChampTypeDescription
codeIntegerCode d'erreur AWDPay (voir tableau ci-dessous)
messageStringMessage lisible décrivant l'erreur
detailsStringDétails supplémentaires (optionnel)

Codes d'erreur par catégorie

🔐 Authentification & Autorisation

CodeNomHTTPDescriptionAction Recommandée
401InvalidRole401Rôle invalide ou insuffisantVérifiez vos permissions de compte
30001KEYCLOAK_ERROR500Erreur du serveur d'authentificationRéessayez, contactez le support si persistant
40001INVALID_ACCESS403Accès non autorisé à cette ressourceVérifiez vos droits d'accès
40002UNAUTHORIZE_REQUEST401Requête non autoriséeVérifiez votre token Bearer

🔍 Ressources non trouvées

CodeNomHTTPDescriptionAction Recommandée
40004RESSOURCE_NOT_FOUND404Ressource non trouvéeVérifiez l'identifiant de ressource
40005PHONE_NUMBER_NOT_FOUND404Numéro de téléphone non trouvéVérifiez le format et l'existence du numéro
40006TRX_NOT_FOUND404Transaction non trouvéeVérifiez la référence de transaction
40007OTP_NOT_FOUND404OTP non trouvé ou expiréDemandez un nouvel OTP
40008CUSTOMER_NOT_FOUND404Client non trouvéVérifiez les informations client
40017WALLET_NOT_FOUND404Portefeuille non trouvéVérifiez que le compte existe

⚠️ Erreurs de validation

CodeNomHTTPDescriptionAction Recommandée
40010INVALID_AMOUNT400Montant invalideLe montant doit être > 0
40011INVALID_COUNTRY400Code pays invalideUtilisez un code ISO 3166-1 alpha-2 valide
40012INVALID_GATEWAY400Passerelle invalideVérifiez le nom de la passerelle
40014INVALID_NUMBER400Numéro invalideUtilisez le format international (+XXX...)
40015INVALID_CURRENCY400Devise invalideUtilisez un code ISO 4217 (XOF, EUR...)
40016INVALID_JSON_BODY400Corps JSON invalideVérifiez la syntaxe JSON
40017INVALID_METHOD400Méthode invalideUtilisez une méthode HTTP supportée
40018INVALID_CLIENT400Client invalideVérifiez vos identifiants API
40019INVALID_OTP400Code OTP invalideVérifiez le code saisi
40020INVALID_OPERATION400Opération invalideCette opération n'est pas autorisée
40021INVALID_CALLBACK_URL400URL de callback invalideUtilisez une URL HTTPS valide
40022INVALID_SECRET_CODE400Code secret invalideVérifiez votre code secret
40023INVALID_REQUEST400Requête invalideVérifiez les paramètres de requête

💰 Erreurs de solde

CodeNomHTTPDescriptionAction Recommandée
40013INSUFFICIENT_BALANCE422Solde insuffisantRechargez votre compte marchand

Codes HTTP standards

Code HTTPSignificationDescription
200OKRequête réussie
201CreatedRessource créée avec succès
400Bad RequestParamètres invalides
401UnauthorizedToken manquant ou invalide
403ForbiddenAccès refusé
404Not FoundRessource non trouvée
422Unprocessable EntityValidation métier échouée
429Too Many RequestsLimite de taux atteinte
500Internal Server ErrorErreur serveur
502Bad GatewayErreur de passerelle externe
503Service UnavailableService temporairement indisponible

Gestion des erreurs par type

Erreurs 4xx (Client)

Ces erreurs sont causées par des données invalides. Ne réessayez pas sans corriger la requête.

async function handleClientError(response) {
const error = await response.json();

switch (error.code) {
case 40010: // INVALID_AMOUNT
throw new Error('Montant invalide : doit être supérieur à 0');

case 40013: // INSUFFICIENT_BALANCE
throw new Error('Solde insuffisant pour cette opération');

case 40014: // INVALID_NUMBER
throw new Error('Format de numéro invalide');

default:
throw new Error(error.message);
}
}

Erreurs 5xx (Serveur)

Ces erreurs sont temporaires. Réessayez avec un backoff exponentiel.

async function retryWithBackoff(fn, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
return await fn();
} catch (error) {
if (error.status >= 500 && attempt < maxRetries - 1) {
const delay = Math.pow(2, attempt) * 1000; // 1s, 2s, 4s
await new Promise(resolve => setTimeout(resolve, delay));
continue;
}
throw error;
}
}
}

Idempotence et nouvel essai

Utilisation de l'en-tête Idempotency-Key

Pour éviter les doublons lors des nouvelles tentatives, utilisez une clé d'idempotence :

curl -X POST "https://app.awdpay.com/api/deposits/initiate" \
-H "Authorization: Bearer $AWDPAY_TOKEN" \
-H "Idempotency-Key: order-1234-attempt-1" \
-H "Content-Type: application/json" \
-d '{...}'

Stratégie de nouvel essai recommandée

TentativeDélaiAction
1ImmédiatPremière tentative
21 secondeSi erreur 5xx ou timeout
32 secondesSi erreur 5xx ou timeout
44 secondesSi erreur 5xx ou timeout
5+AbandonnerAlerter l'équipe technique
Ne jamais réessayer
  • Erreurs 4xx (sauf 429 Too Many Requests)
  • Erreurs INSUFFICIENT_BALANCE
  • Erreurs INVALID_*

Meilleures pratiques

✅ À faire

  • Enregistrer toutes les erreurs avec code, message et horodatage
  • Utiliser des clés d'idempotence pour les opérations de création
  • Implémenter un disjoncteur pour les erreurs récurrentes
  • Afficher des messages clairs aux utilisateurs (pas de codes techniques)

❌ À ne pas faire

  • Exposer les codes internes aux utilisateurs finaux
  • Réessayer aveuglément sans analyser l'erreur
  • Ignorer les erreurs — enregistrez-les même si non-bloquantes

Support

Si vous rencontrez des erreurs persistantes :

  1. Notez le code d'erreur, le message et l'horodatage
  2. Récupérez la référence de transaction si disponible
  3. Contactez le support via le tableau de bord AWDPay
  4. Fournissez les journaux requête/réponse (sans données sensibles)