Gérer les échecs de transfert
Comprendre les raisons d'échec des transferts et comment les gérer
Vue d'ensemble
Les transferts peuvent échouer pour diverses raisons. Ce guide vous aide à comprendre les erreurs courantes et comment les gérer dans votre application.
Statuts de transfert
Les transferts peuvent avoir les statuts suivants :
pending: Le transfert est en cours de traitementsuccess: Le transfert a été effectué avec succèserror: Le transfert a échoué
Erreurs communes
Solde insuffisant (400 Bad Request)
Erreur : insufficient_balance
Message : "Insufficient balance"
Cause : Le magasin ne dispose pas de fonds suffisants pour effectuer le transfert (montant + frais).
Solution :
- Vérifiez le solde du magasin avant de créer le transfert
- Assurez-vous que le solde couvre le montant du transfert plus les frais
- Provisionnez le compte du magasin si nécessaire
Exemple de réponse :
{
"id": "insufficient_balance",
"message": "Insufficient balance",
"extras": "Wallet balance is not sufficient for this transfer"
}Transfert échoué (400 Bad Request)
Erreur : transfer_failed
Message : "Transfer failed to finish"
Cause : Le traitement du transfert a échoué côté opérateur (Mobile Money ou banque).
Solution :
- Vérifiez que les informations du contact bénéficiaire sont correctes
- Vérifiez que le numéro de téléphone ou le compte bancaire est actif
- Réessayez le transfert après un court délai
- Contactez le support si le problème persiste
Exemple de réponse :
{
"id": "transfer_failed",
"message": "Transfer failed to finish",
"extras": "Transfer processing failed"
}Contact non trouvé (404 Not Found)
Erreur : contact_not_found
Message : "Contact not found"
Cause : Le contactId fourni n'existe pas ou n'appartient pas à votre entreprise.
Solution :
- Vérifiez que le
contactIdest correct - Assurez-vous que le contact a été créé avant d'effectuer le transfert
- Utilisez l'endpoint
/partner_api/contactspour lister vos contacts
Exemple de réponse :
{
"id": "contact_not_found",
"message": "Contact not found",
"extras": "Contact not found"
}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
Exemple de réponse :
{
"id": "store_not_found",
"message": "Store not found",
"extras": "Store not found"
}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 (montant minimum, format de devise, etc.).
Solution :
- Vérifiez que le montant respecte le minimum (500 centimes = 5 XOF)
- Vérifiez que la devise est au format ISO 4217 (3 caractères)
- Vérifiez que tous les champs requis sont présents et valides
- Vérifiez que la description ne dépasse pas 255 caractères
Exemples de problèmes de validation :
- Montant inférieur à 500 centimes
- Code devise invalide (doit être "XOF" ou autre code ISO 4217 valide)
- Champs requis manquants
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
Message : "Forbidden"
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
Gestion des erreurs dans votre application
Vérification préventive
Avant de créer un transfert, effectuez ces vérifications :
- Vérifier l'existence du contact :
curl -X GET "https://api.jeko.africa/partner_api/contacts/{contactId}" \
-H "X-API-KEY: your_api_key_here" \
-H "X-API-KEY-ID: your_api_key_id_here"- Vérifier le solde du magasin :
curl -X GET "https://api.jeko.africa/partner_api/stores/{storeId}/balance" \
-H "X-API-KEY: your_api_key_here" \
-H "X-API-KEY-ID: your_api_key_id_here"- Valider les données :
- Montant superieur ou égale 500 centimes
- Code devise valide (ISO 4217)
- Description inferieur ou égale 255 caractères
Gestion des erreurs dans le code
async function createTransfer(storeId, contactId, amountCents, currency, description) {
try {
// Vérifier le solde avant le transfert
const balance = await checkStoreBalance(storeId);
const requiredAmount = amountCents + estimatedFees; // Inclure les frais estimés
if (balance < requiredAmount) {
throw new Error('Solde insuffisant');
}
// Créer le transfert
const response = await fetch('https://api.jeko.africa/partner_api/transfers', {
method: 'POST',
headers: {
'X-API-KEY': apiKey,
'X-API-KEY-ID': apiKeyId,
'Content-Type': 'application/json'
},
body: JSON.stringify({
storeId,
contactId,
amountCents,
currency,
description
})
});
if (!response.ok) {
const error = await response.json();
// Gérer les erreurs spécifiques
switch (error.id) {
case 'insufficient_balance':
// Gérer le solde insuffisant
console.error('Solde insuffisant:', error.message);
break;
case 'contact_not_found':
// Gérer le contact introuvable
console.error('Contact introuvable:', error.message);
break;
case 'store_not_found':
// Gérer le magasin introuvable
console.error('Magasin introuvable:', error.message);
break;
case 'transfer_failed':
// Gérer l'échec du transfert
console.error('Transfert échoué:', error.message);
// Optionnel : réessayer après un délai
break;
default:
console.error('Erreur inconnue:', error);
}
throw error;
}
return await response.json();
} catch (error) {
// Gérer les erreurs réseau ou autres
console.error('Erreur lors de la création du transfert:', error);
throw error;
}
}Utilisation des webhooks pour le suivi
Configurez des webhooks pour être notifié automatiquement des changements de statut des transferts. Cela vous permet de :
- Suivre les transferts en temps réel
- Gérer les échecs automatiquement
- Mettre à jour votre système lorsque le statut change
Consultez la documentation Webhooks pour plus d'informations.
Bonnes pratiques
- Vérifications préventives : Toujours vérifier le solde et l'existence du contact avant de créer un transfert
- 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
- Retry logic : Pour les erreurs temporaires (comme
transfer_failed), implémentez une logique de réessai avec backoff exponentiel - Notifications utilisateur : Informez l'utilisateur des erreurs de manière claire et actionnable
- Monitoring : Surveillez les taux d'échec pour identifier les problèmes récurrents
Support
Si vous rencontrez des erreurs persistantes ou des problèmes non documentés, contactez le support JEKO à hello@jeko.africa.