Flutter支付集成插件paystack_for_flutter的使用
Flutter支付集成插件paystack_for_flutter的使用
💰 Paystack Package for Flutter
paystack_for_flutter
是一个Flutter插件,它使得将Paystack支付网关集成到您的应用程序中变得非常简单。支持多种支付方式,如银行卡、银行转账、USSD、移动支付等。
截图
Initiate Payment | Payment Options |
---|---|
Pay With Card | Pay With Bank Transfer |
---|---|
Pay With Bank | Payment Successful |
---|---|
🎯 添加依赖到pubspec.yaml
dependencies:
paystack_for_flutter: ^1.0.2
然后导入包:
import 'package:paystack_for_flutter/paystack_for_flutter.dart';
🚀 使用方法
要使用Paystack插件,只需在按钮点击时调用插件。以下是一个示例实现:
PaystackFlutter().pay(
context: context,
secretKey: 'YOUR_PAYSTACK_SECRET_KEY', // 您的Paystack私钥
amount: 60000, // 要收取的金额,单位是最小货币单位(如果金额是600,则乘以100)
email: 'theelitedevelopers1@gmail.com', // 客户的电子邮件地址
callbackUrl: 'https://callback.com', // 支付后重定向的URL
showProgressBar: true, // 是否显示进度条
paymentOptions: [PaymentOption.card, PaymentOption.bankTransfer, PaymentOption.mobileMoney],
currency: Currency.NGN,
metaData: {
"product_name": "Nike Sneakers",
"product_quantity": 3,
"product_price": 24000
}, // 与交易关联的额外元数据
onSuccess: (paystackCallback){
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Transaction Successful::::${paystackCallback.reference}'),
backgroundColor: Colors.blue,
));
}, // 成功回调
onCancelled: (paystackCallback){
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Transaction Failed/Not successful::::${paystackCallback.reference}'),
backgroundColor: Colors.red,
));
}, // 取消回调
);
完整的示例代码如下:
import 'package:flutter/material.dart';
import 'package:paystack_for_flutter/paystack_for_flutter.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Paystack Flutter Example',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
useMaterial3: true,
),
home: const MyHomePage(),
debugShowCheckedModeBanner: false,
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextButton(
onPressed: () {
PaystackFlutter().pay(
context: context,
secretKey: 'YOUR_PAYSTACK_KEY', // 您的Paystack私钥
amount: 60000, // 要收取的金额,单位是最小货币单位(如果金额是600,则乘以100)
email: 'theelitedevelopers1@gmail.com', // 客户的电子邮件地址
callbackUrl: 'https://callback.com', // 支付后重定向的URL
showProgressBar: false, // 是否显示进度条
paymentOptions: [
PaymentOption.card,
PaymentOption.bankTransfer,
PaymentOption.mobileMoney
],
currency: Currency.NGN,
metaData: {
"product_name": "Nike Sneakers",
"product_quantity": 3,
"product_price": 24000
}, // 与交易关联的额外元数据
onSuccess: (paystackCallback) {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(
'Transaction Successful::::${paystackCallback.reference}'),
backgroundColor: Colors.blue,
));
}, // 成功回调
onCancelled: (paystackCallback) {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(
'Transaction Failed/Not successful::::${paystackCallback.reference}'),
backgroundColor: Colors.red,
));
}, // 取消回调
);
},
child: const Text(
'Pay with Paystack',
style: TextStyle(
color: Colors.blue,
),
),
),
],
),
),
);
}
}
📝 参数详细说明
参数 | 数据类型 | 必需 | 详情 |
---|---|---|---|
context | BuildContext | 是 | 当前构建上下文 |
secretKey | String | 是 | 您的Paystack私钥,可以在Paystack仪表板的设置中获取 |
amount | double | 是 | 要收取的金额,单位是最小货币单位(如果金额是600,则乘以100) |
callbackUrl | String | 是 | 支付后重定向的URL |
onSuccess | Function(PaystackCallback) | 是 | 成功回调函数 |
onCancelled | Function(PaystackCallback) | 是 | 取消回调函数 |
reference | String | 否 | 自定义交易参考号,如果不传递,Paystack会自动生成 |
confirmTransaction | bool | 否 | 如果为true,插件会确认交易是否成功,默认值为false |
metadata | dynamic(json) | 否 | 与交易关联的额外元数据 |
paymentOptions | List<PaymentOption(enum)> | 否 | 允许的支付方式列表 |
currency | enum | 否 | 交易使用的货币 |
showProgressBar | bool | 否 | 如果为true,显示进度条,默认值为true |
❕ 枚举及其值
paymentOptions:
/// - [paymentOptions] 允许的支付方式列表。
/// - **可用支付方式:**
/// - [PaymentOption.card] 允许使用借记卡/信用卡支付。
/// - [PaymentOption.bank] 允许通过银行支付。
/// - [PaymentOption.bankTransfer] 允许通过银行转账支付(替代 `bank`)。
/// - [PaymentOption.ussd] 允许通过USSD移动银行支付。
/// - [PaymentOption.mobileMoney] 允许通过移动钱包支付(例如Mpesa,MTN Mobile Money)。
/// - [PaymentOption.eft] 允许通过EFT(电子资金转账)支付。
/// - [PaymentOption.qr] 允许通过二维码支付。
currency:
/// - [currency] 交易使用的货币。如果省略,则使用与您Paystack账户关联国家的默认货币。
/// - **支持的货币:**
/// - [Currency.NGN] (尼日利亚奈拉)
/// - [Currency.USD] (美元)
/// - [Currency.GHS] (加纳塞地)
/// - [Currency.ZAR] (南非兰特)
/// - [Currency.KES] (肯尼亚先令)
❕ 银行转账在沙箱环境中无响应(但不要担心)
请不要担心,如果您发现“通过银行转账”选项在点击“我已汇款”按钮后一直加载。Paystack银行转账选项在沙箱环境中不起作用,但在使用您的“实时密钥”时工作正常。
✅ 成功回调(支付成功后)
Paystack建议您使用reference调用后台确认交易是否成功,然后再向客户提供价值。onSuccess回调使您可以轻松获取reference
或accessCode
并调用后台:
onSuccess: (paystackCallback){
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Transaction Successful::::${paystackCallback.reference}'),
backgroundColor: Colors.blue,
));
}
✔️ 使用插件验证交易
也可以使用插件通过包含confirmTransaction
参数来确认交易是否成功:
confirmTransaction: true
当包含此参数时,插件会直接从Paystack确认交易是否真正成功。如果是,它将执行onSuccess回调;如果不是,则调用onCancelled回调。
❌ 取消/未成功的回调(支付失败后)
当支付未成功时,将执行onCancelled回调。您可以选择向客户显示消息或使用reference进行其他操作:
onCancelled: (paystackCallback){
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Transaction Failed/Not successful::::${paystackCallback.reference}'),
backgroundColor: Colors.red,
));
}
▶️ 运行示例项目
example项目已经提供。克隆此仓库并导航到example
文件夹。使用支持的IDE打开它或在终端中执行flutter run
。
📝 贡献、Issues和Bug Reports
您的贡献对于改进这个库非常重要。如果您有兴趣贡献,请提交pull request或在我们的仓库链接上打开issue。如果您遇到问题或想要报告bug,请在这里报告,请尽可能详细描述。
更多关于Flutter支付集成插件paystack_for_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件paystack_for_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中集成并使用paystack_for_flutter
插件的示例代码。这个插件允许你使用Paystack进行支付集成。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加paystack_for_flutter
依赖:
dependencies:
flutter:
sdk: flutter
paystack_for_flutter: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置Android
在android/app/src/main/AndroidManifest.xml
中添加必要的权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
3. 配置iOS(可选)
如果你也在iOS上开发,请确保在Info.plist
中添加必要的权限配置(如果需要)。不过,Paystack的Flutter插件通常会自动处理大部分配置。
4. 初始化Paystack
在你的Flutter项目的lib
目录下创建一个新的Dart文件,例如paystack_service.dart
,用于初始化Paystack并处理支付。
import 'package:flutter/material.dart';
import 'package:paystack_for_flutter/paystack_for_flutter.dart';
class PaystackService {
static const String publicKey = 'YOUR_PAYSTACK_PUBLIC_KEY'; // 替换为你的Paystack公钥
static Future<void> initializePaystack() async {
await PaystackPlugin.initialize(
publicKey: publicKey,
acceptance: 'USD', // 或其他货币类型
email: 'customer@example.com', // 用户的邮箱
amount: 1000, // 支付金额,单位为分
metadata: {
'custom_fields': [
{'display_name': 'Order ID', 'variable_name': 'order_id', 'value': '12345'},
],
},
referrer: 'referrer_code', // 可选
);
}
static Future<void> startPayment() async {
try {
bool isSuccess = await PaystackPlugin.startTransaction(
onComplete: (transaction) {
// 支付成功后的回调处理
print('Transaction successful: $transaction');
},
onCancel: () {
// 支付取消后的回调处理
print('Transaction cancelled');
},
onError: (error) {
// 支付错误后的回调处理
print('Transaction error: $error');
},
);
if (isSuccess) {
print('Payment initiated successfully');
} else {
print('Payment initiation failed');
}
} catch (e) {
print('Error starting payment: $e');
}
}
}
5. 使用PaystackService进行支付
在你的主应用逻辑中,例如main.dart
,调用PaystackService
进行支付初始化并启动支付流程:
import 'package:flutter/material.dart';
import 'paystack_service.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Paystack Payment Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
await PaystackService.initializePaystack();
await PaystackService.startPayment();
},
child: Text('Start Payment'),
),
),
),
);
}
}
注意事项
- 安全性:确保你的Paystack公钥和私钥不要硬编码在客户端代码中,尤其是在生产环境中。通常,这些信息应该通过安全的后端API来获取。
- 测试环境:在开发过程中,使用Paystack的测试公钥和测试卡进行测试,避免对你的真实账户产生费用。
- 错误处理:在实际应用中,添加更详细的错误处理和用户反馈机制。
这样,你就可以在Flutter应用中集成并使用Paystack进行支付了。希望这个示例对你有帮助!