Back to 0fee
0fee

Session 2 : tableau de bord, SDK, widget de checkout et Celery en 60 minutes

Comment nous avons construit le tableau de bord, le widget de checkout, 2 SDK et les tâches Celery en 60 minutes. Par Juste A. Gnimavo et Claude.

Juste A. Gnimavo (Thales) & Claude | March 27, 2026 5 min 0fee
EN/ FR/ ES
session-002solidjsdashboardsdkscheckout-widgetcelery

La Session 001 a produit le backend. La Session 002, toujours le 10 décembre 2025 -- le même jour -- a produit tout ce dont une plateforme de paiement a besoin pour être utilisable : deux nouveaux fournisseurs de paiement, un tableau de bord SolidJS complet, un widget de checkout intégrable, des tâches Celery en arrière-plan et des SDK officiels en TypeScript et Python. Soixante minutes.

Ce que la Session 002 a livré

ComposantDescription
Fournisseur BUIAfrique francophone -- CI, BJ, BF, CM, ML, SN, TG
Fournisseur PaiementProAfrique francophone + cartes -- CI, BJ, BF, GW, ML, NE, SN
Tableau de bord SolidJSConnexion, tableau de bord, applications, transactions, paramètres
Widget Checkout.jsWidget de paiement intégrable avec flux multi-étapes
Tâches CeleryRetry de webhooks, réconciliation des paiements, règlement
SDK TypeScriptClient officiel Node.js/TypeScript
SDK PythonClient officiel Python

À la fin de la Session 002, 0fee.dev disposait de 7 fournisseurs de paiement, un tableau de bord frontend, un widget de checkout pour les marchands, un traitement de tâches en arrière-plan et deux SDK prêts pour npm et PyPI.

Phase 1 : deux nouveaux fournisseurs

Fournisseur BUI

