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

ChampTypeDescriptionExempleExigé
totalPriceNumberMontant total à payer200Oui
articleArray<Object>Liste des articles avec leur prix[{"sac": 100, "chaussure": 100}]Oui
numeroSendStringNuméro de téléphone du client"01010101"Oui
nomclientStringNom du client"John Doe"Oui
personal_InfoArray<Object>Autres informations personnelles[{"userId": 1, "orderId": 123}]Non
return_urlStringurl à rediriger après le paiementhttps://your-domain.com/callbackNon
webhook_urlStringurl (POST) de où seront renvoyés les détails de la transactionhttps://your-domain.com/my-webhook-urlNon

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

FieldTypeDescription
statutBooleanStatut de la demande de paiement
tokenStringJeton de paiement unique pour le suiv
messageStringMessage d'état
urlStringURL 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

StatusDescription
pendingLe paiement est en cours de traitement
failureÉchec du paiement
no paidPaiement non effectué
paidPaiement réussi

Champs de données de la réponse d'état

FieldTypeDescription
_idStringTransaction ID
tokenPayStringPayment token
numeroSendStringNuméro de téléphone du client
nomclientStringNom du client
personal_InfoArray<Object>Autres informations personnelles
MontantNumberMontant de la transaction
fraisNumberFrais de transaction
statutStringÉtat des paiements
moyenStringMode de paiement
createdAtStringHoraire 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énementDescription
payin.session.pendingPaiement initié et en attente de traitement
payin.session.completedPaiement effectué avec succès
payin.session.cancelledPaiement 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 :

  1. Identifie chaque transaction de manière unique grâce au champ tokenPay.
  2. Vérifie l'état actuel de la transaction dans ta base de données avant d'effectuer une mise à jour.
  3. 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
}