PesaBridge
Toutes les analyses
TechniqueJun 2026 · 11 min de lecture

Le paiement sur invite expliqué : le push STK bien fait

Comment une demande du marchand devient une invite de code PIN sur le téléphone du client, et ce qu'il faut pour la rendre instantanée, sûre et idempotente.

T
The PesaBridge team · Engineering

Le paiement sur invite est le parcours que tout client de mobile money connaît par cœur sans jamais y penser. Un marchand demande de l'argent, une invite apparaît sur le téléphone du client, il saisit son code PIN, et c'est fait. C'est le mode de paiement le plus utilisé sur les marchés qui ont adopté le mobile money tôt, et il paraît sans effort. Cette facilité est le fruit d'une quantité surprenante d'ingénierie qui travaille dur pour rester invisible. Il suffit d'une erreur pour que la magie devienne un double débit, un paiement bloqué, ou un marchand qui a livré des marchandises contre de l'argent qui n'est jamais arrivé.

Voici ce qui se passe réellement derrière l'invite, et ce qu'il faut pour la rendre instantanée, sûre et à l'abri de tout double débit.

Deux façons dont l'invite arrive

Il existe deux mécanismes derrière « une invite apparaît », et ils comptent parce qu'ils n'ont ni la même portée ni les mêmes modes de défaillance.

Le mécanisme classique est le SIM Application Toolkit (STK) : du code qui s'exécute sur la carte SIM elle-même, ce qui explique qu'il puisse afficher une invite de code PIN sécurisée sur un simple téléphone basique sans application installée. C'est grâce au STK que les premiers systèmes de mobile money ont atteint tout le monde : le menu et la saisie du PIN sont pilotés depuis la SIM, via le réseau, sur un matériel qui n'a rien d'autre. Le mécanisme moderne est la notification d'application : une notification envoyée à une application pour smartphone qui ouvre un écran de confirmation. Les deux aboutissent au même point : le client autorise, et un débit suit son cycle de vie. Une plateforme digne de ce nom prend en charge les deux, car la clientèle utilise les deux.

Le débit est une machine à états

L'idée la plus importante du paiement sur invite est qu'un débit n'est pas un événement : c'est une machine à états avec un ensemble explicite et bien défini d'états et de transitions. Le traiter comme un appel « envoyer et oublier » est la source de la plupart des incidents en production. Les états sont à peu près les suivants :

  • En attente : le marchand a demandé un débit ; l'invite a été envoyée ; le système attend le client.
  • Autorisé : le client a saisi son PIN et confirmé ; le système a vérifié le solde et les plafonds et enregistre le mouvement.
  • Terminé : le grand livre a passé des écritures équilibrées ; l'argent a bougé ; le marchand peut livrer.
  • Refusé / Expiré / Échoué : le client a refusé, l'invite a expiré ou un contrôle a échoué ; aucun argent n'a bougé et le débit est clôturé proprement.

Chaque débit se trouve dans exactement un de ces états à tout instant, et ne peut évoluer que selon des transitions définies. Ce n'est pas de la bureaucratie : c'est ce qui rend le parcours raisonnable et récupérable. Quand quelque chose tourne mal, la question est toujours « dans quel état est ce débit, et quelle transition s'est bloquée ? », une question qui a une réponse, plutôt qu'un haussement d'épaules.

Comment le marchand apprend le résultat

Le système du marchand doit savoir si le débit a abouti : pour imprimer un reçu, remettre la marchandise, mettre à jour une commande. Il y a deux façons de le savoir, et la différence entre elles est celle qui sépare une intégration poussive d'une intégration nette.

  1. L'interrogation (polling). Le marchand interroge le point d'accès de statut, encore et encore : « c'est fait ? ». Cela fonctionne, mais c'est coûteux et lent : interroger trop souvent surcharge l'API ; trop rarement, et le client attend debout à la caisse.
  2. Les webhooks. La plateforme envoie au marchand un rappel signé dès que le débit change d'état. Le marchand l'apprend en quelques instants, sans appels inutiles, et reçoit un événement clair sur lequel agir. C'est la bonne brique de base, et une plateforme bien conçue en fait le comportement par défaut, avec l'interrogation en secours.

Ce qui le rend digne de confiance

Trois propriétés transforment une démonstration qui fonctionne en un système sur lequel un marchand peut bâtir son activité.

L'idempotence : l'arme contre le double débit

Les réseaux relancent les requêtes. Si la requête « créer un débit » d'un marchand expire et qu'il la renvoie, vous ne devez pas créer un second débit. Chaque requête de création porte une clé d'idempotence ; la plateforme l'enregistre, et une répétition avec la même clé renvoie le débit d'origine au lieu d'en créer un nouveau. La même discipline protège l'étape de confirmation. La garantie que ressent le client, « je n'ai été débité qu'une fois », c'est cette propriété, appliquée au moment où l'argent bouge, pas une vérification optimiste dans l'application.

