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.

Mobile money et carte

Mobile money dans 11 pays d'Afrique et carte bancaire (Visa, Mastercard), sur une même page de paiement.

Reçus et idempotence

Reçu PDF téléchargeable pour chaque paiement, 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, pas les nôtres.

9:41
Boutique Akwa15 000 FCFACommande 1042
MTN Mobile MoneyOrange MoneyCarte bancaire
Numéro mobile money+237 677 12 34 56
Payer 15 000 FCFAConfirmez sur votre téléphone

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

Votre client choisit son opérateur mobile money ou sa carte sur la même page, saisit son numéro ou ses coordonnées bancaires, et confirme. 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.

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://boutique-akwa.cm/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) => {
const expected = createHmac("sha256", SECRET)
.update(req.rawBody)
.digest("hex");
const received = req.header("X-MercyPay-Signature");
if (!timingSafeEqual(Buffer.from(expected), Buffer.from(received))) {
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 dans l’en-tête X-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.

Encaissez vos premiers paiements dès aujourd’hui

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

Pour démarrer

Inscrivez-vous en quelques minutes : votre clé API sandbox vous attend dès l’inscription, sans carte bancaire.

Le KYC n’est demandé que pour passer en live et recevoir vos payouts.