geniuspay_flutter 1.0.0
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 #
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 #
- Documentation : pay.genius.ci/doc
- Email : pay@genius.ci
- Site web : pay.genius.ci
Licence #
MIT - Voir LICENSE