Intégrer ePaieLink sur votre site

Ce guide vous accompagne pas à pas : création d'un paiement, checkout client, confirmation par webhook. Environnement actif : Production

Démarrage rapide — votre premier paiement

Histoire concrète : Marie achète un article à 5 000 CDF sur votre site. Votre serveur crée le paiement, votre page ouvre la modale ePaieLink, Marie paie en Mobile Money, vous recevez une notification sur votre webhook_url.

[Site marchand] [API ePaieLink] [Checkout] [Votre webhook] Bouton « Payer » → POST payment-intent → Modale iframe → POST status=succeeded ↓ ↓ checkout_url Client confirme sur son téléphone

Avant de coder — checklist

  • Compte marchand actif + clés API (key_id + secret_key)
  • webhook_url configurée (notification serveur fiable)
  • callback_url (optionnel — redirection navigateur après paiement)
  • mobile_money_receiver_phone pour les ventes directes en RDC
  • Domaine de votre site autorisé pour l'iframe checkout (demande à l'équipe ePaieLink)

Les 4 étapes (vue d'ensemble)

  1. Votre backendPOST /api/v1/payment-intents/ → vous obtenez checkout_url
  2. Votre frontend — ouvrir la modale avec ePaieLink.open(checkout_url)
  3. Le client — choisit Mobile Money ou carte, paie dans l'iframe (ePaieLink route vers l'agrégateur actif)
  4. Votre backend — reçoit le webhook status: succeeded et valide la commande

Vous n'avez pas à choisir ni coder un agrégateur de paiement : ePaieLink s'en charge côté plateforme.

Architecture — qui fait quoi ?

ActeurRôleVous codez ?
Votre backend Crée le PaymentIntent, vérifie les webhooks Oui
Votre frontend Ouvre le checkout (modale ou redirect) Oui
Checkout ePaieLink UI paiement, appels verify / process Non (hébergé)
Plateforme ePaieLink Routage agrégateur, webhooks providers, répartition marketplace Non
Agrégateur Exécution Mobile Money / carte (configuré par ePaieLink) Non

Principe clé : votre intégration parle uniquement à l'API ePaieLink et au SDK checkout. Les agrégateurs sont un détail d'infrastructure géré par la plateforme.

Agrégateurs multiples & bascule automatique

Point fort ePaieLink : plusieurs agrégateurs de paiement peuvent être configurés en parallèle (Mobile Money, carte bancaire, etc.). Si l'un est indisponible, la plateforme peut activer un autre sans modifier votre code.

En tant que marchand :

  • Vous créez un PaymentIntent avec un montant et une devise — c'est tout.
  • Le checkout propose les moyens de paiement disponibles pour votre marché.
  • Le champ provider dans le webhook indique quel agrégateur a traité le paiement (information, pas une dépendance).

Ne conditionnez jamais votre logique métier à un nom d'agrégateur précis. Fiez-vous à status et transaction_id.

Moyens de paiement côté client (checkout)

Ce que voit le clientComportement
Mobile money Saisie du numéro → confirmation USSD sur le téléphone
Carte bancaire Redirection vers une page sécurisée de l'agrégateur carte actif

SDK JavaScript — epaielink.js

Modale type « in-context » : overlay + iframe compact (~420 px). Le client reste sur votre site.

Télécharger le SDK

Important : le SDK n'est pas sur le domaine API (server-*.epaie.link). Il est hébergé sur le checkout (checkout-*.epaie.link).

Recommandé — script toujours à jour (domaine checkout) :

https://checkout.epaie.link/epaielink.js

Télécharger depuis le checkout

Alternative — copie sur ce site (documentation) :

./assets/epaielink.js

En production, chargez plutôt <script src="{{CHECKOUT_BASE}}/epaielink.js"> depuis le checkout.

Inclusion dans votre page

API du SDK

Le SDK ajoute embed=1 à l'URL. En cas de succès, la modale se ferme automatiquement.

Guide A — Vente directe avec modale ★

Objectif : encaisser pour votre propre compte. L'argent Mobile Money est versé au numéro mobile_money_receiver_phone configuré sur votre marchand.

Exemple : commande order-12345, 5 000 CDF, article « T-shirt ».

Étape 1 / 5 Créer le paiement (backend)

POST https://server.epaie.link/api/v1/payment-intents/

Headers : authentification par clé API (voir Authentification).

Réponse attendue (201)

Conservez checkout_url — c'est la seule URL à transmettre au frontend. Ne pas inclure metadata.marketplace: true.

Étape 2 / 5 Ouvrir la modale (frontend)

Étape 3 / 5 Le client paie (automatique)

Dans l'iframe, le client :

  1. Choisit Mobile money ou Carte bancaire
  2. Mobile money : saisit son numéro → confirme sur son téléphone
  3. Carte : est redirigé vers la page sécurisée de l'agrégateur actif, puis revient sur le checkout

Vous ne codez rien à cette étape — ePaieLink route vers l'agrégateur configuré.

Étape 4 / 5 Recevoir le webhook (backend — source de vérité)