Des webhooks signés

Un webhook est un appel HTTP non sollicité qui arrive sur le serveur du marchand en affirmant qu'un paiement a abouti. Pourquoi le croire ? Parce que chaque rappel est signé : une signature HMAC-SHA256 calculée sur le contenu avec un secret partagé que seuls la plateforme et le marchand connaissent. Le marchand recalcule la signature et rejette tout ce qui ne correspond pas, ce qui rend inutiles pour un attaquant les faux rappels « vous avez été payé ». Et comme les réseaux tombent en panne, les webhooks sont relancés avec un délai croissant jusqu'à accusé de réception, de sorte qu'une coupure momentanée chez le marchand ne fait pas perdre l'événement : il est renvoyé jusqu'à ce que son serveur réponde avec succès.

L'expiration

Un débit non confirmé ne peut pas traîner indéfiniment. Si le client s'en va sans saisir son PIN, le débit doit expirer proprement plutôt que rester un engagement ouvert qui pourrait mystérieusement aboutir une heure plus tard. Une fenêtre d'expiration bornée et prévisible est ce qui garde la vision du marchand cohérente avec celle du client.

Les cas limites qui distinguent les vrais systèmes des démonstrations

Le parcours heureux (envoi, confirmation, fin) représente le quart facile du travail. Les défaillances intéressantes se logent dans les interstices :

  • Le client confirme, mais le réseau perd l'accusé de réception. Le débit est completed sur la plateforme ; le marchand n'a rien reçu. La relance du webhook existe exactement pour cela. Le gestionnaire du marchand doit lui aussi être idempotent, pour qu'un événement « terminé » renvoyé ne fasse pas livrer la marchandise deux fois.
  • Deux confirmations arrivent en concurrence. Une confirmation relancée ne doit pas passer deux écritures. La clé d'idempotence et la machine à états garantissent ensemble que la seconde confirmation constate « déjà terminé » au lieu de déplacer l'argent à nouveau.
  • Le débit expire au moment même où le client confirme. La machine à états doit désigner un seul gagnant : la transition est atomique, donc le débit est soit autorisé soit expiré, jamais les deux, et le client est clairement informé.
  • Le rapprochement. En fin de journée, chaque débit completed doit correspondre à un ensemble équilibré d'écritures et à un enregistrement de règlement. Comme le cycle de vie du débit et le grand livre sont liés, l'achèvement est l'écriture, le rapprochement se fait par construction plutôt que par enquête.

Une chronologie détaillée

Voici ce qui se passe, seconde par seconde, quand un marchand débite un client de 1 250 pour des courses. Les durées sont typiques et non garanties.

TempsCe qui se passeÉtat du débit
0,0 sLe caissier saisit le numéro du client et le montant ; la caisse envoie une requête de création de débit avec une clé d'idempotenceEn attente
0,3 sLa plateforme valide le marchand et le client et envoie l'inviteEn attente
2–20 sLe client lit le nom du marchand et le montant et saisit son PINEn attente
+0,2 sLe cœur du système vérifie le PIN, le solde et les plafonds, et passe des écritures équilibréesTerminé
+0,5 sUn webhook signé parvient au marchand ; le client et le marchand reçoivent leurs confirmationsTerminé
Plus tardLe solde du marchand est réglé vers la banque selon son calendrierTerminé, réglé

La lecture et la saisie du client dominent le temps. Tout ce que fait la plateforme prend bien moins d'une seconde, ce qui explique que l'expérience paraisse instantanée quand elle fonctionne, et que la rare étape lente se remarque immédiatement.

Bien construire le côté marchand

La moitié d'une intégration fiable de paiement sur invite se trouve dans le système du marchand. Un bon gestionnaire de webhooks :

  • Vérifie la signature avant de faire confiance au moindre élément du contenu.
  • Est idempotent : une seconde livraison du même événement ne change rien.
  • Répond rapidement et fait le travail lourd ensuite, pour que la plateforme n'expire pas et ne relance pas inutilement.
  • Apparie sur la référence du débit, jamais sur le seul montant et numéro de téléphone.
  • Se rabat sur le point d'accès de statut si aucun événement n'arrive dans le délai attendu, plutôt que de conclure à un échec.
  • Journalise chaque événement reçu, pour que les litiges trouvent leur réponse dans les enregistrements.

Choisir la fenêtre d'expiration

