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
| Champ | Type | Description |
|---|---|---|
pending | en attente | Créé, pas encore réglé. Le client peut payer jusqu’à expires_at. |
succeeded | payé | MonCash a confirmé le paiement, du bon montant. Votre solde est crédité. État définitif. |
failed | échec | MonCash a refusé le paiement. |
expired | expiré | Le lien n’a pas été payé à temps. |
cancelled | annulé | Paiement annulé. |
Ce qui fait foi
- Un paiement ne passe à
succeededque 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.succeededvérifié, ou sur une lecture du paiement avec votre clé secrète — jamais sur les paramètres de votrereturn_url. - Un paiement
expiredpeut encore devenirsucceededsi le client avait payé juste avant l’échéance : le champlatevaut alorstrue, 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.