Même en modale, validez toujours le paiement via webhook (le callback JS est pour l'UX uniquement).

Vérifiez X-Signature avec votre secret_key (JSON trié par clés + timestamp).

Étape 5 / 5 Vérifier que tout fonctionne

  • Modale s'ouvre sans iframe vide
  • Webhook reçu avec status: succeeded
  • Transaction visible dans le dashboard marchand
  • Commande marquée payée dans votre base (external_reference)

App de test : le dépôt epaylink-tester-app reproduit ce flux complet (modale + webhook).

Guide B — Vente directe avec redirect

Même scénario que le Guide A, mais le client quitte votre site pour le checkout pleine page.

Modale (Guide A)Redirect (Guide B)
Client reste sur votre siteOuiNon
SDK requisepaielink.jsNon
Résultat immédiat JSonSuccessNon
Retour navigateurOptionnelcallback_url
Confirmation fiableWebhookWebhook

Étape 1 / 3 Créer le PaymentIntent

Identique au Guide A — même requête, même réponse avec checkout_url.

Étape 2 / 3 Rediriger le navigateur

Étape 3 / 3 Retour sur votre site

Après paiement, le client est renvoyé sur votre callback_url :

Important : traitez la commande uniquement après validation du webhook, pas seulement sur les paramètres URL ( falsifiables côté client ).

Guide C — Marketplace

Objectif : le client paie un montant total ; ePaieLink collecte sur le wallet plateforme, puis répartit automatiquement entre vous et un vendeur tiers.

Exemple : vente 10 000 CDF2 000 pour la plateforme, 8 000 pour le vendeur au 0971234567.

Client paie 10 000 CDF ↓ Collecte wallet ePaieLink (agrégateur actif) ↓ Webhook provider → tâche de répartition ↓ Dépôt vendeur (8 000) + dépôt plateforme (2 000) ↓ Webhook marchand (status succeeded)

Étape 1 / 4 Créer le PaymentIntent marketplace

Règle : merchant_amount + seller_amount = amount (validé à la création).

Étape 2 / 4 Checkout client

Identique au Guide A ou B : modale ePaieLink.open() ou redirect vers checkout_url. La collecte Mobile Money va sur le wallet ePaieLink (pas directement sur votre numéro).

Étape 3 / 4 Répartition automatique

Après confirmation du paiement, ePaieLink déclenche les dépôts vers le vendeur et la plateforme. Consultez GET /api/v1/payouts/ (dashboard) pour l'historique.

Étape 4 / 4 Webhook marchand

Identique au Guide A — POST sur votre webhook_url quand la collecte est succeeded (en parallèle ou avant la fin des dépôts vendeur/plateforme).

Métadonnées marketplace

CléObligatoireDescription
marketplaceOuitrue
merchant_amountAu moins un*Part plateforme / marchand
seller_amountAu moins un*Part vendeur
seller_phoneSi seller_amount > 0Numéro Mobile Money vendeur (RDC)

* Au moins merchant_amount ou seller_amount doit être > 0.

URLs & environnements

EnvironnementAPI (base)Checkout
Production https://server.epaie.link https://checkout.epaie.link
UAT https://server-uat.epaie.link https://checkout-uat.epaie.link

URL active (sélecteur sidebar) :

API : https://server.epaie.link/api/v1/
Checkout : https://checkout.epaie.link
SDK : https://checkout.epaie.link/epaielink.js

Authentification API (détail)

Chaque requête serveur → serveur vers l'API marchand inclut :

HeaderDescription
X-API-Key-IdIdentifiant public (key_id)
X-SignatureHMAC-SHA256 hex du corps signé
X-TimestampHorodatage Unix (secondes) ou millisecondes
Content-Typeapplication/json

Corps signé : fusion du JSON de la requête + timestamp (même valeur que le header). Tri des clés de premier niveau, JSON.stringify, HMAC avec secret_key.

Référence des endpoints

MéthodeCheminAuthDescription
GET/api/v1/health/NonSanté API
POST/api/v1/payment-intents/Clé APICréer un paiement → checkout_url
GET/api/v1/payment-intents/{id}/Token marchandDétail intent
POST/api/v1/checkout/verify/PublicCheckout — valider URL signée
POST/api/v1/payment-intents/{id}/process/PublicCheckout — lancer paiement (interne)
GET/api/v1/transactions/{id}/PublicStatut transaction (polling checkout)
GET/api/v1/payouts/Token marchandHistorique versements (marketplace)

Les endpoints verify et process sont appelés par le checkout hébergé, pas par votre backend marchand.

Dépannage

SymptômeCause probableAction
401 UnauthorizedSignature ou timestamp invalideVérifier HMAC, horloge serveur, tri des clés JSON
400 external_referenceRéférence déjà utiliséeUtiliser une référence unique par commande
400 metadata marketplaceSomme des parts ≠ montant totalmerchant_amount + seller_amount = amount
410 GonePaymentIntent expiréRecréer un intent
Modale / iframe videDomaine non autoriséDemander l'ajout de votre origine (CSP frame-ancestors)
epaielink.js introuvableURL sur server-* au lieu de checkout-*Utiliser https://checkout.epaie.link/epaielink.js ou copie locale
Paiement OK en UI, commande non validéeWebhook non reçu ou non vérifiéTester webhook_url, logs serveur, signature webhook
Échec agrégateurIndisponibilité temporaireePaieLink peut basculer — contacter le support si persistant

Embarquer cette documentation

Affichez ce guide dans votre dashboard ou site :