Passer au contenu principal
Ce guide explique tous les statuts que vous rencontrerez lors du travail avec les paiements, décaissements et transferts dans Yabetoo.

Statuts des intentions de paiement

Une intention de paiement passe par plusieurs statuts au cours de son cycle de vie :
StatutDescriptionProchaines étapes
pendingIntention créée, en attente de confirmationConfirmer le paiement avec les détails du client
processingPaiement en cours de traitement par le fournisseur Mobile MoneyAttendre la fin
succeededPaiement effectué avec succèsExécuter la commande
failedPaiement échouéVérifier la raison de l’erreur, permettre de réessayer

Flux des statuts

Statuts des sessions de paiement

StatutDescription
pendingSession créée, en attente de paiement
completePaiement effectué avec succès
expiredSession expirée sans paiement
canceledSession annulée

Statuts des décaissements

Les décaissements (versements aux clients) ont les statuts suivants :
StatutDescription
pendingDécaissement créé, en file d’attente pour traitement
processingEn cours d’envoi au destinataire
succeededArgent envoyé avec succès au destinataire
failedDécaissement échoué

Statuts des transferts

Les transferts (remittances) suivent le même schéma :
StatutDescription
pendingTransfert en file d’attente
processingTransfert en cours
succeededTransfert terminé
failedTransfert échoué

Gérer les différents statuts

Paiements réussis

Lorsqu’un paiement atteint succeeded :
if (payment.status === "succeeded") {
  // 1. Mettre à jour votre base de données
  await updateOrderStatus(orderId, "paid");

  // 2. Envoyer une confirmation au client
  await sendConfirmationEmail(customer.email);

  // 3. Déclencher l'exécution
  await fulfillOrder(orderId);
}

Paiements échoués

Lorsqu’un paiement échoue, vérifiez le failure_message :
if (payment.status === "failed") {
  const reason = payment.failure_message;

  switch (reason) {
    case "LOW_BALANCE":
      // Demander au client de recharger
      showMessage("Solde insuffisant. Veuillez recharger votre compte Mobile Money.");
      break;
    case "APPROVAL_REJECTED":
      // Le client a rejeté le paiement
      showMessage("Paiement annulé. Veuillez réessayer.");
      break;
    case "TIMEOUT":
      // Le client n'a pas répondu
      showMessage("Délai de paiement dépassé. Veuillez réessayer.");
      break;
    default:
      showMessage("Paiement échoué. Veuillez réessayer ou utiliser un autre numéro.");
  }
}

Paiements en cours

Pendant qu’un paiement est en processing :
if (payment.status === "processing") {
  // Afficher un état d'attente à l'utilisateur
  showMessage("En attente de la confirmation du paiement...");

  // Le client devrait recevoir une notification sur son téléphone
  // Ne pas permettre les soumissions en double
  disablePayButton();
}

Messages d’échec

Lorsqu’un paiement échoue, le champ failure_message fournit des détails :
MessageDescriptionAction recommandée
INTERNAL_PROCESSING_ERRORErreur systèmeRéessayer plus tard
APPROVAL_REJECTEDLe client a rejetéDemander de réessayer
EXPIREDDemande expiréeCréer une nouvelle intention
TIMEOUTPas de réponse du clientDemander de réessayer
PAYEE_NOT_FOUNDNuméro de téléphone invalideVérifier le numéro
PAYEE_NOT_ALLOWED_TO_RECEIVELe destinataire ne peut pas recevoirContacter le support
NOT_ALLOWEDTransaction bloquéeContacter le support
LOW_BALANCE_OR_PAYEE_LIMIT_REACHED_OR_NOT_ALLOWEDFonds insuffisants, limite de transaction atteinte, ou transaction non autoriséeLe client doit recharger ou contacter son opérateur

Événements Webhook par statut

StatutÉvénement Webhook
succeededintent.completed
succeeded (décaissement)disbursement.completed

Bonnes pratiques

  1. Gérez toujours tous les statuts - Ne supposez pas que les paiements réussiront toujours
  2. Utilisez les webhooks pour la fiabilité - Ne vous fiez pas uniquement aux réponses synchrones
  3. Journalisez les changements de statut - Gardez un historique pour le débogage et le support
  4. Affichez des messages clairs - Aidez les utilisateurs à comprendre ce qui s’est passé et quoi faire ensuite
  5. Implémentez une logique de nouvelle tentative - Permettez aux clients de réessayer les paiements échoués
Pour tester différents statuts, utilisez les numéros de test dans l’environnement sandbox.