L'expiration est un compromis. Trop courte, et les clients qui cherchent leur téléphone voient le débit expirer avant de confirmer. Trop longue, et les marchands attendent avec la marchandise sur le comptoir, tandis que des invites périmées arrivent après le départ du client. La plupart des opérateurs retiennent une à deux minutes pour les paiements en personne, davantage pour les demandes à distance, comme une facture envoyée à un client chez lui. Quelle que soit la fenêtre, affichez-la : un caissier qui sait que l'invite dure une minute sait quand réessayer.

Les détails que les clients remarquent

De petits choix sur l'écran d'invite décident si les clients lui font confiance :

  • Afficher le nom enregistré du marchand, pas un code interne, pour que le client sache qui demande.
  • Afficher clairement le montant et la référence avant le champ du PIN.
  • Proposer une option de refus claire, pour qu'un client qui n'attendait pas l'invite puisse la refuser plutôt que l'ignorer.
  • Confirmer en toutes lettres et par message : un reçu avec le marchand, le montant et la référence, à l'écran et par SMS.
  • Mettre en garde contre les invites inattendues. Des fraudeurs envoient des invites en espérant qu'un client approuve par réflexe ; une courte ligne comme « N'approuvez que si vous payez ce marchand » réduit ce risque.

Un seul cycle de vie, pour tous les canaux

Dernier élément pour bien faire : le paiement sur invite ne doit pas être un cas particulier câblé séparément dans l'application, la caisse et l'API. Ce doit être un cycle de vie de débit unique que tous les canaux pilotent : un client qui scanne le QR d'un marchand, un marchand qui envoie un débit depuis un terminal de vente et un partenaire qui appelle l'API développeur créent tous le même type de débit, passant par les mêmes états, écrivant dans le même grand livre, émettant les mêmes webhooks signés. Construisez-le une fois, correctement, et chaque canal hérite des garanties.

Paiement sur invite, QR ou numéro de caisse ?

Le paiement sur invite est l'un des trois moyens courants d'encaisser un client. Chacun convient à une situation différente :

MéthodeQui l'initieFonctionne sur téléphone basiqueIdéal pour
Paiement sur inviteLe marchandOui, via des invites sur la SIMCaisses et passages en caisse où le marchand connaît le montant
Code QRLe client scanneNon, il faut une application smartphoneBoutiques avec beaucoup de clients sur smartphone ; codes statiques pour les petits commerçants
Numéro de caisse ou de facturierLe client le saisitOui, via USSDTout marchand ; la solution de repli universelle

Les marchands s'en sortent le mieux quand ils peuvent accepter les trois, et que la plateforme les traite comme un même type de paiement arrivant par des chemins différents.

La fraude autour des invites

Parce qu'une invite demande au client d'approuver un paiement, elle attire l'ingénierie sociale. Le schéma courant : un fraudeur déclenche des invites puis appelle le client en se faisant passer pour le fournisseur, et le convainc d'approuver. Les défenses agissent à plusieurs niveaux : afficher en évidence le nom vérifié du marchand demandeur ; limiter le nombre d'invites qu'un marchand peut envoyer au même numéro en peu de temps ; surveiller les marchands dont les invites sont surtout refusées ou signalées ; et répéter aux clients que le fournisseur ne leur demandera jamais d'approuver un paiement par téléphone. L'intégration des marchands compte aussi, car un marchand vérifié à l'identité traçable est un mauvais outil de fraude.

Mesurer le paiement sur invite

IndicateurPourquoi il compte
Taux d'approbationLa part des invites que les clients approuvent ; une chute soudaine signale des problèmes de livraison ou de la confusion
Délai d'approbationLe temps que mettent les clients ; des délais longs suggèrent des écrans peu clairs ou une livraison lente
Taux d'expirationLes invites qui expirent sans réponse ; ajuster la fenêtre d'expiration et les consignes aux caissiers
Succès des webhooks au premier essaiLa fiabilité avec laquelle les marchands reçoivent les résultats sans relance
Invites inattendues signaléesUn signal précoce de tentatives de fraude

Au-delà du comptoir : les demandes à distance

Le même mécanisme fonctionne quand le client n'est pas devant la caisse. Une école peut envoyer des demandes de frais aux parents, un service public peut demander le paiement d'une facture, un livreur peut demander le paiement à son arrivée. Les demandes à distance nécessitent quelques ajustements : une expiration plus longue, une description claire de ce qui est payé, le nom vérifié du demandeur, et une référence que le client reconnaît sur une facture ou un message. La machine à états, la signature et l'idempotence restent strictement identiques, c'est pourquoi un cycle de vie de débit unique sert aussi bien la caisse que la facture et l'API.

Tester une intégration de paiement sur invite

