lengopay_flutter 1.3.0
lengopay_flutter: ^1.3.0 copied to clipboard
Package Flutter pour l'intégration de l'API de paiement Lengo Pay. Support des paiements classiques (v1) et Cash In direct (v2) vers Orange Money et MTN Mobile Money Guinée.
import 'dart:developer';
import 'package:lengopay_flutter/lengopay_flutter.dart';
import 'package:flutter/material.dart';
/// Exemple d'application démontrant l'utilisation du package lengopay_flutter
///
/// Fonctionnalités disponibles :
/// - API v1 : Génération d'URL de paiement classique
/// - API v2 : Paiements Cash In directs vers comptes mobiles
/// - Vérification du statut des transactions
///
/// ⚠️ Important : Les callbacks ne sont pas gérés par le SDK
/// Vous devez implémenter votre propre endpoint serveur pour les recevoir
void main() => runApp(const LengoPayApp());
class LengoPayApp extends StatefulWidget {
const LengoPayApp({super.key});
@override
State<LengoPayApp> createState() => _LengoPayAppState();
}
class _LengoPayAppState extends State<LengoPayApp> {
String output =
'Choisissez une option pour tester les fonctionnalités Lengo Pay.';
Future<void> testPayment() async {
// Initialisation du service Lengopay avec votre clé de licence
final lengopay = LengopayFlutter(
// Clé de licence obtenue sur votre compte Lengopay
licenseKey: 'VOTRE_LICENSE_KEY',
// Par defaut le package utilise l'url de test: 'https://sandbox.lengopay.com/api/v1'
// vous pouvez utiliser l'URL de production
// ici 👇👇
// baseUrl:
);
try {
// Initier un paiement
final paymentResponse = await lengopay.initiatePayment(
PaymentRequest(
websiteId: 'VOTRE_WEBSITE_ID',
// L'identifiant unique de votre site
amount: 2000,
// Montant du paiement
currency: 'GNF',
// Devise utilisée "GNF", "XOF" ou "USD"
returnUrl: '',
// (Optionnel) URL de retour
callbackUrl: '',
// (Optionnel) URL de callback
),
);
setState(() {
output = '''
Status: ${paymentResponse.status}
Pay ID: ${paymentResponse.payId}
URL de paiement: ${paymentResponse.paymentUrl}
''';
});
// Vous pouvez remplacer log par print selon vos bésoins.
log('Status: ${paymentResponse.status}');
log('Pay ID: ${paymentResponse.payId}');
log('URL de paiement: ${paymentResponse.paymentUrl}');
} on LengopayException catch (e) {
log('Erreur Lengopay: ${e.toString()}');
setState(() {
output = 'Erreur Lengopay: ${e.toString()}';
});
} catch (e) {
setState(() {
output = 'Erreur inattendue: ${e.toString()}';
});
log('Erreur inattendue: ${e.toString()}');
}
}
Future<void> testTransactionStatus() async {
// Initialisation du service Lengopay avec votre clé de licence
final lengopay = LengopayFlutter(
// Clé de licence obtenue sur votre compte Lengopay
licenseKey: 'VOTRE_LICENSE_KEY',
// Par defaut le package utilise l'url de test: 'https://sandbox.lengopay.com/api/v1'
// vous pouvez utiliser l'URL de production
// ici 👇👇
// baseUrl:
);
try {
final transactionResponse = await lengopay.transactionStatus(
TransactionStatusRequest(
payId: 'VOTRE_PAY_ID',
websiteId: "VOTRE_WEBSITE_ID",
// L'identifiant unique de votre site
),
);
setState(() {
output = '''
Status: ${transactionResponse.status}
Pay ID: ${transactionResponse.payId}
Date: ${transactionResponse.date}
Montant: ${transactionResponse.amount}
''';
});
// Vous pouvez remplacer log par print selon vos bésoins.
log('Status: ${transactionResponse.status}');
log('Pay ID: ${transactionResponse.payId}');
log('Date: ${transactionResponse.date}');
log('Montant: ${transactionResponse.amount}');
} on LengopayException catch (e) {
log('Erreur Lengopay: ${e.toString()}');
setState(() {
output = 'Erreur Lengopay: ${e.toString()}';
});
} catch (e) {
setState(() {
output = 'Erreur inattendue: ${e.toString()}';
});
log('Erreur inattendue: ${e.toString()}');
}
}
Future<void> testCashIn() async {
// Initialisation du service Lengopay avec votre clé de licence
final lengopay = LengopayFlutter(
licenseKey: 'VOTRE_LICENSE_KEY',
// Par défaut utilise l'environnement sandbox pour l'API v2
// Pour la production, spécifiez les URLs de production
// baseUrlV2: 'https://portal.lengopay.com/api/v2',
);
try {
// Initier un paiement Cash In (API v2)
final cashInResponse = await lengopay.initiateCashIn(
CashInRequest(
amount: '1000', // Montant en chaîne
currency: 'GNF',
websiteId: 'VOTRE_WEBSITE_ID',
typeAccount: 'lp-om-gn', // Orange Money Guinée
account: '620124578', // Numéro de téléphone
callbackUrl: 'https://votre-site.com/callback', // Optionnel
),
);
setState(() {
output = '''
Cash In Status: ${cashInResponse.status}
Pay ID: ${cashInResponse.payId}
Message: ${cashInResponse.message}
⚠️ Le callback sera reçu sur votre serveur
''';
});
log('Cash In Status: ${cashInResponse.status}');
log('Pay ID: ${cashInResponse.payId}');
log('Message: ${cashInResponse.message}');
} on LengopayException catch (e) {
log('Erreur Cash In: ${e.toString()}');
setState(() {
output = 'Erreur Cash In: ${e.toString()}';
});
} catch (e) {
setState(() {
output = 'Erreur inattendue Cash In: ${e.toString()}';
});
log('Erreur inattendue Cash In: ${e.toString()}');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Lengo Pay Flutter',
home: Scaffold(
appBar: AppBar(
title: const Text('Lengo Pay Flutter'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
MaterialButton(
color: Colors.blue,
textColor: Colors.white,
onPressed: testPayment,
child: const Text('Tester le paiement (API v1)'),
),
const SizedBox(height: 10),
MaterialButton(
color: Colors.green,
textColor: Colors.white,
onPressed: testCashIn,
child: const Text('Tester Cash In (API v2)'),
),
const SizedBox(height: 10),
MaterialButton(
color: Colors.orange,
textColor: Colors.white,
onPressed: testTransactionStatus,
child: const Text('Tester le statut de transaction'),
),
const SizedBox(height: 20),
Container(
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
border: Border.all(color: Colors.grey),
borderRadius: BorderRadius.circular(8),
),
child: Text(
output,
style: const TextStyle(fontSize: 14),
),
),
],
),
),
),
);
}
}