Ce guide vous aidera à effectuer votre premier appel à l’API Payfonte en moins de 10 minutes. À la fin, vous aurez intégré des capacités de paiement mobile money pour l’Afrique, y compris MTN MoMo, M-Pesa et d’autres moyens de paiement locaux.
Prérequis
Avant de commencer, vous aurez besoin de :
Un compte sandbox Payfonte
Vos identifiants API, client-id et client-secret
Un outil pour effectuer des requêtes HTTP (cURL, Postman ou votre langage
préféré)
Étape 1 : créer votre compte sandbox
Vérifier votre e-mail
Consultez votre boîte de réception puis confirmez votre adresse e-mail.
Compléter votre profil
Renseignez les informations de base de votre entreprise pour activer le compte.
Étape 2 : récupérer vos identifiants API
Ouvrir Settings
Connectez-vous à votre dashboard puis cliquez sur Settings dans la barre latérale.
Aller vers API Keys/Webhooks
Ouvrez l’onglet API Keys/Webhooks.
Copier vos identifiants
Vous y trouverez :
client-id : votre identifiant unique
client-secret : votre clé secrète, à protéger
N’exposez jamais votre client-secret dans du code côté client ni dans des
dépôts publics. Faites toujours les appels API depuis votre backend.
Les webhooks notifient votre serveur en temps réel lors des changements de statut de transaction.
Aller vers API Keys/Webhooks
Dans Settings -> Security -> API Keys and Webhooks, trouvez la section de configuration webhook.
Saisir votre URL de callback
Ajoutez l’URL de votre endpoint webhook, par exemple
https://yoursite.com/payfonte/webhook.
Enregistrer la configuration
Cliquez sur Save. Vous pourrez tester le webhook via une transaction de test.
URL par environnement
Sandbox, test
Production, live
Utilisez ces URL pour le développement et les tests : Service URL URL de base API https://sandbox-api.payfonte.comDashboard https://sandbox-app.payfonte.comPage de checkout https://sandbox-checkout.payfonte.com
Les transactions sandbox sont simulées et n’impliquent pas de fonds réels.
Utilisez ces URL pour les transactions réelles : Service URL URL de base API https://api.payfonte.comDashboard https://app.payfonte.comPage de checkout https://checkout.payfonte.com
Les transactions en production impliquent de l’argent réel. Testez soigneusement en sandbox avant de basculer.
Étape 4 : effectuer votre premier appel API
Créons une session de checkout pour encaisser un paiement :
curl --location 'https://sandbox-api.payfonte.com/payments/v1/checkouts' \
--header 'client-id: YOUR_CLIENT_ID' \
--header 'client-secret: YOUR_CLIENT_SECRET' \
--header 'Content-Type: application/json' \
--data-raw '{
"reference": "order-001",
"amount": 5000,
"currency": "NGN",
"country": "NG",
"redirectURL": "https://yoursite.com/payment/success",
"webhook": "https://yoursite.com/payfonte/webhook",
"user": {
"email": "customer@example.com",
"phoneNumber": "08012345678"
}
}'
const axios = require ( "axios" );
const response = await axios . post (
"https://sandbox-api.payfonte.com/payments/v1/checkouts" ,
{
reference: "order-001" ,
amount: 5000 ,
currency: "NGN" ,
country: "NG" ,
redirectURL: "https://yoursite.com/payment/success" ,
webhook: "https://yoursite.com/payfonte/webhook" ,
user: {
email: "customer@example.com" ,
phoneNumber: "08012345678" ,
},
},
{
headers: {
"client-id" : "YOUR_CLIENT_ID" ,
"client-secret" : "YOUR_CLIENT_SECRET" ,
"Content-Type" : "application/json" ,
},
},
);
console . log ( response . data );
import requests
url = "https://sandbox-api.payfonte.com/payments/v1/checkouts"
headers = {
"client-id" : "YOUR_CLIENT_ID" ,
"client-secret" : "YOUR_CLIENT_SECRET" ,
"Content-Type" : "application/json"
}
payload = {
"reference" : "order-001" ,
"amount" : 5000 ,
"currency" : "NGN" ,
"country" : "NG" ,
"redirectURL" : "https://yoursite.com/payment/success" ,
"webhook" : "https://yoursite.com/payfonte/webhook" ,
"user" : {
"email" : "customer@example.com" ,
"phoneNumber" : "08012345678"
}
}
response = requests.post(url, json = payload, headers = headers)
print (response.json())
<? php
$curl = curl_init ();
curl_setopt_array ( $curl , [
CURLOPT_URL => "https://sandbox-api.payfonte.com/payments/v1/checkouts" ,
CURLOPT_RETURNTRANSFER => true ,
CURLOPT_POST => true ,
CURLOPT_HTTPHEADER => [
"client-id: YOUR_CLIENT_ID" ,
"client-secret: YOUR_CLIENT_SECRET" ,
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => json_encode ([
"reference" => "order-001" ,
"amount" => 5000 ,
"currency" => "NGN" ,
"country" => "NG" ,
"redirectURL" => "https://yoursite.com/payment/success" ,
"webhook" => "https://yoursite.com/payfonte/webhook" ,
"user" => [
"email" => "customer@example.com" ,
"phoneNumber" => "08012345678"
]
])
]);
$response = curl_exec ( $curl );
curl_close ( $curl );
echo $response ;
Réponse attendue
{
"success" : true ,
"data" : {
"checkoutId" : "chk_abc123xyz" ,
"checkoutUrl" : "https://sandbox-checkout.payfonte.com/chk_abc123xyz" ,
"reference" : "order-001" ,
"amount" : 5000 ,
"currency" : "NGN" ,
"status" : "pending"
}
}
Étape 5 : rediriger le client vers le checkout
Récupérez checkoutUrl dans la réponse puis redirigez votre client pour qu’il finalise le paiement :
// Redirect customer to checkout
window . location . href = response . data . checkoutUrl ;
Le client va :
Voir les moyens de paiement disponibles pour son pays
Sélectionner sa méthode préférée, par exemple MTN MoMo ou Bank Transfer
Finaliser le paiement
Être redirigé vers votre redirectURL
Étape 6 : traiter le webhook
Lorsque le statut du paiement change, nous envoyons une requête POST à votre URL webhook :
{
"event" : "payment.completed" ,
"data" : {
"reference" : "order-001" ,
"checkoutId" : "chk_abc123xyz" ,
"amount" : 5000 ,
"currency" : "NGN" ,
"status" : "successful" ,
"provider" : "mtn-momo-nigeria" ,
"paidAt" : "2025-02-06T10:30:00Z"
}
}
Vérifiez toujours les signatures webhook et confirmez le statut de transaction
via l’API avant d’exécuter une commande.
Et ensuite ?
Explorer les méthodes de collecte Découvrez les intégrations inline, standard et direct charge
Configurer les décaissements Envoyez des fonds vers le mobile money et les comptes bancaires
Voir tous les providers Consultez les moyens de paiement disponibles par pays
Référence API Documentation API complète
Dépannage
Vérifiez client-id et client-secret. Assurez-vous d’utiliser les identifiants sandbox avec l’URL sandbox.
Combinaison pays ou devise invalide
Assurez-vous que la devise correspond bien au pays. Par exemple, le Nigeria
utilise NGN et le Kenya KES. Consultez Providers pris en
charge pour les combinaisons
valides.
Le webhook ne reçoit aucun événement
Vérifiez que votre URL Webhooks est accessible publiquement et renvoie un statut 200. Consultez aussi les logs de votre serveur.