Vue d’ensemble
Les paiements peuvent échouer pour diverses raisons. Ce guide vous aide à comprendre les erreurs courantes et comment les gérer dans votre application.Statuts de paiement
Important : Seules les demandes de paiement (payment_requests) ont un statut. Les liens de paiement (payment_links) n’ont pas de statut.
Les demandes de paiement peuvent avoir les statuts suivants :
pending: Le paiement est en attente de confirmationsuccess: Le paiement a été effectué avec succèserror: Le paiement a échoué
canReceivePayments (booléen) pour vérifier si le lien peut accepter de nouveaux paiements.
Erreurs communes
Lien expiré
Erreur :link_expired ou payment_link_expired
Message : “Payment link has expired”
Cause : Le lien de paiement a expiré et ne peut plus accepter de paiements.
Solution :
- Vérifiez toujours
canReceivePaymentsavant de diriger un client vers un lien - Créez un nouveau lien de paiement si le lien a expiré
- Informez le client que le lien a expiré et proposez de créer un nouveau lien
Lien déjà utilisé
Erreur :link_used ou payment_link_already_used
Message : “Payment link has already been used”
Cause : Le lien de paiement est à usage unique (allowMultiplePayments: false) et a déjà été utilisé pour un paiement réussi.
Solution :
- Vérifiez
canReceivePaymentsavant de diriger un client vers un lien - Pour les liens à usage unique, créez un nouveau lien pour chaque paiement
- Informez le client que le lien a déjà été utilisé
Demande de paiement non trouvée (404 Not Found)
Erreur :payment_request_not_found
Message : “Payment request not found”
Cause : La demande de paiement n’existe pas ou n’appartient pas à votre entreprise.
Solution :
- Vérifiez que l’ID de la demande de paiement est correct
- Vérifiez que la demande appartient à votre entreprise
- Vérifiez que la demande n’a pas été supprimée
Magasin non trouvé (404 Not Found)
Erreur :store_not_found
Message : “Store not found”
Cause : Le storeId fourni n’existe pas ou n’appartient pas à votre entreprise.
Solution :
- Vérifiez que le
storeIdest correct - Utilisez l’endpoint
/partner_api/storespour lister vos magasins - Assurez-vous que le magasin existe et est actif
Dispositif non trouvé (422 Validation Error)
Erreur :validation_error
Message : “The paymentDetails.data.deviceId field is required when paymentDetails.type is soundbox”
Cause : Pour les paiements soundbox, le deviceId est requis mais manquant ou invalide.
Solution :
- Vérifiez que le
deviceIdest fourni pour les paiements soundbox - Vérifiez que le
deviceIdexiste via l’endpoint/partner_api/devices - Assurez-vous que le dispositif est actif et associé au bon magasin
Erreur de validation (422 Unprocessable Entity)
Erreur :validation_error
Message : “Validation error”
Cause : Les données fournies ne respectent pas les règles de validation.
Problèmes courants :
- Montant inférieur au minimum (100 centimes pour payment_requests, 10000 centimes pour payment_links)
- Code devise invalide (doit être ISO 4217, 3 caractères)
- Référence manquante ou invalide (1-100 caractères)
- Titre manquant ou invalide pour payment_links (10-255 caractères)
- URLs de callback invalides (doivent être HTTPS valides)
- Méthode de paiement invalide
- Vérifiez que tous les champs requis sont présents
- Vérifiez que les valeurs respectent les contraintes (montant minimum, longueur, format)
- Vérifiez que les URLs sont valides et utilisent HTTPS
Paiement échoué
Erreur :payment_failed ou transaction_failed
Message : “Payment failed”
Cause : Le paiement a échoué côté opérateur (Mobile Money ou banque).
Solution :
- Vérifiez que le client a suffisamment de fonds
- Vérifiez que le compte du client est actif
- Proposez au client de réessayer
- Contactez le support si le problème persiste
Clé API invalide (401 Unauthorized)
Erreur :unauthorized
Message : “Unauthorized”
Cause : Les clés API sont invalides, manquantes ou expirées.
Solution :
- Vérifiez que les en-têtes
X-API-KEYetX-API-KEY-IDsont présents - Vérifiez que les clés API sont correctes
- Régénérez vos clés API depuis le Jeko Cockpit si nécessaire
Accès interdit (403 Forbidden)
Erreur :forbidden ou forbidden_action
Message : “Forbidden” ou “Action interdite”
Cause : La clé API n’a pas la permission d’accéder à cette ressource ou d’effectuer cette action.
Solution :
- Vérifiez les permissions de votre clé API
- Contactez le support pour vérifier les permissions de votre compte
Conflit de référence (409 Conflict)
Erreur :payment_request_exists_with_reference
Message : “Une demande de paiement avec cette référence existe déjà”
Cause : Une demande de paiement avec la même référence existe déjà.
Solution :
- Utilisez des références uniques pour chaque demande de paiement
- Incluez un identifiant unique (timestamp, UUID, orderId) dans la référence
Gestion des erreurs dans votre application
Vérification préventive
Avant de créer un paiement, effectuez ces vérifications :- Vérifier l’existence du magasin :
- Pour les paiements soundbox, vérifier le dispositif :
- Pour les liens de paiement, vérifier la disponibilité :
Gestion des erreurs dans le code
Utilisation des webhooks pour le suivi
Configurez des webhooks pour être notifié automatiquement des changements de statut des paiements. Cela vous permet de :- Suivre les paiements en temps réel
- Gérer les échecs automatiquement
- Mettre à jour votre système lorsque le statut change
Bonnes pratiques
- Vérifications préventives : Toujours vérifier les prérequis avant de créer un paiement
- Gestion d’erreurs robuste : Implémentez une gestion d’erreurs complète pour tous les cas d’échec
- Logging : Enregistrez toutes les erreurs pour le débogage et l’analyse
- Messages utilisateur : Informez l’utilisateur des erreurs de manière claire et actionnable
- Retry logic : Pour les erreurs temporaires, implémentez une logique de réessai avec backoff exponentiel
- Monitoring : Surveillez les taux d’échec pour identifier les problèmes récurrents
- Vérification des liens : Toujours vérifier
canReceivePaymentsavant de diriger un client vers un lien