Flutter支付集成插件monnify_payment_sdk的使用
Flutter支付集成插件monnify_payment_sdk的使用
monnify_payment_sdk
Flutter插件用于Monnify SDK。
Getting Started
要使用此插件,请在pubspec.yaml
文件中添加monnify_payment_sdk
作为依赖项。
How to use
该插件暴露了两个API:
1. Initialize
初始化插件。这应该只做一次,最好在您的小部件的initState
中进行。
import 'package:monnify_payment_sdk/monnify_payment_sdk.dart';
class _MyAppState extends State<MyApp> {
...
late Monnify? monnify;
[@override](/user/override)
void initState() {
// 初始化Monnify插件
monnify = await Monnify.initialize(
applicationMode: ApplicationMode.TEST, // 使用测试模式
apiKey: 'YOUR API KEY', // 替换为您的API密钥
contractCode: 'YOUR CONTRACT CODE', // 替换为您的合约代码
);
super.initState();
}
...
}
2. Initialize Payment
创建Transaction类的对象并将其传递给initializePayment函数。
Future<void> initializePayment() async {
final amount = '20.00';
final paymentReference = 'YOUR PAYMENT REFERENCE';
final transaction = TransactionDetails().copyWith(
amount: amount, // 支付金额
currencyCode: 'NGN', // 货币代码
customerName: 'Customer Name', // 客户姓名
customerEmail: 'custo.mer@email.com', // 客户电子邮件
paymentReference: paymentReference, // 支付参考号
// metaData: {"ip": "0.0.0.0", "device": "mobile"}, // 元数据(可选)
// paymentMethods: [PaymentMethod.CARD, PaymentMethod.ACCOUNT_TRANSFER, PaymentMethod.USSD], // 支付方法(可选)
/*incomeSplitConfig: [SubAccountDetails("MFY_SUB_319452883968", 10.5, 500, true),
SubAccountDetails("MFY_SUB_259811283666", 10.5, 1000, false)]*/ // 收入分配配置(可选)
);
try {
final response =
await monnify?.initializePayment(transaction: transaction); // 初始化支付
} catch (e) {
// 处理异常
}
}
Optional params:
- Payment Methods 指定事务级别的支付方法。
- Sub-Accounts 在
incomeSplitConfig
中的账户将接收特定交易的结算。 - MetaData 是一个单层映射,用于传递任何额外的信息。
The TransactionResponse类在SDK关闭后收到包含以下字段:
String paymentDate; // 支付日期
double amountPayable; // 应付金额
double amountPaid; // 已付金额
String paymentMethod; // 支付方法
String transactionStatus; // 交易状态
String transactionReference; // 交易参考号
String paymentReference; // 支付参考号
String currencyCode; // 货币代码
注意:如果用户在iOS开发环境中关闭模态框,则不会返回TransactionResponse。
示例完整Demo
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:monnify_payment_sdk/monnify_payment_sdk.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
home: MonnifyPaymentSDKDemo(),
);
}
}
class MonnifyPaymentSDKDemo extends StatefulWidget {
const MonnifyPaymentSDKDemo({super.key});
[@override](/user/override)
State<MonnifyPaymentSDKDemo> createState() => _MonnifyPaymentSDKDemoState();
}
class _MonnifyPaymentSDKDemoState extends State<MonnifyPaymentSDKDemo> {
late final TextEditingController controller = TextEditingController()
..text = '20';
late Monnify? monnify;
[@override](/user/override)
void initState() {
initializeMonnify(); // 初始化Monnify
super.initState();
}
void showToast(String message) {
final scaffold = ScaffoldMessenger.of(context);
scaffold.showSnackBar(
SnackBar(
content: Text(message),
action: SnackBarAction(
label: 'CLOSE', onPressed: scaffold.hideCurrentSnackBar),
),
);
}
void initializeMonnify() async {
// 初始化Monnify插件
monnify = await Monnify.initialize(
applicationMode: ApplicationMode.TEST,
apiKey: 'YOUR API KEY',
contractCode: 'YOUR CONTRACT CODE',
);
}
void onInitializePayment() async {
final amount = double.parse(controller.text);
final paymentReference = DateTime.now().millisecondsSinceEpoch.toString();
final transaction = TransactionDetails().copyWith(
amount: amount, // 支付金额
currencyCode: 'NGN', // 货币代码
customerName: 'Customer Name', // 客户姓名
customerEmail: 'custo.mer@email.com', // 客户电子邮件
paymentReference: paymentReference, // 支付参考号
// metaData: {"ip": "196.168.45.22", "device": "mobile"}, // 元数据(可选)
// paymentMethods: [PaymentMethod.CARD, PaymentMethod.ACCOUNT_TRANSFER, PaymentMethod.USSD], // 支付方法(可选)
/*incomeSplitConfig: [SubAccountDetails("MFY_SUB_319452883968", 10.5, 500, true),
SubAccountDetails("MFY_SUB_259811283666", 10.5, 1000, false)]*/ // 收入分配配置(可选)
);
try {
final response =
await monnify?.initializePayment(transaction: transaction); // 初始化支付
showToast(response.toString()); // 显示响应信息
log(response.toString()); // 记录日志
} catch (e) {
log('$e'); // 记录异常
showToast(e.toString()); // 显示异常信息
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 30),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextFormField(
controller: controller,
keyboardType: TextInputType.number,
inputFormatters: [
FilteringTextInputFormatter.digitsOnly, // 仅允许数字输入
],
decoration: const InputDecoration(hintText: 'Amount'), // 输入提示
),
const SizedBox(height: 20), // 垂直间距
TextButton(onPressed: onInitializePayment, child: const Text('Pay')) // 支付按钮
],
),
),
);
}
}
更多关于Flutter支付集成插件monnify_payment_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件monnify_payment_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用monnify_payment_sdk
插件的示例代码。请注意,具体实现可能会根据Monnify SDK的最新版本和API有所变化,因此请参考官方文档进行最终确认。
步骤 1: 添加依赖
首先,在你的pubspec.yaml
文件中添加monnify_payment_sdk
依赖:
dependencies:
flutter:
sdk: flutter
monnify_payment_sdk: ^最新版本号 # 请替换为最新的版本号
然后运行flutter pub get
来安装依赖。
步骤 2: 配置Android和iOS
根据Monnify的官方文档,你可能需要在Android和iOS项目中进行一些配置,例如添加API密钥等。这里假设你已经完成了这些配置。
步骤 3: 初始化并启动支付
在你的Dart代码中,你可以按照以下方式使用monnify_payment_sdk
进行支付初始化。
import 'package:flutter/material.dart';
import 'package:monnify_payment_sdk/monnify_payment_sdk.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
void _initiatePayment() async {
try {
// 替换为实际的Monnify支付参数
final paymentDetails = MonnifyPaymentDetails(
amount: '1000', // 金额
currency: 'NGN', // 货币
email: 'user@example.com', // 用户邮箱
phone: '08012345678', // 用户电话
publicKey: 'your_public_key', // Monnify公钥
reference: 'unique_payment_reference', // 支付引用
metadata: {
'key1': 'value1',
'key2': 'value2',
},
customer: MonnifyCustomer(
name: 'John Doe',
),
callbackUrl: 'https://yourcallbackurl.com', // 回调URL
);
// 发起支付
final result = await MonnifyPaymentSdk.initiatePayment(context, paymentDetails);
// 处理支付结果
if (result.success) {
print('Payment successful: ${result.data}');
} else {
print('Payment failed: ${result.errorMessage}');
}
} catch (e) {
print('Error initiating payment: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Monnify Payment Integration'),
),
body: Center(
child: ElevatedButton(
onPressed: _initiatePayment,
child: Text('Initiate Payment'),
),
),
);
}
}
说明
- MonnifyPaymentDetails: 这个类包含了支付所需的所有详细信息,如金额、货币、用户信息等。
- MonnifyPaymentSdk.initiatePayment: 这个方法用于启动支付流程。它返回一个
Future
,该Future
会解析为一个包含支付结果的对象。 - 处理支付结果: 根据返回的结果,你可以判断支付是否成功,并据此进行后续操作。
注意
- 确保你已经从Monnify获取了必要的公钥和私钥,并在你的应用中正确配置。
- 根据Monnify的API文档,你可能需要处理更多的支付参数和回调逻辑。
- 在生产环境中,务必保护好你的API密钥和其他敏感信息。
这个示例提供了一个基本的框架,你可以根据实际需求进行扩展和修改。