Ce qui protège votre client, votre argent et vos accès.
Une passerelle de paiement est une cible : elle voit passer de l'argent, des numéros de téléphone et des pièces d'identité. Cette page décrit les protections réellement en place dans WalleoPay, celles que vous devez mettre en place de votre côté, et ce que nous ne sommes pas en mesure de promettre aujourd'hui.
Nous ne voyons pas ce que nous n'avons pas besoin de voir
Le code secret Mobile Money se saisit sur le téléphone du client, chez l'opérateur. Les numéros de carte se saisissent sur la page hébergée de notre prestataire carte. Ni l'un ni l'autre n'atteint nos serveurs.
Une notification n'est pas une preuve
Aucun message entrant ne fait à lui seul passer un paiement en réussi : il déclenche une vérification authentifiée auprès de l'opérateur, et c'est cette réponse-là qui fait foi.
Tout mouvement laisse une ligne
Le solde d'un marchand n'est pas recalculé à la volée : chaque crédit et chaque débit est une écriture, avec le solde obtenu, dans un journal qu'on ne réécrit pas.
Pendant le paiement
Ce qui protège votre client sur la page de paiement
C'est le moment où un client hésite et où un attaquant a le plus à gagner. La page de paiement est donc la partie la plus verrouillée du site : elle ne charge rien de l'extérieur, elle ne demande jamais un secret bancaire, et elle ne vit qu'un temps.
Le code secret ne passe pas par nous
En Mobile Money, la page de paiement ne demande qu'un numéro de téléphone. La demande de validation s'affiche ensuite sur le téléphone du client, et c'est chez l'opérateur qu'il compose son code. WalleoPay ne dispose d'aucun formulaire capable de recueillir ce code — il n'y a donc rien à voler chez nous.
- Aucun champ de code secret, ni sur la page, ni dans l'API.
- L'opérateur est déduit du préfixe : le client n'a pas de choix à rater.
- Pour la carte bancaire, la saisie a lieu sur la page hébergée de notre prestataire : aucun numéro de carte n'atteint nos serveurs.
Une page qui ne charge rien de l'extérieur
Toutes nos réponses HTML portent une politique de sécurité de contenu stricte. Les scripts viennent de notre seul domaine et les rares scripts en ligne portent un jeton régénéré à chaque réponse : une injection ailleurs sur le site ne suffirait pas à afficher un faux formulaire de paiement.
- Scripts
- Notre domaine uniquement, plus un jeton à usage unique par réponse.
- Contenus intégrés
- Les greffons et objets externes sont interdits.
- Destination des formulaires
- Notre domaine et celui de l'opérateur concerné, rien d'autre.
- Mise en cadre
- La page ne peut pas être encadrée par un site tiers.
Un lien qui expire
Chaque paiement a sa propre adresse, valable 30 minutes. Un lien retrouvé plus tard dans un historique de navigation ne mène nulle part.
Une cadence surveillée
La page de paiement accepte dix tentatives par minute et par adresse IP. Un script qui essaie des numéros en série est arrêté avant d'être utile.
Les sondages automatisés bloqués
Les demandes qui cherchent un fichier de configuration, une sauvegarde de base ou un panneau WordPress reçoivent un 404 sans jamais toucher la base de données, et laissent une trace.
En-têtes appliqués à chaque réponse
Interdiction pour le navigateur de deviner le type d'un fichier servi.
Mise en cadre réservée à notre propre domaine.
Référent transmis seulement vers des destinations chiffrées de même origine.
Caméra, micro, géolocalisation et interface de paiement du navigateur désactivés.
Isolation de la fenêtre : un site tiers ouvert depuis la page ne garde pas la main dessus.
En production et sur HTTPS, connexion chiffrée imposée pour un an, sous-domaines compris.
Votre argent
Ce qui empêche un faux encaissement et un double débit
Les deux fraudes les plus simples contre une passerelle consistent à lui faire croire qu'un paiement a réussi, ou à lui faire enregistrer deux fois la même opération. Les deux sont traitées par construction, pas par surveillance.
Une notification opérateur ne décide de rien
Les notifications entrantes des opérateurs sont acceptées, journalisées, puis traitées comme un simple signal : même lorsqu'elles annoncent un succès, nous repassons par une interrogation authentifiée de l'opérateur avant de changer l'état du paiement. Un message forgé ne crédite personne.
Rejouer une requête ne crée pas un second paiement
Chaque création de paiement peut porter une clé d'idempotence. Si la même requête revient, nous renvoyons la réponse d'origine au lieu d'en créer une seconde. Une clé réutilisée avec un contenu différent est refusée. Et si la première requête meurt en vol, le verrou se relâche après 90 secondes pour que la commande reste repassable.
Un journal en écriture seule
Votre solde n'est jamais recalculé depuis la liste des paiements : chaque mouvement est une écriture datée, avec son type, son sens, son montant et le solde obtenu. Deux paiements qui se dénouent à la même milliseconde sont sérialisés par un verrou sur votre ligne de compte, jamais additionnés de travers.
Des notifications signées, et qui insistent
Chaque notification sortante porte une signature calculée sur l'horodatage et le corps du message, avec le secret de notification propre à votre compte. Signer le corps seul permettrait de rejouer indéfiniment un message capté ; signer l'horodatage avec lui vous laisse le rejeter au-delà de votre fenêtre de tolérance.
X-WalleoPay-Signature: t=1737129600,v1=<hmac_sha256>
signature = hmac_sha256(horodatage . "." . corps, secret)
- Jusqu'à 8 tentatives par notification, espacées de 10 secondes à 6 heures.
- Tolérance d'horodatage conseillée : 5 minutes.
- Chaque livraison garde son code de réponse et le début du corps renvoyé par votre serveur.
- Une livraison peut être rejouée à la main depuis votre tableau de bord.
Une piste vérifiable, paiement par paiement
Chaque paiement conserve la suite de ses événements : changement d'état, origine du changement, message d'erreur de l'opérateur, contenu reçu. En cas de contestation, la question n'est pas de savoir qui se souvient de quoi, mais de relire la ligne.
- Historique daté de chaque transition, avec l'état de départ et l'état d'arrivée.
- Origine de l'événement : système, opérateur, marchand ou administrateur.
- Montants manipulés en francs entiers, sans sous-unité et sans arrondi flottant.
- Journal comptable exportable depuis votre espace, pour votre comptabilité.
- Un reversement qui échoue chez l'opérateur recrédite automatiquement votre solde.
Vos accès
Clés d'API, équipe, mots de passe
La plupart des incidents sur une passerelle ne viennent pas d'une faille, mais d'une clé oubliée dans un dépôt public ou d'un accès laissé à quelqu'un qui est parti. Voici ce que la plateforme fait pour limiter les dégâts.
Un secret que nous ne pouvons pas vous redonner
À l'émission d'une clé, le secret vous est affiché une seule fois. Nous n'en conservons qu'une empreinte SHA-256 et les quatre derniers caractères pour l'affichage. Personne chez nous ne peut donc lire votre clé, ni vous l'envoyer par courriel — et un accès en lecture à notre base ne la révélerait pas non plus.
- Le secret présenté est comparé à l'empreinte stockée, jamais à une valeur en clair.
- Une clé se révoque, elle ne se supprime pas : son historique reste lisible.
- Renouvellement immédiat depuis le tableau de bord, sans ticket ni délai.
- Une clé refusée est journalisée avec l'adresse IP et le préfixe présenté.
- Clés séparées par service : un module compromis n'expose pas les autres.
Le mode découle de la clé, jamais d'un paramètre
Une clé de test ne peut pas encaisser en réel, quelle que soit la requête envoyée. Inversement, une clé de production reste refusée tant que votre dossier de vérification n'est pas validé, ou tant que le service concerné n'est pas approuvé. Un oubli de configuration ne se transforme pas en vraie transaction.
Compte non activé
Les clés de production sont refusées avec un message explicite ; les clés de test continuent de fonctionner.
Dossier en cours d'examen
Même traitement : vous intégrez et vous testez, vous n'encaissez pas encore.
Service non approuvé
Sa clé de production est refusée même si le compte, lui, est actif.
Trois rôles, des pouvoirs distincts
Une boutique n'est pas tenue par une seule personne. Chaque membre de votre équipe reçoit un rôle, et ce rôle décide de ce qu'il peut déclencher.
| Rôle | Ce qu'il peut faire |
|---|---|
| Propriétaire | Seul à gérer l'équipe, les clés d'API et les paramètres du compte. |
| Gestionnaire | Gère les services et le quotidien, sans toucher aux accès. |
| Lecture seule | Consulte les paiements et le journal ; ne déclenche rien qui touche à l'argent. |
Les invitations passent par un jeton aléatoire à usage unique, expirent au bout de sept jours et peuvent être annulées avant d'être acceptées. Un membre se retire de l'équipe en un clic, et son rôle se change sans le réinviter.
Mots de passe et récupération de compte
- En production, dix caractères au minimum, lettres et chiffres obligatoires.
- Un mot de passe déjà apparu dans une fuite publique connue est refusé à l'inscription comme au changement.
- Les mots de passe sont hachés, jamais stockés en clair ni réversibles.
- Le formulaire de mot de passe oublié répond exactement la même chose que l'adresse existe ou non : il ne sert pas à savoir qui est client chez nous.
- Le lien de réinitialisation expire et ne fonctionne qu'une seule fois ; l'utiliser renouvelle aussi le jeton de session mémorisée.
Cadences imposées
La limite de connexion porte sur le couple adresse + IP : une attaque par dictionnaire contre un compte ne bloque pas l'accès des autres marchands.
Vos données
Pièces d'identité, identifiants opérateur, fichiers envoyés
Ouvrir un compte marchand suppose de nous confier un registre de commerce ou une pièce d'identité. Brancher vos propres comptes opérateur suppose de nous confier des identifiants. Ces deux dépôts sont traités séparément du reste.
Les pièces de votre dossier
- Stockées hors du répertoire public : aucune adresse web ne mène directement à un fichier.
- Consultation réservée à votre espace authentifié et au réexamen interne du dossier.
- Nom de fichier entièrement régénéré : le nom d'origine ne sert plus qu'à l'affichage et ne touche jamais le système de fichiers.
- Type réel relu sur le contenu du fichier, pas sur son extension : un exécutable renommé en image est refusé.
- Formats acceptés : JPG, PNG, WEBP et PDF, cinq mégaoctets au maximum.
- Empreinte SHA-256 conservée pour détecter toute altération ultérieure.
Les identifiants opérateur
Les identifiants MTN, Orange et carte bancaire enregistrés dans la plateforme sont chiffrés au repos. Une fois saisis, ils ne se réaffichent plus : l'interface n'indique qu'un champ rempli ou vide, avec les quatre derniers caractères pour les secrets.
- Chiffrement au repos des identifiants et des secrets de configuration.
- Aucun secret n'apparaît dans une réponse d'API ni dans un export.
- Modes test et production configurés séparément, jamais mélangés.
- Les modules téléchargeables sont servis depuis une liste blanche : un nom de module inconnu n'atteint jamais le système de fichiers.
Le détail de ce que nous collectons, pourquoi et pour combien de temps se trouve dans la politique de confidentialité.
Votre part du travail
Cinq règles qui tiennent votre compte à l'abri
Tout ce qui précède se joue de notre côté. Le reste dépend de la façon dont vous intégrez la plateforme. Ces cinq points couvrent la quasi-totalité des incidents que nous pouvons anticiper.
Gardez la clé secrète sur votre serveur
Une clé de production donne le droit de créer des paiements et de demander des reversements en votre nom. Elle n'a rien à faire dans du JavaScript de page, dans une application mobile livrée à vos clients, ni dans un dépôt Git. Si elle a seulement pu être lue par quelqu'un d'autre, renouvelez-la : c'est immédiat et gratuit.
Revérifiez chaque paiement par l'API avant de livrer
La seule source qui fasse foi est la réponse de l'API à une demande authentifiée sur l'identifiant du paiement. Ni l'URL de retour dans le navigateur du client, ni le contenu d'une notification ne doivent déclencher une livraison à eux seuls : l'un se falsifie dans la barre d'adresse, l'autre peut arriver deux fois, dans le désordre, ou venir d'ailleurs.
Vérifiez la signature de chaque notification
Recalculez l'empreinte sur l'horodatage et le corps reçus, comparez-la à temps constant, et rejetez tout message dont l'horodatage sort de votre fenêtre de tolérance. Répondez ensuite en moins de dix secondes : un traitement long se met en file d'attente, il ne se fait pas pendant que nous attendons votre réponse.
Tenez votre équipe à jour
Donnez le rôle le plus faible qui permette de travailler, réservez le rôle de propriétaire, retirez sans attendre l'accès d'un collaborateur qui part et annulez les invitations qui n'ont pas été acceptées. Un compte d'équipe oublié est un compte que personne ne surveille.
Signalez un incident tout de suite
Clé publiée par erreur, notification reçue d'une source inattendue, écart entre votre journal et le nôtre, comportement inexpliqué sur la page de paiement : écrivez-nous avant de chercher à comprendre seul. Nous préférons une alerte pour rien à une alerte tardive.
Le bon ordre, une fois pour toutes
- 1 Vous créez le paiement depuis votre serveur, avec une clé d'idempotence.
- 2 Le client paie sur la page hébergée ; vous ne touchez à rien.
- 3 Vous recevez une notification signée, vous la vérifiez, et vous la traitez comme un signal : allez voir.
- 4 Vous interrogez l'API sur l'identifiant du paiement, avec votre clé secrète.
- 5 L'API confirme l'état et le montant : vous livrez, et vous marquez la commande payée chez vous.
Le détail des appels, des champs et du code de vérification se trouve dans la documentation.
Franchise
Ce que nous ne promettons pas
Une page de sécurité qui n'annonce que des bonnes nouvelles ne vous aide pas à décider. Voici les limites que nous connaissons, écrites avant que vous ayez à les découvrir.
Aucun audit externe à ce jour
La plateforme est jeune. Aucun cabinet indépendant n'a encore conduit de revue de code ni de test d'intrusion sur WalleoPay. Ce que vous lisez sur cette page décrit ce qui est implémenté, pas ce qui a été validé par un tiers. Le jour où un audit aura lieu, nous en publierons la portée et la date.
Pas de certification PCI-DSS, et c'est volontaire
Nous ne manipulons aucun numéro de carte bancaire : la saisie se fait entièrement sur la page hébergée de notre prestataire carte, qui porte cette conformité pour ce qu'il traite. Nous ne prétendons donc pas être certifiés PCI-DSS — nous avons organisé le service pour ne pas avoir à l'être.
Les fonds transitent par les opérateurs
MTN Mobile Money et Orange Money restent les dépositaires de l'argent jusqu'au reversement. Une indisponibilité de leur plateforme, un blocage sur un compte ou un délai de leur côté ne dépendent pas de nous. Nous pouvons vous dire précisément où en est une opération ; nous ne pouvons pas forcer un opérateur à la dénouer.
Aucun chiffre de disponibilité annoncé
Nous n'affichons pas de taux de disponibilité et nous ne signons pas d'engagement de niveau de service chiffré : nous n'avons pas encore l'historique d'exploitation qui permettrait de le tenir. Annoncer un chiffre invérifiable serait la première chose à ne pas croire sur cette page.
Pas encore de double authentification
La connexion à votre espace repose aujourd'hui sur un mot de passe, protégé par des règles de robustesse, un refus des mots de passe déjà fuités et une limite de tentatives. L'ajout d'un second facteur est un chantier ouvert, pas une fonctionnalité disponible.
Nous ne gardons pas votre argent
Un agrégateur n'a pas vocation à conserver durablement les fonds de ses marchands. Le solde disponible est fait pour être reversé, et nous suivons un plafond de rétention de 7 jours pour pouvoir vous alerter. Ne nous utilisez pas comme un compte d'épargne.
Les engagements contractuels correspondants sont écrits noir sur blanc dans notre politique de sécurité et dans les conditions générales.
Signalement
Vous avez trouvé quelque chose
Que vous soyez marchand, développeur ou simple visiteur, écrivez-nous. Nous préférons recevoir dix signalements sans suite qu'apprendre un problème par un client mécontent. Aucune récompense n'est prévue à ce stade, et nous le disons plutôt que de le laisser croire.
Par courriel
support@walleopay.com
Objet « sécurité » pour un traitement prioritaire.
Délai de réponse
Sous un jour ouvrable
Pour un incident en cours sur un compte marchand, indiquez « incident » en objet.
Ce qu'il faut nous envoyer
- L'adresse exacte de la page ou le nom de l'appel d'API concerné.
- La date et l'heure approximatives, avec votre fuseau.
- Les étapes qui reproduisent le problème, même approximatives.
- L'identifiant du paiement s'il y en a un, jamais votre clé secrète.
Ne joignez jamais une clé secrète, un mot de passe ni un code Mobile Money à un signalement. Si une clé a fuité, renouvelez-la d'abord depuis votre tableau de bord, prévenez-nous ensuite.
Ouvrir le formulaire de contactCommencez en mode test, sans engagement
Les clés de test arrivent dès l'inscription. Vous branchez votre boutique, vous vérifiez que votre code fait bien la revérification par l'API, et vous ne passez en réel que lorsque votre dossier est validé.