
FedaPay
FedaPay - Transactions et jeton de paiement
Crée une transaction FedaPay, génère son jeton de paiement et vérifie les webhooks transaction.approved.
La documentation de FedaPay met désormais en avant une indexation complète via `/llms.txt` pour explorer les pages et SDKs disponibles. Pour un développeur, il est primordial de vérifier la configuration des intégrations (notamment *Checkout.js* et les modes *Sandbox/Live*) ainsi que la mise à jour des bibliothèques compatibles (Node.js, PHP, React, etc.).
Même prompt, avec et sans ce contexte
Les passages barrés sont ceux que l'IA a inventés. Basculez pour voir la sortie avec le contexte.
› Crée un lien de paiement FedaPay pour une commande de 2500 XOF.
1const res = await fetch("https://api.fedapay.com/v1/payments", {Endpoint inexistant2 method: "POST",3 headers: { Authorization: "Bearer " + key },4 body: JSON.stringify({ amount: 250000, currency: "XOF" }),Multiplié par 100 à tort, Doit être un objet5});6const { payment_url } = await res.json();Champ inconnuTestez le code généré avant de le brancher sur la vraie API
Une sandbox FedaPay répond comme l'API et envoie un webhook signé.
Authentification
- Header
Authorization: Bearer <FEDAPAY_SECRET_KEY>. - Deux environnements, deux clés : sandbox et live. Ne jamais mélanger.
- Base sandbox :
https://sandbox-api.fedapay.com/v1. Base live :https://api.fedapay.com/v1.
Endpoints
POST /transactionscrée une transaction.- Requis :
description,amount(entier),currency: { iso: "XOF" }. - Optionnel :
callback_url,customer: { firstname, lastname, email, phone_number: { number, country } }. - Réponse enveloppée sous la clé
"v1/transaction":id,reference,status.
- Requis :
POST /transactions/:id/tokengénère le lien :token,url.GET /transactions/:idlit le statut :pending,approved,declined,canceled.
Erreurs
401clé invalide ou mauvais environnement.422validation : le corps contientmessageeterrorspar champ.404transaction inconnue dans cet environnement.5xxréessayer avec backoff.
Webhooks
- Header
X-FEDAPAY-SIGNATURE. - Vérifier avec le secret du webhook (
FEDAPAY_WEBHOOK_SECRET) sur le corps brut, ou viaWebhook.constructEventdu SDK officiel. - Événements :
transaction.approved,transaction.declined,transaction.canceled.
Idempotence et limites
- Une transaction ne se paie qu'une fois. Pour réessayer, créer une nouvelle transaction.
- Stocker
idetreferencecôté serveur avant de rediriger.
Pièges courants
Ce que les LLMs inventent le plus souvent pour FedaPay.
currencyest un objet{ iso: "XOF" }, pas la chaîne"XOF".- La réponse de création est sous
data["v1/transaction"], pas à la racine. - Il n'y a pas d'endpoint
/paymentsni/checkout: c'est/transactionspuis/transactions/:id/token. amountest un entier en XOF, sans multiplication par 100.
Exemple minimal
1const BASE = process.env.FEDAPAY_ENV === "live" ? "https://api.fedapay.com/v1" : "https://sandbox-api.fedapay.com/v1";2 3type FedaTransaction = { id: number; reference: string; status: string };4 5export async function createFedaPayLink(amount: number, description: string): Promise<string> {6 const headers = { Authorization: "Bearer " + process.env.FEDAPAY_SECRET_KEY, "Content-Type": "application/json" };7 const created = await fetch(BASE + "/transactions", {8 method: "POST",9 headers,10 body: JSON.stringify({ description, amount, currency: { iso: "XOF" }, callback_url: process.env.APP_URL + "/paiement/retour" }),11 });12 const tx = ((await created.json()) as Record<string, FedaTransaction>)["v1/transaction"];13 const tokenRes = await fetch(BASE + "/transactions/" + tx.id + "/token", { method: "POST", headers });14 const { url } = (await tokenRes.json()) as { token: string; url: string };15 return url;16}Variables d'environnement
FEDAPAY_SECRET_KEYFEDAPAY_WEBHOOK_SECRETFEDAPAY_ENVAPP_URL