Python
Elle permet d'intéragir avec l'API de paiement de MoneyFusion. Elle facilite la création et la récupération des paiements via des requêtes HTTP. Installation
vous pourrez l'installer avec :
pip install apiMoneyFusion
Utilisation Importation
from apiMoneyFusion import PaymentClient
Initialisation du client
client = PaymentClient(api_key_url="https://api.moneyfusion.net")
Créer un paiement
payment = client.create_payment( total_price="10000", articles=[{"name": "Article 1", "price": "5000", "quantity": 1}], numero_send="0101010101", nom_client="assemienDev", user_id=1, order_id=123, return_url="https://votre-domaine.com/callback" )
print(payment)
Réponse attendue :
{ "statut": true, "token": "f5EJ33JYmxqosi8BvaEt", "message": "paiement en cours", "url": "https://payin.moneyfusion.net/payment/f5EJ33JYmxqosi8BvaEt/10000/John Doe" }
Récupérer un paiement
payment_info = client.get_payment("8L5teSc5TaIkP3ds9Dlx") print(payment_info)
Réponse attendue :
{ "statut": true, "data": { "_id": "6748d365967cb4766fdd1616", "tokenPay": "8L5teSc5TaIkP3ds9Dlx", "numeroSend": "None", "nomclient": "assemienDev", "personal_Info": [{ "userId": 1, "orderId": 123 }], "numeroTransaction": "", "Montant": 475, "frais": 25, "statut": "paid", "moyen": "card", "return_url": "https://votre-domaine.com/callback", "createdAt": "2024-11-28T20:32:37.037Z" }, "message": "details paiement" }
integration web
API Web
Vous pouvez utiliser l'api web pour developper votre application
Pour commencer, j'utiliserai axios. N'hésitez pas à utiliser n'importe quel client http, par exemple fetch Demande de paiement pay.js
const axios = require("axios") ;
const apiUrl = "YOUR_API_URL" ; // Obtenez ceci depuis votre tableau de bord const makePayment = async (paymentData) => { try { const response = await axios.post(apiUrl, paymentData, { headers : { "Content-Type" : "application/json", }, }) ; return response.data ; } catch (error) { lancer l'erreur ; } };
Exemple de données de paiement paymentData.js
const paymentData = { totalPrice: 200, article: [ { sac: 100, chaussure: 100, }, ], personal_Info: [ { userId: 1, orderId: 123, }, ], numeroSend: " 01010101 ", nomclient: " John Doe ", return_url: " https://your-domain.com/callback ", webhook_url: "https://your-domain.com/my-webhook-url", // Le webhook doit accepter les requêtes POST pour recevoir les données. };
Champs Champ Type Description Exemple Exigé totalPrice Number Montant total à payer 200 Oui article Array Liste des articles avec leur prix [{"sac": 100, "chaussure": 100}] Oui numeroSend String Numéro de téléphone du client "01010101" Oui nomclient String Nom du client "John Doe" Oui personal_Info Array Autres informations personnelles [{"userId": 1, "orderId": 123}] Non return_url String url à rediriger après le paiement https://your-domain.com/callback Non webhook_url String url (POST) de où seront renvoyés les détails de la transaction https://your-domain.com/my-webhook-url Non Exemple de réponse
{ "statut": true, "token": "5d58823b084564", "message": "paiement en cours", "url": "https://www.pay.moneyfusion.net/pay/6596aded36bd58823b084564" }
Objet de la réponse Field Type Description statut Boolean Statut de la demande de paiement token String Jeton de paiement unique pour le suiv message String Message d'état url String URL de la page de paiement Vérification de l'état des paiements Vérifier l'état du paiement checkPaymentStatus.js
const checkPaymentStatus = async (token) => {
try {
const response = await axios.get(
https://www.pay.moneyfusion.net/paiementNotif/${token}
);
return response.data;
} catch (error) {
throw error;
}
};
Exemple de réponse
{ "statut": true, "data": { "_id": "65df163b11ab882694573060", "tokenPay": "0d1d8bc9b6d2819c", "numeroSend": "01010101", "nomclient": "John Doe", "personal_Info": [ { "userId": 1, "orderId": 123 } ], "numeroTransaction": "0708889205", "Montant": 200, "frais": 5, "statut": "paid", "moyen": "orange", "return_url": "https://your-domain.com/callback", "createdAt": "2024-02-28T11:17:15.285Z" }, "message": "details paiement" }
Types de statut de paiement Status Description pending Le paiement est en cours de traitement failure Échec du paiement no paid Paiement non effectué paid Paiement réussi Champs de données de la réponse d'état Field Type Description _id String Transaction ID tokenPay String Payment token numeroSend String Numéro de téléphone du client nomclient String Nom du client personal_Info Array Autres informations personnelles Montant Number Montant de la transaction frais Number Frais de transaction statut String État des paiements moyen String Mode de paiement createdAt String Horaire de la transaction Suivi des Transactions en Temps Réel via Webhook Structure des données reçues
{ "event": "payin.session.pending", "personal_Info": [ { "userId": 1, "orderId": 123 } ], "tokenPay": "Le4Cnmm1Ac9yTgZMKQbz", "numeroSend": "01010101", "nomclient": "Kwameson", "numeroTransaction": "01010101", "Montant": 194, "frais": 6, "return_url": " https://your-domain.com/callback ", "webhook_url": "https://your-domain.com/my-webhook-url", "createdAt": "2025-05-09T12:50:45.412Z" }
Liste des Événements Webhook Disponibles Événement Description payin.session.pending Paiement initié et en attente de traitement payin.session.completed Paiement effectué avec succès payin.session.cancelled Paiement annulé ou échoué Gestion des Notifications Multiples pour le Webhook Important à savoir
Il est possible que moneyfusion envoie plusieurs notifications pour une même transaction, notamment dans les cas suivants :
Répétition de l'événement payin.session.pending pendant la phase de traitement.
Envoi de l'événement payin.session.completed après confirmation du paiement.
Éventuel payin.session.cancelled en cas d'échec ou d'annulation.
Recommandations de traitement
Pour garantir un traitement fiable et éviter les doublons :
Identifie chaque transaction de manière unique grâce au champ tokenPay.
Vérifie l'état actuel de la transaction dans ta base de données avant d'effectuer une mise à jour.
Ignore les événements déjà traités ou ceux qui ne représentent pas une évolution de statut.
Exemple de logique de filtrage
if (transactionExists && incomingStatus === currentStatus) { // Ne rien faire : notification redondante } else { // Mettre à jour le statut de la transaction }
##Payout
Cette documentation décrit comment intégrer l'API de retrait de Money Fusion ainsi que la gestion des webhooks liés aux événements de retrait. Authentification
Illustration Authentification
Avant de faire une requête de retrait, vous devez (Allez dans la section Paramètre) :
Générer une clé API depuis votre tableau de bord Money Fusion.
Ajouter l'adresse IP de votre serveur (qui initie la requête) dans votre dashboard.
Inclure cette clé API dans l’en-tête des requêtes HTTP :
moneyfusion-private-key: VOTRE_CLE_API Content-Type: application/json
Endpoint de retrait
POST https://pay.moneyfusion.net/api/v1/withdraw Corps de la requête (JSON)
{ "countryCode": "ci", "phone": "05xxxxxxxxx", // MTN "amount": 200, "withdraw_mode": "mtn-ci", "webhook_url": "https://votre-serveur.com/api/withdraw/callback" }
Réponse en cas de succès
{ "tokenPay": "D0h6fjyjkCfi", "statut": true, "message": "Retrait soumis avec succès" }
Réponse en cas d’erreur
{ "statut": false, "message": "Tous les champs (countryCode, phone, amount, withdraw_mode) sont requis." }
🔐 À propos du tokenPay
Le champ tokenPay est un identifiant unique généré lors de l’initiation d’un retrait. Il permet de suivre et vérifier la transaction. Ce token doit être conservé côté client ou serveur car il sera réutilisé pour :
Valider et identifier la transaction dans les notifications envoyées par webhook.
Faire le lien entre la demande initiale et son statut final.
Ce token garantit ainsi la traçabilité et la sécurité du processus de retrait. Paramètres requis ou Non (JSON body) Champ Type Obligatoire Description countryCode string ✅ Code du pays (ex: ci pour Côte d’Ivoire) phone string ✅ Numéro à retirer amount number ✅ Montant à retirer withdraw_mode string ✅ Méthode de retrait webhook_url string NON URL vers laquelle Money Fusion enverra la notification Méthodes de retrait prises en charge (withdraw_mode)
Voici les valeurs supportées pour les champs withdraw_mode et countryCode : Country countryCode withdraw_mode Côte d'Ivoire ci orange-money-ci / mtn-ci / moov-ci / wave-ci Senegal sn orange-money-senegal / free-money-senegal / wave-senegal / expresso-senegal Burkina Faso bf orange-money-burkina / moov-burkina-faso Benin bj mtn-benin / moov-benin Togo tg t-money-togo / moov-togo Mali ml orange-money-mali Congo Brazzaville cg orange-money-mali / mtn-cg Cameroun cm orange-money-cm / mtn-cm Congo RDC cd airtel-money-cd Gabon ga airtel-money-ga / libertis-ga Ghana gh airtel-money-gh / mtn-gh / vodafone-gh Guinée Conakry gn orange-gn / mtn-gn Guinée-Bissau gw mtn-gw Kenya ke m-pesa-ke Mauritanie mr bankily-mr Niger ne airtel-money-ne / mtn-ne / mauritel-ne Ouganda ug mtn-ug Centrafrique cf orange-cf Rwanda rw mtn-rw Sierra Leone sl africell-sl / orange-sl Tanzanie tz airtel-money-tz / m-pesa-tz / tigo-tz Tchad td airtel-money-td / moov-td Gambie gm orange-gm Éthiopie et safaricom-et Webhooks
Votre serveur doit écouter les événements suivants via l’URL webhook_url fournie :
-payout.session.completed; -payout.session.cancelled;
Exemple de payload webhook :
{ "event": "payout.session.cancelled", "tokenPay": "D0h6fjyjkCfi", "montant": 205, "numeroRetrait": "07xxxxxxxxx", "moyen": "orange-money-ci", "webhook_url": "https://votre-serveur.com/api/withdraw/callback", "createdAt": "2025-07-17T17:35:23.468Z" }
Événements possibles Événement Description payout.session.completed Le retrait a été effectué avec succès payout.session.cancelled Le retrait a échoué ou a été annulé Exemple de code (Node.js / Express)
// Endpoint Webhook app.post("/api/withdraw/callback", (req, res) => { const { event, tokenPay, montant, numeroRetrait, moyen, createdAt } = req.body;
if (event === "payout.session.completed") { // Marquez le retrait comme réussi dans votre DB } else if (event === "payout.session.cancelled") { // Mettez à jour le retrait comme échoué } });