Encaissez par mobile money et par carte

Une page de paiement hébergée prête à l'emploi, ou une intégration directe pour construire votre propre formulaire.

Tous les moyens sur une page

Mobile money dans 13 pays d'Afrique, carte bancaire, Apple Pay et Google Pay, sur une même page de paiement.

Reçus et idempotence

Un reçu à votre marque pour chaque paiement, renvoyable en un clic, et une clé d'idempotence sur chaque création pour ne jamais encaisser deux fois.

Votre image de marque

Votre logo et votre couleur sur la page de paiement et sur le reçu envoyé à votre client.

La page de paiement sur un téléphone : opérateur choisi, numéro saisi, montant affiché

Une page de paiement hébergée, prête à l'emploi

Votre client choisit son opérateur mobile money, sa carte, Apple Pay ou Google Pay sur la même page, et confirme. L’opérateur est reconnu dès qu’il tape son numéro. Aucune redirection tierce à gérer de votre côté.

Préférez construire votre propre formulaire de paiement plutôt que rediriger vers une page hébergée ? La charge directe fait exactement la même chose depuis votre propre interface, via la même API.

La page de paiement sur ordinateur : le récapitulatif à gauche, le mobile money ou la carte au choix à droite

Plus de moyens pour vos clients, même en FCFA

Un paiement par carte en FCFA est débité en euros, au taux fixe qui lie le franc CFA à l’euro. Votre client voit le montant exact avant de payer, et votre solde est crédité en FCFA, comme d’habitude.

Cela ouvre à vos clients Apple Pay, Google Pay et, selon leur pays et leur appareil, Bancontact, Klarna, Amazon Pay et d’autres moyens locaux. Vous n’avez rien à activer.

checkout.js
const response = await fetch("/api/v1/checkout_sessions", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.MERCY_PAY_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
amount: 15000,
currency: "XAF",
description: "Commande 1042",
success_url: "https://votre-site.com/merci",
}),
});
const { data } = await response.json();
// Redirigez votre client vers data.checkout_url

Une API pensée pour vos développeurs

Une requête crée une session de paiement et vous renvoie le lien du checkout. JSON en entrée comme en sortie, clés sandbox et live séparées, requêtes rejouables sans double débit grâce à l’en-tête Idempotency-Key.

Lire la documentation de l’API

webhook.js
import { createHmac, timingSafeEqual } from "node:crypto";
app.post("/webhooks/mercy-pay", (req, res) => {
// t=1791022800,v1=5257a869…
const { t, v1 } = parse(req.header("MercyPay-Signature"));
const expected = createHmac("sha256", SECRET)
.update(`${t}.${req.rawBody}`)
.digest("hex");
if (!timingSafeEqual(Buffer.from(expected), Buffer.from(v1))) {
return res.sendStatus(401);
}
const { type, data } = req.body;
if (type === "payment.succeeded") {
markOrderPaid(data);
}
res.sendStatus(200);
});

Des webhooks signés

Chaque changement de statut arrive sur votre serveur, signé en HMAC-SHA256 et horodaté dans l’en-tête MercyPay-Signature. Une livraison qui échoue est relancée, et son historique reste dans votre dashboard.

Vérifiez la signature avant de traiter l’événement : un webhook non signé ou falsifié est rejeté par votre code, pas par Mercy Pay.

Une seule intégration pour encaisser et reverser

Le mobile money et la carte sur une seule page de paiement.

Pour démarrer

Le compte donne accès à la sandbox et à vos clés de test. Le live s’ouvre après la vérification de votre identité.

Commission par paiement réussi, sans abonnement. La carte ajoute un frais fixe par paiement. Détail sur la page Tarifs.