Flutter支付集成插件monnify_flutter_sdk的使用
Flutter支付集成插件monnify_flutter_sdk的使用
Flutter 插件 monnify_flutter_sdk
可以帮助你在 Flutter 应用程序中集成 Monnify 支付功能。此插件可以让你轻松地初始化支付,并处理与 Monnify 支付系统的交互。
开始使用
首先,在你的 pubspec.yaml
文件中添加 monnify_flutter_sdk
作为依赖项:
dependencies:
monnify_flutter_sdk: ^版本号
然后运行 flutter pub get
来获取新的依赖项。
如何使用
1. 初始化
在你的应用程序中初始化插件。这一步通常在 initState
方法中完成。
import 'package:monnify_flutter_sdk/monnify_flutter_sdk.dart';
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
MonnifyFlutterSdk.initialize(
'YOUR_API_KEY',
'CONTRACTCODE',
ApplicationMode.TEST
);
}
}
2. 初始化支付
创建一个 Transaction
对象并调用 initializePayment
方法来启动支付流程。
Future<void> initPayment() async {
TransactionResponse transactionResponse = await MonnifyFlutterSdk.initializePayment(Transaction(
2000,
"NGN",
"Customer Name",
"mail.cus@tome.er",
"PAYMENT_REF",
"Description of payment",
metaData: {
"ip": "196.168.45.22",
"device": "mobile_flutter"
// 其他信息
},
paymentMethods: [PaymentMethod.CARD, PaymentMethod.ACCOUNT_TRANSFER],
incomeSplitConfig: [
SubAccountDetails("MFY_SUB_319452883968", 10.5, 500, true),
SubAccountDetails("MFY_SUB_259811283666", 10.5, 1000, false)
]
));
}
参数说明
- Payment Methods: 指定交易级别的支付方式。
- Sub-Accounts: 在
incomeSplitConfig
中指定的账户将接收该交易的结算。 - MetaData: 是一个单层的映射,用于传递额外的信息。
返回值
TransactionResponse
类包含以下字段:
String paymentDate;
double amountPayable;
double amountPaid;
String paymentMethod;
String transactionStatus;
String transactionReference;
String paymentReference;
完整示例代码
以下是完整的示例代码,展示了如何在 Flutter 应用程序中使用 monnify_flutter_sdk
插件。
import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:math';
import 'package:flutter/services.dart';
import 'package:monnify_flutter_sdk/monnify_flutter_sdk.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late BuildContext mContext;
[@override](/user/override)
void initState() {
super.initState();
initializeSdk();
}
Future<void> initializeSdk() async {
try {
if (await MonnifyFlutterSdk.initialize(
'MK_TEST_G9YG93QQJA', '4551641593', ApplicationMode.TEST)) {
_showToast("SDK initialized!");
}
} on PlatformException catch (e, s) {
print("Error initializing sdk");
print(e);
print(s);
_showToast("Failed to init sdk!");
}
}
Future<void> initPayment() async {
TransactionResponse transactionResponse;
try {
transactionResponse = await MonnifyFlutterSdk.initializePayment(Transaction(
2000.0,
"NGN",
"Customer Name",
"mail.cus@tome.er",
getRandomString(15),
"Description of payment",
metaData: {
"ip": "196.168.45.22",
"device": "mobile"
},
paymentMethods: [PaymentMethod.CARD, PaymentMethod.ACCOUNT_TRANSFER]
));
_showToast(
transactionResponse.transactionStatus.toString() + "\n" +
transactionResponse.paymentReference.toString() + "\n" +
transactionResponse.transactionReference.toString() + "\n" +
transactionResponse.amountPaid.toString() + "\n" +
transactionResponse.amountPayable.toString() + "\n" +
transactionResponse.paymentDate.toString() + "\n" +
transactionResponse.paymentMethod.toString()
);
} on PlatformException catch (e, s) {
print("Error initializing payment");
print(e);
print(s);
_showToast("Failed to init payment!");
}
}
String getRandomString(int length) {
const _chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz1234567890';
Random _rnd = Random();
return String.fromCharCodes(Iterable.generate(
length, (_) => _chars.codeUnitAt(_rnd.nextInt(_chars.length))));
}
void _showToast(String message) {
final scaffold = ScaffoldMessenger.of(mContext);
scaffold.showSnackBar(
SnackBar(
content: Text(message),
action: SnackBarAction(
label: 'CLOSE', onPressed: scaffold.hideCurrentSnackBar),
),
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Monnify Plugin Sample'),
),
body: Builder(
builder: (context) {
mContext = context;
return Center(
child: TextButton(
child: Text("PAY"),
onPressed: () => initPayment(),
),
);
},
),
),
);
}
}
更多关于Flutter支付集成插件monnify_flutter_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件monnify_flutter_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成并使用monnify_flutter_sdk
插件的示例代码。请注意,在实际应用中,你需要替换示例中的API密钥和其他敏感信息。
步骤 1: 添加依赖
首先,在你的pubspec.yaml
文件中添加monnify_flutter_sdk
依赖:
dependencies:
flutter:
sdk: flutter
monnify_flutter_sdk: ^最新版本号 # 替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
步骤 2: 配置Android和iOS
确保你已经按照Monnify的官方文档配置了Android和iOS平台的相关权限和设置。这通常包括在AndroidManifest.xml
和Info.plist
中添加必要的权限和配置。
步骤 3: 初始化Monnify SDK
在你的Flutter项目的入口文件(通常是main.dart
)中,初始化Monnify SDK。
import 'package:flutter/material.dart';
import 'package:monnify_flutter_sdk/monnify_flutter_sdk.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Monnify Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
void initState() {
super.initState();
// 初始化Monnify SDK
MonnifyFlutterSdk.init(
publicKey: '你的公钥', // 替换为你的Monnify公钥
environment: 'sandbox', // 或者 'production'
callbackUrlScheme: 'yourapp://callback', // 替换为你的回调URL Scheme
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Monnify Flutter SDK Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
_initiatePayment();
},
child: Text('Initiate Payment'),
),
),
);
}
Future<void> _initiatePayment() async {
try {
// 构建支付请求
final paymentRequest = PaymentRequest(
amount: 1000, // 金额,单位:奈拉(Naira)
currency: 'NGN',
email: 'user@example.com', // 用户邮箱
phone: '08012345678', // 用户电话
reference: 'unique_payment_reference_${DateTime.now().millisecondsSinceEpoch}',
metadata: {
'key1': 'value1',
'key2': 'value2',
},
// 其他可选参数...
);
// 发起支付
final paymentResponse = await MonnifyFlutterSdk.initiatePayment(paymentRequest);
print('Payment Response: $paymentResponse');
} catch (e) {
print('Error initiating payment: $e');
}
}
}
class PaymentRequest {
final int amount;
final String currency;
final String email;
final String phone;
final String reference;
final Map<String, String> metadata;
// 其他参数可以根据Monnify SDK的要求添加
PaymentRequest({
required this.amount,
required this.currency,
required this.email,
required this.phone,
required this.reference,
required this.metadata,
});
}
注意事项
- 公钥和私钥:确保你使用的是正确的公钥和私钥,并且它们已经在Monnify后台进行了配置。
- 回调URL Scheme:确保你在
Info.plist
(iOS)和AndroidManifest.xml
(Android)中正确配置了回调URL Scheme。 - 支付参数:根据Monnify的要求,可能需要添加更多的支付参数,如
description
、customer
等。 - 错误处理:在实际应用中,应该添加更详细的错误处理逻辑,以处理各种可能的异常情况。
请确保在实际部署前仔细阅读Monnify的官方文档,以了解所有可能的配置选项和参数。