Aller au contenu
← Tous les articles
Le callback qui a dit `SUCCESS`
Insight· 4 min read

Le callback qui a dit `SUCCESS`

Vendredi, l'application affichait Payé. Lundi, 15 000 XOF manquaient. Le callback s'appelait SUCCESS. C'était tout le problème.

La finance ouvre le fichier de settlement lundi matin. Trois lignes du lot mobile money de vendredi ne correspondent pas au grand livre. Le support a déjà clos les tickets — l'app affichait Paiement réussi. Le produit demande pourquoi l'ops « rouvre » un lancement au vert.

Le fournisseur ne mentait pas. Votre système a mappé SUCCESS à réglé alors que le fournisseur voulait seulement dire accepté pour traitement.

C'est l'écart de rapprochement le plus fréquent en audit fintech ouest-africain. Suite directe des patterns d'intégration mobile money : mêmes rails, vocabulaire plus précis.

Trois sens cachés dans un mot

Sur le papier, chaque fournisseur expose quelque chose comme SUCCESS, FAILED ou PENDING. En production, les équipes découvrent au moins trois moments distincts :

MomentCe que le fournisseur veut souvent direCe que la finance entend
AcceptéRequête reçue ; le débit peut encore échouerRien — ne pas reconnaître le revenu
ConfirméWallet utilisateur débité ; fonds en floatPassif qui bouge ; pas encore réglé banque
RégléFichier batch / virement banque a boucléCorrespondance ligne à ligne au rapport

Wave, Orange Money et Free Money n'utilisent pas les mêmes libellés. Certains envoient SUCCESS au premier callback sans second envoi. D'autres envoient COMPLETED des jours plus tard dans un CSV. Quelques-uns exposent une API où SUCCESS retourne encore settlementStatus: PENDING.

Si votre modèle domaine n'a qu'un booléen — isSuccessful — vous finirez par mentir à au moins une audience.

La séquence que la plupart des équipes supposent

Lundi, 09h12

La finance ouvre le fichier batch. OM-88421 ne s'y trouve pas.

Voici ce que le week-end a masqué. Vendredi 16h44, un callback FAILED a quitté le provider. Votre endpoint était saturé : il n'est jamais arrivé. Samedi, l'API de statut répondait encore succès — règlement toujours en attente. Personne côté ops n'a vérifié — le ticket était déjà au vert.

Trois systèmes, trois vérités. L'application indique payé. Le provider indique pending. La banque n'indique rien. Les 15 000 XOF n'ont jamais bougé.

Pas une panne : un mot qui signifiait accepté, stocké comme confirmé, reporté comme settled.

Arrêtez de recopier le mot

Le premier SUCCESS est un ACK : la requête a été prise en compte. En cours de traitement. Pas Payé.

Un statut provider n'est donc pas un statut métier. C'est un événement à interpréter.

Ce ne sont pas trois traductions du même mot. Ce sont trois faits différents :

ACK — le provider a reçu ou accepté la demande. CAPTURED — la valeur a effectivement été débitée ou créditée sur le rail. SETTLED — la transaction est reconnue dans le règlement ou le rapprochement. FAILED même si un callback antérieur annonçait un succès.

Exposez ACK ou CAPTURED à l'utilisateur. Écrivez au ledger à CAPTURED ou à SETTLED — une seule politique, formellement documentée. Mélangez les deux, et le lundi matin recommence. Le rapprochement comble un écart ; il ne crée pas de francs.

Ne posez jamais settledAt sur le premier callback. Le handler qui mappe au lieu de recopier est détaillé dans les patterns d'intégration mobile money.

Le lundi qui aurait dû arriver

Si le SUCCESS de vendredi était devenu ACK, l'application aurait affiché En cours. Le support aurait vu une intention active. Le FAILED manqué serait remonté au poll suivant. Et le fichier du lundi aurait été fidèle : aucune ligne, parce que rien n'avait été capturé.

La finance n'aurait pas cherché un fantôme dans un lancement au vert. Elle aurait traité un paiement bloqué.

Mêmes rails. Même callback. Dictionnaire différent.

Un callback est une phrase dans la langue du provider. Votre architecture doit la traduire avant qu'elle ne devienne un fait financier.

Le mensonge suivant

SUCCESS était le premier mensonge. Le suivant sera un silence.

Le provider n'est pas tombé : il est devenu lent. Trois secondes de silence — assez pour qu'un client impatient relance, puis relance encore. Même marchand, même montant, trois virements en vol.

Quatre-vingt-dix secondes avant un double paiement.

Ce qui l'a arrêté →

Vous voulez appliquer cela sur votre plateforme ?

Décrivez votre paysage technique et vos contraintes — je vous donnerai un avis direct s'il y a un fit technique.