Feexpay v2

FeexPay v2 est un plugin Flutter sécurisé pour accepter les paiements Mobile Money, Wallet et Carte Bancaire via l'API v2.
Interface bilingue (FR/EN) avec détection automatique de la langue du téléphone.

Installation

flutter pub add feexpay_flutter_v2

Import

import 'package:feexpay_flutter_v2/feexpay_flutter_sdk.dart';

Utilisation

import 'package:feexpay_flutter_v2/feexpay_flutter_sdk.dart';

ChoicePage(
  token: 'votre_api_key',
  id: 'votre_shop_id',
  amount: '1500',
  redirecturl: '/success',
  errorredirecturl: '/error',
  onPaymentResult: (PaymentResult result) {
    if (result.isSuccess) {
      // Paiement accepté — récupérez la référence de transaction
      final txRef = result.reference;
      // Ex: confirmer la commande auprès de votre backend
    } else if (result.isFailed) {
      // Paiement échoué
      print('Échec: ${result.message}');
    }
  },
)

Paramètres

Paramètre Type Requis Description
token String Oui Clé API
id String Oui Identifiant boutique
amount String Oui Montant (ex: "1500")
redirecturl String Non Route/URL de redirection après succès
errorredirecturl String Non Route/URL de redirection après échec
locale AppLocale Non Forcer la langue : AppLocale.fr ou AppLocale.en
reference String Non Référence de transaction prédéfinie
hide_identity_form bool Non Masquer le formulaire d'identité (nom/email)
name_shop String Non Nom du marchand (affiché dans l'interface)
trans_key String Non Clé de transaction (15 caractères aléatoires)
callback_info Map Non Infos supplémentaires pour le callback
onPaymentResult void Function(PaymentResult) Non Callback appelé après un paiement réussi (SUCCESSFUL) ou échoué (FAILED)

Résultat du paiement

Le callback onPaymentResult reçoit un objet PaymentResult contenant :

Propriété Type Description
status String Statut réel de l'API : SUCCESSFUL ou FAILED
reference String Référence de la transaction côté Feexpay
message String? Message d'erreur (uniquement en cas d'échec)
isSuccess bool Raccourci pour status == 'SUCCESSFUL'
isFailed bool Raccourci pour status == 'FAILED'
ChoicePage(
  ...
  onPaymentResult: (PaymentResult result) {
    if (result.isSuccess) {
      // La référence est disponible pour traitement ultérieur
      final reference = result.reference;
      await myBackend.confirmOrder(reference);
    }
  },
);

Changement de langue en temps réel

Un bouton FR/EN est affiché dans l'interface utilisateur. L'utilisateur peut basculer entre le français et l'anglais à tout moment sans redémarrer le formulaire.

// Détection automatique (français par défaut si langue du téléphone ≠ anglais)
ChoicePage.autoLocale(
  token: '...',
  id: '...',
  amount: '1500',
)

// Forcer le français
ChoicePage(
  token: '...',
  id: '...',
  amount: '1500',
  locale: AppLocale.fr,
)

// Forcer l'anglais
ChoicePage(
  token: '...',
  id: '...',
  amount: '1500',
  locale: AppLocale.en,
)

Modes de paiement supportés

Pays Mobile Money Wallet
Bénin (BJ) MTN, MOOV, CELTIIS BJ CORIS
Côte d'Ivoire (CI) ORANGE CI, MTN CI, MOOV CI WAVE CI
Togo (TG) MOOV TG, TOGOCOM TG -
Burkina Faso (BF) ORANGE BF, MOOV BF -
Sénégal (SN) FREE SN, ORANGE SN WAVE SN

Déclaration des routes de redirection

Les routes internes sont déclarées dans le MaterialApp de l'application hôte :

MaterialApp(
  title: 'Mon App',
  theme: ThemeData(fontFamily: 'Poppins'),
  routes: {
    '/success': (context) => const SuccessPage(),
    '/error': (context) => const EndErrorPage(),
  },
)

Les redirections externes (URLs http/https) sont également supportées.

Contribution

Les pull requests sont les bienvenues. Pour les changements majeurs, veuillez d'abord ouvrir une issue.

Licence

GNU Affero