BUI gère le mobile money en Afrique de l'Ouest francophone. Son implémentation nécessitait une gestion spéciale de deux flux distincts :

  • Orange Money (Côte d'Ivoire) : Validation par OTP. Le client reçoit un OTP sur son téléphone, le saisit dans le flux de checkout, et BUI le valide.
  • Wave : Flux de redirection. BUI renvoie une URL de paiement, le client est redirigé vers la page de Wave, et 0fee.dev fait du polling pour la complétion.

Fournisseur PaiementPro

PaiementPro est un agrégateur de paiement majeur pour l'Afrique francophone, supportant Orange Money, MTN, Moov, Wave, Free, Airtel et même les paiements par carte. Son intégration utilise un flux de redirection.

Avec BUI et PaiementPro, le nombre de fournisseurs a atteint 7 -- une couverture complète pour l'Afrique francophone avec plusieurs options de repli par pays.

Phase 2 : le tableau de bord SolidJS

Le tableau de bord est l'interface destinée aux marchands où les développeurs gèrent leurs applications, clés API, identifiants de fournisseurs et transactions. Il a été construit avec SolidJS, choisi pour sa réactivité fine et sa taille de bundle minimale (7 Ko de runtime).

Pages clés

Dashboard.tsx -- La page de vue d'ensemble principale montrant le volume de transactions, les taux de succès, le chiffre d'affaires et l'activité récente.

Apps.tsx -- CRUD complet pour les applications marchandes. Chaque application a ses propres clés API, identifiants de fournisseurs et configuration de routage.

Transactions.tsx -- Une liste filtrable et paginée de toutes les transactions de toutes les applications. Les filtres incluent le statut, le fournisseur, la plage de dates et la plage de montants.

Phase 3 : le widget de checkout

Le widget de checkout -- checkout.js -- est une bibliothèque JavaScript que les marchands intègrent sur leurs sites web. Il ouvre un modal, présente les méthodes de paiement en fonction du pays du client, collecte les détails de paiement et traite le paiement. Pensez au stripe.js de Stripe mais pour le mobile money africain.

Le widget implémente un flux de paiement en quatre étapes :

  1. Sélection du pays. Le client sélectionne son pays dans une grille.
  2. Sélection de la méthode de paiement. Les opérateurs disponibles s'affichent.
  3. Détails de paiement. Pour le mobile money, le client saisit son numéro de téléphone.
  4. Traitement et confirmation. Le widget affiche un état de traitement, fait du polling et affiche le succès ou l'échec.

Phase 4 : tâches Celery en arrière-plan

Trois catégories de tâches en arrière-plan tournent sur Celery avec DragonflyDB comme broker :

Retry de webhooks

Quand une livraison de webhook échoue, la tâche programme un retry avec backoff exponentiel : 1 min, 5 min, 30 min, 2 h, 8 h, 24 h.

Réconciliation des paiements

Toutes les 5 minutes, une tâche planifiée vérifie les paiements bloqués en statut « pending » et interroge le fournisseur pour leur statut actuel.

Traitement des règlements

Une tâche quotidienne à 00:30 UTC calcule les montants de règlement pour chaque marchand.

Phase 5 : SDK TypeScript

Le SDK TypeScript officiel fournit un client typé pour l'API 0fee.dev :

typescriptimport { ZeroFee } from "zerofee";

const zf = new ZeroFee("sk_live_your_key_here");

const payment = await zf.payments.create({
    amount: 5000,
    payment_method: "PAYIN_ORANGE_CI",
    customer: {
        phone: "+2250709757296",
        name: "Amadou Diallo",
    },
});

Phase 6 : SDK Python

Le SDK Python suit les mêmes patterns avec des modèles Pydantic pour la validation de type :

pythonfrom zerofee import ZeroFee

zf = ZeroFee(api_key="sk_live_your_key_here")

payment = zf.payments.create(
    amount=5000,
    payment_method="PAYIN_ORANGE_CI",
    customer={
        "phone": "+2250709757296",
        "name": "Amadou Diallo",
    },
)

Le bilan de la Session 002

MétriqueValeur
Nouveaux fournisseurs2 (BUI, PaiementPro)
Total fournisseurs7
Pages du tableau de bord5
SDK2 (TypeScript, Python)
Temps écoulé~60 minutes

Deux sessions. Deux heures au total. La plateforme disposait d'un backend complet, 7 fournisseurs de paiement, un tableau de bord frontend, un widget de checkout intégrable, un traitement de tâches en arrière-plan et des SDK officiels en deux langages. La Session 003 ajouterait un site marketing, 5 SDK supplémentaires et une configuration Docker -- en une seule session.


Cet article fait partie de la série « Comment nous avons construit 0fee.dev ». 0fee.dev est un orchestrateur de paiement couvrant 53+ fournisseurs dans 200+ pays, construit par Juste A. GNIMAVO et Claude depuis Abidjan sans aucun ingénieur humain. Suivez la série pour l'histoire complète de la construction.

Share this article:

Responses

Write a response
0/2000
Loading responses...

Related Articles

Thales & Claude deblo

Le Step Zero ne suffisait pas : comment valider un constructeur sans valider le runtime a fait tomber toutes les sessions vocales de Déblo l’heure où nous avons livré le streaming caméra temps réel

La phase 14 a livré Déblo Eyes — streaming caméra temps réel via LiveKit vers Gemini Live native audio. Le premier deploy a fait tomber toutes les sessions vocales en production en quatre-vingt-dix secondes parce que notre Step 0 avait validé le constructeur sans exercer le runtime. Le build log de comment Déblo a eu des yeux, ce qu’un pré-vol incomplet a coûté, et quels points de polish ont été livrés ou reportés.

33 min May 20, 2026
debloclaude-opus-4.7claude-codegemini-live +25
Thales & Claude deblo

Le tiret cadratin qui a tué la production : comment un slogan marketing dans un header HTTP a fait tomber le chat de Déblo pendant 24 heures

Deux jours avant la soumission App Store, tout le produit chat de Déblo s’est cassé silencieusement. Pas de spinner, pas de toast, aucune erreur dans l’UI — juste un silence radio. L’incident de 24 heures se résumait à un seul « é » dans la valeur d’un header HTTP qui levait une UnicodeEncodeError avant qu’aucune requête vers OpenRouter ne quitte le backend. Post-mortem d’une fausse hypothèse, d’une trace Sentry, et d’un fix de six lignes qui a débloqué le lancement.

30 min May 19, 2026
debloclaude-opus-4.7claude-codeincident +19
Thales & Claude deblo

Six heures, d’une page blanche à la review Apple — Comment nous avons soumis Déblo à l’App Store, en direct

Marche à marche en direct de la soumission de Déblo à l’App Store iOS en six heures : ce que les validateurs d’Apple ont rejeté (un superscript Unicode), ce que nous avons corrigé (un Promotional Text gaspillé sur des marques tierces), et les rouages de l’ASO iOS que presque tout le monde rate.

30 min May 13, 2026
debloclaude-opus-4.7claude-codeapp-store +16