Aller au contenu
AfriContext

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.

Doc source modifiée • Doc source modifiée • Doc source modifiée À REVOIR11.10.26
Documentation officielle modifiée — Contexte à revérifier

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", {2  method: "POST",3  headers: { Authorization: "Bearer " + key },4  body: JSON.stringify({ amount: 250000, currency: "XOF" }),5});6const { payment_url } = await res.json();
404 Not Found4 inventions de l'IAModèle testé : Claude Sonnet, Claude CodeDocumentation source

Testez 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é.

Ouvrir la sandbox FedaPay

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 /transactions cré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.
  • POST /transactions/:id/token génère le lien : token, url.
  • GET /transactions/:id lit le statut : pending, approved, declined, canceled.

Erreurs

  • 401 clé invalide ou mauvais environnement.
  • 422 validation : le corps contient message et errors par champ.
  • 404 transaction inconnue dans cet environnement.
  • 5xx réessayer avec backoff.

Webhooks

  • Header X-FEDAPAY-SIGNATURE.
  • Vérifier avec le secret du webhook (FEDAPAY_WEBHOOK_SECRET) sur le corps brut, ou via Webhook.constructEvent du 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 id et reference côté serveur avant de rediriger.

Pièges courants

Ce que les LLMs inventent le plus souvent pour FedaPay.

  • currency est 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 /payments ni /checkout : c'est /transactions puis /transactions/:id/token.
  • amount est 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_KEY
  • FEDAPAY_WEBHOOK_SECRET
  • FEDAPAY_ENV
  • APP_URL