Limites et sécurité
Les limites
| Limite | Valeur |
|---|---|
| Quota de requêtes | 120 requêtes par minute et par application (clés sandbox et live comptées ensemble pour l’application) |
| Montant minimum | 0.01 |
| Montant | 12 chiffres au plus au total, dont 2 décimales au plus |
description |
500 caractères |
customer_phone |
20 caractères |
| Délai d’attente de votre webhook | 15 secondes |
| Nouvelles tentatives d’une notification | 3, à 1 minute d’intervalle |
Paiement PENDING sans réponse de l’opérateur |
expiré au bout de 30 minutes |
Au-delà du quota, vous recevez 429 Too Many Requests. Attendez quelques secondes puis réessayez. Si vous interrogez le statut en boucle, espacez les requêtes (3 à 5 secondes) et préférez les webhooks.
La sécurité, en 10 règles
- Tous les appels à MafPay se font depuis votre serveur. Jamais depuis un navigateur ou une application mobile.
- Le secret
sk_…ne quitte jamais votre serveur : ni front-end, ni dépôt Git, ni logs, ni email. - Variables d’environnement pour les clés, jamais dans le code.
- HTTPS partout, y compris pour votre
webhook_urlen production. - Vérifiez la signature de chaque notification (Webhooks), sur le corps brut, en temps constant.
- Vérifiez le montant et la référence d’un paiement avant de livrer.
- Soyez idempotent : traitez une notification une seule fois même si elle arrive plusieurs fois.
- Ne croyez jamais le navigateur : « le client est revenu sur ma page de succès » ne prouve rien. Seul le statut
SUCCESS(par notification ou par consultation du statut) fait foi. - Régénérez immédiatement vos clés dans le portail si vous soupçonnez une fuite.
- Utilisez des applications séparées pour vos environnements et produits (test, production, chaque site) : chacune a ses propres clés et se régénère indépendamment.
Les montants
- Envoyez
amountsous forme de texte ("5000") : cela évite les erreurs d’arrondi des nombres à virgule. - En franc CFA (
XOF), utilisez des montants entiers. Orange Money les impose. - Ne recalculez pas un montant à partir de la réponse : comparez
data.amountde la notification ("5000.00") à votre commande en tant que nombre (Number("5000.00") === 5000), pas en texte.
Vos données (metadata)
metadataest un objet JSON libre que MafPay conserve tel quel et vous renvoie dans la réponse d’initiation, dans le statut de paiement et dans chaque notification.- Mettez-y l’identifiant de votre commande (
order_id), pas de données sensibles (mots de passe, numéros de carte…). - MafPay ne modifie jamais vos
metadata: les données de l’opérateur sont stockées à part.
Les adresses de notification et la protection SSRF
MafPay n’appelle jamais une adresse webhook_url qui pointe vers un réseau privé (localhost, 10.x, 192.168.x, adresses internes des hébergeurs…) : c’est une protection contre les attaques par détournement. En production, votre adresse doit donc être publique et en HTTPS. En développement, utilisez un tunnel (ngrok, Cloudflare Tunnel) pour exposer votre machine.