geniuspay_flutter 1.0.0 copy "geniuspay_flutter: ^1.0.0" to clipboard
geniuspay_flutter: ^1.0.0 copied to clipboard

SDK Flutter officiel pour intégrer les paiements GeniusPay (Wave, Orange Money, MTN Money, Carte bancaire)

GeniusPay Flutter SDK #

pub package License

SDK Flutter officiel pour intégrer les paiements GeniusPay (Wave, Orange Money, MTN Money, Carte bancaire).

Installation #

dependencies:
  geniuspay_flutter: ^1.0.0
flutter pub get

Configuration #

Initialisation #

import 'package:geniuspay_flutter/geniuspay_flutter.dart';

void main() {
  GeniusPay.initialize(
    GeniusPayConfig(
      apiKey: 'pk_sandbox_xxxxxxxxxxxx',
      apiSecret: 'sk_sandbox_xxxxxxxxxxxx', // Optionnel
      sandbox: true,
    ),
  );
  
  runApp(MyApp());
}

Configuration Android #

Ajoutez dans android/app/src/main/AndroidManifest.xml :

<queries>
  <intent>
    <action android:name="android.intent.action.VIEW" />
    <data android:scheme="https" />
  </intent>
</queries>

Configuration iOS #

Ajoutez dans ios/Runner/Info.plist :

<key>LSApplicationQueriesSchemes</key>
<array>
  <string>https</string>
</array>

Utilisation #

Bouton de paiement simple #

GeniusPayButton(
  amount: 5000,
  currency: 'XOF',
  paymentMethod: PaymentMethod.wave,
  description: 'Commande #123',
  customer: Customer(
    name: 'John Doe',
    email: 'john@example.com',
    phone: '+221771234567',
  ),
  onSuccess: (payment) {
    print('Paiement réussi: ${payment.reference}');
  },
  onError: (error) {
    print('Erreur: ${error.message}');
  },
)

Bottom Sheet de paiement #

final payment = await GeniusPaySheet.show(
  context,
  amount: 10000,
  currency: 'XOF',
  description: 'Abonnement Premium',
  allowedMethods: [
    PaymentMethod.wave,
    PaymentMethod.orangeMoney,
    PaymentMethod.card,
  ],
);

if (payment != null) {
  print('Paiement initié: ${payment.reference}');
}

Sélecteur de méthode de paiement #

PaymentMethod _selectedMethod = PaymentMethod.wave;

PaymentMethodsSelector(
  value: _selectedMethod,
  onChanged: (method) {
    setState(() => _selectedMethod = method);
  },
  allowedMethods: [
    PaymentMethod.wave,
    PaymentMethod.orangeMoney,
    PaymentMethod.mtnMoney,
  ],
)

Suivi du statut d'un paiement #

PaymentStatusWidget(
  reference: 'MTX-ABC123',
  pollInterval: Duration(seconds: 5),
  showDetails: true,
  onCompleted: (payment) {
    print('Paiement complété!');
  },
  onFailed: (payment) {
    print('Paiement échoué');
  },
)

Utilisation directe de l'API #

// Créer un paiement
final payment = await GeniusPay.instance.createPayment(
  PaymentData(
    amount: 5000,
    currency: 'XOF',
    paymentMethod: PaymentMethod.wave,
    description: 'Ma commande',
    customer: Customer(email: 'user@example.com'),
    metadata: {'order_id': '123'},
  ),
);

// Ouvrir la page de paiement
if (payment.paymentUrl != null) {
  await GeniusPay.instance.openPaymentPage(payment.paymentUrl!);
}

// Vérifier le statut
final status = await GeniusPay.client.checkPaymentStatus(payment.reference);

// Récupérer un paiement
final existingPayment = await GeniusPay.instance.getPayment('MTX-ABC123');

// Lister les paiements
final payments = await GeniusPay.instance.listPayments(
  status: 'completed',
  from: '2025-01-01',
);

Méthodes de paiement #

Méthode Enum Description
Wave PaymentMethod.wave 🌊 Paiement Wave
Orange Money PaymentMethod.orangeMoney 🟠 Paiement Orange Money
MTN Money PaymentMethod.mtnMoney 🟡 Paiement MTN Money
Moov Money PaymentMethod.moovMoney 🔵 Paiement Moov Money
Carte PaymentMethod.card 💳 Carte bancaire

Statuts de paiement #

Statut Enum Description
En attente PaymentStatus.pending Paiement en attente
En cours PaymentStatus.processing Paiement en cours de traitement
Réussi PaymentStatus.completed Paiement réussi
Échoué PaymentStatus.failed Paiement échoué
Annulé PaymentStatus.cancelled Paiement annulé
Expiré PaymentStatus.expired Paiement expiré

Gestion des erreurs #

try {
  final payment = await GeniusPay.instance.createPayment(data);
} on AuthenticationException catch (e) {
  // Clés API invalides
  print('Erreur auth: ${e.message}');
} on ValidationException catch (e) {
  // Données invalides
  print('Validation: ${e.message}');
  print('Erreurs: ${e.errors}');
} on NetworkException catch (e) {
  // Erreur réseau
  print('Réseau: ${e.message}');
} on GeniusPayException catch (e) {
  // Autre erreur
  print('Erreur: ${e.message}');
}

Mode Sandbox #

En mode sandbox (sandbox: true), aucune transaction réelle n'est effectuée.

Cartes de test #

Numéro Résultat
4084 0841 1111 1111 Succès
4084 0841 2222 2222 Échec

Exemple complet #

import 'package:flutter/material.dart';
import 'package:geniuspay_flutter/geniuspay_flutter.dart';

void main() {
  GeniusPay.initialize(
    GeniusPayConfig.sandbox(
      apiKey: 'pk_sandbox_xxxxxxxxxxxx',
    ),
  );
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: CheckoutPage(),
    );
  }
}

class CheckoutPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Checkout')),
      body: Center(
        child: GeniusPayButton(
          amount: 15000,
          currency: 'XOF',
          description: 'Commande #12345',
          customer: Customer(
            name: 'Amadou Diallo',
            email: 'amadou@example.com',
            phone: '+221771234567',
          ),
          onSuccess: (payment) {
            Navigator.push(
              context,
              MaterialPageRoute(
                builder: (_) => PaymentStatusPage(
                  reference: payment.reference,
                ),
              ),
            );
          },
          onError: (error) {
            ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(content: Text(error.message)),
            );
          },
          child: Text('Payer 15 000 XOF'),
        ),
      ),
    );
  }
}

class PaymentStatusPage extends StatelessWidget {
  final String reference;
  
  const PaymentStatusPage({required this.reference});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Statut du paiement')),
      body: PaymentStatusWidget(
        reference: reference,
        onCompleted: (payment) {
          showDialog(
            context: context,
            builder: (_) => AlertDialog(
              title: Text('Succès!'),
              content: Text('Merci pour votre achat.'),
              actions: [
                TextButton(
                  onPressed: () => Navigator.popUntil(context, (r) => r.isFirst),
                  child: Text('OK'),
                ),
              ],
            ),
          );
        },
      ),
    );
  }
}

📞 Support #

Licence #

MIT - Voir LICENSE

0
likes
140
points
54
downloads

Documentation

Documentation
API reference

Publisher

unverified uploader

Weekly Downloads

SDK Flutter officiel pour intégrer les paiements GeniusPay (Wave, Orange Money, MTN Money, Carte bancaire)

Homepage
Repository (GitHub)

License

Apache-2.0 (license)

Dependencies

crypto, flutter, http, shared_preferences, url_launcher, webview_flutter

More

Packages that depend on geniuspay_flutter