Aller au contenu principal

Paiements FeexPay

Vue d'ensemble​

Tranoo utilise FeexPay comme agrégateur de paiement pour Mobile Money (MTN, Moov, Orange) et cartes bancaires. L'intégration couvre le backend Express, les apps Flutter et le dashboard web.

Architecture​

┌─────────────┐ init paiement ┌──────────────┐
│ Flutter / │ ─────────────────────► │ API Express │
│ Dashboard │ │ paymentCtrl │
└─────────────┘ └──────┬───────┘
│
┌─────────────────────────┼─────────────────────────┐
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ FeexPay │ │ MongoDB │ │ Webhook │
│ API v2 │ │ Payment │ │ callback │
└────────────┘ └────────────┘ └────────────┘

Modèle de données​

Payment.js — collection des transactions

ChampDescription
userIdUtilisateur payeur
montantMontant en XOF
referenceRéférence FeexPay
statutpending, success, failed, expired
typeachat, abonnement, publicite, verification, etc.
metadataContexte métier (articleId, subscriptionId…)

Endpoints principaux​

Préfixe : /api/payments

MéthodeRouteAuthDescription
POST/initOuiInitialise un paiement
POST/requesttopay/:networkOuiMobile Money (MTN, Moov…)
POST/initcardOuiPaiement carte
POST/webhookNonCallback serveur FeexPay
GET/public/status/:idNonStatut public transaction
POST/flutter/recordOuiEnregistrement post-paiement Flutter
GET/:idOuiDétail paiement
POST/admin/:id/statusAdminMise à jour statut manuelle

Variables d'environnement​

VariableDescription
FEEXPAY_BASE_URLURL API FeexPay
FEEXPAY_FEEXLINK_BASE_URLURL FeexLink (lien de paiement)
FEEXPAY_SHOP_IDIdentifiant boutique
FEEXPAY_API_TOKENToken API
FEEXPAY_MODESANDBOX ou LIVE
PAYMENT_EXPIRE_SECONDSExpiration transaction
FEEXLINK_DISABLEDDésactiver FeexLink
FEEXPAY_DISABLE_LOCAL_EXPIRYDésactiver expiration locale

Flux de paiement​

1. Initialisation (mobile ou web)​

  1. Client appelle POST /api/payments/init avec montant et type
  2. Backend crée un document Payment (statut pending)
  3. Backend appelle FeexPay et retourne URL ou données de paiement

2. Paiement utilisateur​

  • Mobile Money : l'utilisateur valide sur son téléphone
  • Carte : redirection vers page FeexPay
  • Flutter : SDK feexpay_flutter_v2 ouvre le flux natif

3. Confirmation​

  1. FeexPay envoie un webhook à POST /api/payments/webhook
  2. Backend met à jour le statut Payment
  3. Actions métier déclenchées (activation abonnement, validation publicité, etc.)

4. Worker de suivi​

paymentController.startPaymentStatusWorker() — polling des paiements en attente au démarrage du serveur.

Wallet (portefeuille)​

Préfixe : /api/wallet (auth requis)

RouteDescription
GET /meSolde et infos wallet
GET /me/transactionsHistorique transactions
GET /me/statsStatistiques wallet

Utilisé principalement par Tranoo Pro (vendeurs).

Intégration Flutter​

Fichiers de référence :

  • tranoo/lib/config/feexpay_config.dart
  • tranoo_pro/lib/config/feexpay_config.dart
  • tranoo/FEEXPAY_INTEGRATION.md (guide détaillé dans le dépôt)
// Exemple simplifié
final result = await FeexPayService.startPayment(
amount: 5000,
customId: "CMD_001",
description: "Paiement commande",
paymentType: "MOBILE",
);

Types de paiement métier​

TypeDéclencheurEffet
Abonnement vendeursubscription_payment.dartActive Subscription
Abonnement transitaireTranoo ProActive abonnement transitaire
PublicitéBoost articleActive Publicite
Vérification articleAcheteurLance vérification
AchatCommandeMet à jour Order / Achat

Sécurité​

  • Webhook FeexPay : endpoint public (pas de Bearer) — validation côté FeexPay
  • Paiements utilisateur : authMiddleware requis
  • Admin : role.js pour modification manuelle statut
  • Expiration automatique via PAYMENT_EXPIRE_SECONDS

Scripts de maintenance​

npm run cleanup:vehicle-payments # Nettoyage paiements véhicules

Voir aussi​