Skip to main content

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). Le wallet livreur fait partie du système legacy (voir Intégration Livro).

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