Avant qu'un marchand passe en production, exécutez ces cas dans l'environnement de test :

  • approuver, refuser et laisser expirer une invite, et vérifier que le système du marchand affiche le bon résultat dans chaque cas ;
  • envoyer deux fois la même requête de création avec la même clé d'idempotence et confirmer qu'un seul débit existe ;
  • faire échouer le point d'accès webhook du marchand pendant quelques minutes et confirmer que les événements arrivent une fois le service rétabli ;
  • envoyer un webhook avec une mauvaise signature et confirmer que le marchand le rejette ;
  • tenter un débit au-dessus du plafond du client et confirmer qu'il est refusé proprement ;
  • vérifier que les remboursements renvoient au débit d'origine.

Une intégration qui réussit ces tests se comportera bien lors de sa journée la plus chargée.

Questions fréquentes

Et si le client n'a pas de connexion de données ?

Les invites sur la SIM fonctionnent via le réseau mobile sans données. Pour les invites d'application, les clients sans données peuvent toujours payer en saisissant le numéro de caisse du marchand via USSD.

Un marchand peut-il débiter un client sans son accord ?

Non. Le débit n'aboutit que lorsque le client l'autorise avec son PIN. Un marchand peut demander ; seul le client peut approuver.

Comment sont traités les remboursements ?

Un remboursement est une nouvelle transaction du marchand vers le client, liée au débit d'origine. L'original reste dans l'historique, pour que les deux parties voient ce qui a été payé et ce qui a été rendu.

Que doit faire un caissier si le client dit avoir approuvé mais que la caisse n'affiche rien ?

Attendre le résultat plutôt qu'encaisser deux fois. La caisse doit interroger le statut du débit à l'aide de sa référence. Si le débit a abouti, le résultat s'affichera en quelques instants ; s'il a expiré, le caissier peut envoyer une nouvelle invite sans risque. N'acceptez jamais une capture d'écran de confirmation comme preuve de paiement.

Le paiement sur invite est-il sûr pour les gros montants ?

Les plafonds du niveau du client s'appliquent exactement comme pour tout autre paiement, et l'étape du PIN est la même. Pour les gros paiements entre entreprises, les marchands associent souvent une invite à une référence de facture, pour que les deux parties puissent rattacher le paiement à un document.

Fait ainsi, le paiement sur invite paraît instantané et rend tout double débit impossible, non pas parce que rien n'échoue jamais, mais parce que chaque défaillance a un état défini, une relance et un chemin de retour vers la cohérence. C'est ce que PesaBridge livre, dans les applications comme dans l'API développeur, sur un cycle de vie de débit unique.

Questions sur les paiements marchands

Quelle différence entre un QR code statique et un QR code dynamique ?

Un code statique est imprimé une fois et le client saisit le montant. Un code dynamique est créé pour chaque vente, avec le montant déjà inclus.

Qu'est-ce que le paiement par notification (prompt-to-pay) ?

La boutique saisit le numéro du client et le montant, et le client valide la demande de paiement sur son propre téléphone avec son code PIN.

Comment la boutique sait-elle qu'elle a été payée ?

La vente est confirmée sur l'application ou la caisse dès que le paiement est confirmé, et chaque paiement apparaît dans le tableau de bord marchand.

Canaux d'accès

Touchez chaque client, quel que soit son mode de paiement.

Une matrice d'accès au portefeuille que vous configurez par catégorie d'utilisateur — client, agent ou marchand — sur chaque canal.

USSD
Appli mobile
Web
Code QR
NFC
SMS
TPV

La plateforme

Tout ce qu'un portefeuille exige — un socle, votre marque.

L'expérience grand public des applis que l'on adore, l'étendue d'une véritable plateforme financière et une administration SaaS qui gère l'ensemble sans code.

Comment ça marche

En ligne en quelques semaines, pas en années.

01

Configurez votre marque et votre pays

Définissez votre nom, logo, couleurs, devise, langue et niveaux de KYC dans l'administration — les applis se personnalisent instantanément.

02

Connectez vos rails

Reliez banques, mobile money, cartes, facturiers, fisc et opérateurs télécoms via des adaptateurs — uniquement ce dont votre marché a besoin.

03

Lancez sur appli, USSD et web

Publiez vos propres applis sur les deux stores, un code court USSD et des portails web — le tout depuis une seule plateforme.

Portefeuilles à valeur stockée Réseau d'agents Paiements marchands USSD API développeur Invitation à payer Niveaux de KYC Annulations Distribution de float Règlement Webhooks signés Marque blanche Portefeuilles à valeur stockée Réseau d'agents Paiements marchands USSD API développeur Invitation à payer Niveaux de KYC Annulations Distribution de float Règlement Webhooks signés Marque blanche

Prêt à lancer votre portefeuille ?

Réservez une démo et nous mettrons en place votre marque, votre pays et vos rails — et vous guiderons à travers les applis, l'administration et l'API.

Vous préférez parler ? Appelez le +254 746 883809