MonCashAPIby FedtopupSe connecter

Statut d’un paiement

GET/v1/payments/:idpermission payments:read, ou clé publiable
curl https://moncashapi.fedtopup.com/api/v1/payments/pay_3f9c1a7e52b04d6a81c0 \
  -H "Authorization: Bearer $MONCASHAPI_SECRET_KEY"
// Dans une page web : clé PUBLIABLE uniquement (pk_live_…).
// Elle ne sait lire que le statut d'un paiement de votre projet.
const reponse = await fetch(`https://moncashapi.fedtopup.com/api/v1/payments/${paiementId}`, {
  headers: { Authorization: "Bearer pk_live_VOTRE_CLE_PUBLIABLE" },
});
const paiement = await reponse.json();
if (paiement.status === "succeeded") {
  // Affichez « Paiement reçu ». La livraison, elle, se décide sur votre serveur.
}
const reponse = await fetch(`https://moncashapi.fedtopup.com/api/v1/payments/${paiementId}`, {
  headers: { Authorization: `Bearer ${process.env.MONCASHAPI_SECRET_KEY}` },
});
const paiement = await reponse.json();
if (reponse.ok && paiement.status === "succeeded" && paiement.amount === montantAttendu) {
  // Le paiement est réglé, du bon montant : livrez la commande paiement.reference
}
<?php
$ch = curl_init("https://moncashapi.fedtopup.com/api/v1/payments/" . rawurlencode($paiementId));
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 20,
    CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("MONCASHAPI_SECRET_KEY")],
]);
$paiement = json_decode(curl_exec($ch), true);
curl_close($ch);

if (($paiement["status"] ?? "") === "succeeded" && $paiement["amount"] == $montantAttendu) {
    // Le paiement est réglé, du bon montant : livrez la commande $paiement["reference"]
}
import os
import requests

reponse = requests.get(
    f"https://moncashapi.fedtopup.com/api/v1/payments/{paiement_id}",
    headers={"Authorization": f"Bearer {os.environ['MONCASHAPI_SECRET_KEY']}"},
    timeout=20,
)
paiement = reponse.json()
if reponse.ok and paiement["status"] == "succeeded" and paiement["amount"] == montant_attendu:
    ...  # le paiement est réglé, du bon montant : livrez la commande paiement["reference"]

Les statuts

ChampTypeDescription
pendingen attenteCréé, pas encore réglé. Le client peut payer jusqu’à expires_at.
succeededpayéMonCash a confirmé le paiement, du bon montant. Votre solde est crédité. État définitif.
failedéchecMonCash a refusé le paiement.
expiredexpiréLe lien n’a pas été payé à temps.
cancelledannuléPaiement annulé.

Ce qui fait foi

  • Un paiement ne passe à succeeded que lorsque MonCash confirme le statut et le montant. Ni le retour du client sur une page, ni un message reçu seul ne suffisent.
  • Côté marchand, faites de même : livrez sur le webhook payment.succeeded vérifié, ou sur une lecture du paiement avec votre clé secrète — jamais sur les paramètres de votre return_url.
  • Un paiement expired peut encore devenir succeeded si le client avait payé juste avant l’échéance : le champ late vaut alors true, et le webhook part normalement.

Avec une clé publiable

Depuis une page web, la clé pk_live_ permet d’afficher l’état d’un paiement sans exposer votre clé secrète. La réponse est réduite à : id, status, amount, fee, total, currency, paid_at, expires_at.

Inutile d’interroger l’API en boucle serrée : une lecture toutes les quelques secondes pendant que le client attend suffit, et le webhook vous prévient de toute façon.

Une question sur l’intégration ?