Flutter支付集成插件midpayment的使用
Flutter支付集成插件midpayment的使用
Flutter Midtrans支付插件
请注意在使用此库之前阅读Midtrans文档,并确保您已经拥有Midtrans账户以访问仪表板。
Android设置
仅支持AndroidX且编译目标最低为28
请将以下样式添加到您的android/app/src/main/res/values/styles.xml
文件中:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
完整的styles.xml文件将如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- 在活动上显示一个启动屏幕。自动移除当Flutter绘制其第一帧时 -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
</resources>
然后在您的AndroidManifest.xml
文件的应用程序标签中添加样式:
android:theme="@style/AppTheme"
iOS
无需特定设置
示例用法
请确保您已经准备了这些变量:
YOUR_CLIENT_ID
: Midtrans客户端IDYOUR_URL_BASE
: 处理支付的后端API基础URL
支付
import 'package:midpayment/midpayment.dart';
// 初始化支付参数
var midtransPayParam = MidtransPayParam();
midtransPayParam.clientKey = "="; // 替换为您的客户端密钥
midtransPayParam.merchantBaseUrl = ""; // 替换为您的商户基础URL
midtransPayParam.totalPrice = 0; // 替换为您要支付的金额
midtransPayParam.orderId = ""; // 替换为订单ID
midtransPayParam.selectedPaymentMethod = MidtransPaymentMethod.SHOPEEPAY.index; // 可选
// 执行支付操作
var result = await FlutterMidtransPayment.pay(midtransPayParam);
使用令牌支付
import 'package:midpayment/midpayment.dart';
// 初始化支付参数
var midtransPayParam = MidtransPayWithTokenParam();
midtransPayParam.clientKey = ""; // 替换为您的客户端密钥
midtransPayParam.merchantBaseUrl = ""; // 替换为您的商户基础URL
midtransPayParam.snapToken = ""; // 替换为Snap Token
// 执行支付操作
var result = await FlutterMidtransPayment.payWithToken(midtransPayParam);
完整示例Demo
以下是完整的示例代码:
import 'dart:developer';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:midpayment/midpayment.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
}
// 异步平台消息初始化
Future<void> initPlatformState() async {
log("开始");
String platformVersion;
// 平台消息可能失败,因此我们使用try/catch PlatformException。
try {
platformVersion = await FlutterMidtransPayment.platformVersion;
} on PlatformException {
platformVersion = '无法获取平台版本。';
}
// 如果小部件在异步平台消息处于飞行状态时从树中删除,则我们希望丢弃回复而不是调用
// setState以更新我们的非存在外观。
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: Center(
child: Column(
children: [
Text('运行于: $_platformVersion\n'),
ElevatedButton(
child: Text('支付'),
onPressed: () async {
var midtransPayParam = MidtransPayParam();
midtransPayParam.clientKey = "="; // 替换为您的客户端密钥
midtransPayParam.merchantBaseUrl = ""; // 替换为您的商户基础URL
midtransPayParam.totalPrice = 0; // 替换为您要支付的金额
midtransPayParam.orderId = ""; // 替换为订单ID
midtransPayParam.selectedPaymentMethod = MidtransPaymentMethod.SHOPEEPAY.index; // 可选
var result = await FlutterMidtransPayment.pay(midtransPayParam);
log(result);
}),
ElevatedButton(
child: Text('使用令牌支付'),
onPressed: () async {
log("开始");
var midtransPayParam = MidtransPayWithTokenParam();
midtransPayParam.clientKey = "SB-Mid-client-lqSYrzuU0C8KghnG"; // 替换为您的客户端密钥
midtransPayParam.merchantBaseUrl = "https://kesan-api.bangun-kreatif.com"; // 替换为您的商户基础URL
midtransPayParam.snapToken = "3143c741-3e24-4251-96e5-e5391cd19280"; // 替换为Snap Token
try {
var result = await FlutterMidtransPayment.payWithToken(midtransPayParam);
log('结果');
log(result.toString());
} catch (err) {
log(err.toString());
}
})
],
),
),
),
);
}
}
更多关于Flutter支付集成插件midpayment的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件midpayment的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
midpayment
是一个用于 Flutter 应用集成支付功能的插件。它支持多种支付方式,如支付宝、微信支付、Apple Pay 等。以下是如何在 Flutter 项目中使用 midpayment
插件的基本步骤。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 midpayment
插件的依赖。
dependencies:
flutter:
sdk: flutter
midpayment: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 配置支付平台
根据你使用的支付平台,进行相应的配置。
支付宝
- 在
AndroidManifest.xml
中添加支付宝的activity
配置。 - 在
Info.plist
中添加支付宝的URL Scheme
。
微信支付
- 在
AndroidManifest.xml
中添加微信的activity
配置。 - 在
Info.plist
中添加微信的URL Scheme
。
Apple Pay
- 在
Xcode
中启用Apple Pay
功能,并配置Merchant ID
。
3. 初始化支付插件
在你的 Flutter 项目中,初始化 midpayment
插件。
import 'package:midpayment/midpayment.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化支付插件
await Midpayment.initialize(
alipayScheme: 'your_alipay_scheme', // 支付宝的 URL Scheme
wechatAppId: 'your_wechat_app_id', // 微信的 App ID
);
runApp(MyApp());
}
4. 发起支付请求
使用 midpayment
插件发起支付请求。
void payWithAlipay() async {
try {
final result = await Midpayment.alipay(
orderInfo: 'your_order_info', // 支付宝订单信息
);
if (result['resultStatus'] == '9000') {
// 支付成功
print('支付成功');
} else {
// 支付失败
print('支付失败: ${result['resultStatus']}');
}
} catch (e) {
print('支付异常: $e');
}
}
void payWithWechat() async {
try {
final result = await Midpayment.wechatPay(
appId: 'your_wechat_app_id', // 微信 App ID
partnerId: 'your_partner_id', // 商户 ID
prepayId: 'your_prepay_id', // 预支付 ID
packageValue: 'Sign=WXPay', // 包名
nonceStr: 'your_nonce_str', // 随机字符串
timeStamp: 'your_timestamp', // 时间戳
sign: 'your_sign', // 签名
);
if (result['errCode'] == '0') {
// 支付成功
print('支付成功');
} else {
// 支付失败
print('支付失败: ${result['errCode']}');
}
} catch (e) {
print('支付异常: $e');
}
}
5. 处理支付回调
支付完成后,midpayment
插件会将支付结果返回到你的应用中。你可以在支付回调中处理支付结果。
void handlePaymentResult(Map<String, dynamic> result) {
if (result['resultStatus'] == '9000') {
// 支付宝支付成功
print('支付宝支付成功');
} else if (result['errCode'] == '0') {
// 微信支付成功
print('微信支付成功');
} else {
// 支付失败
print('支付失败: $result');
}
}
6. 其他支付方式
midpayment
还支持其他支付方式,如 Apple Pay、Google Pay 等。你可以根据需要调用相应的方法。
void payWithApplePay() async {
try {
final result = await Midpayment.applePay(
paymentRequest: 'your_payment_request', // Apple Pay 支付请求
);
if (result['status'] == 'success') {
// 支付成功
print('Apple Pay 支付成功');
} else {
// 支付失败
print('Apple Pay 支付失败');
}
} catch (e) {
print('Apple Pay 支付异常: $e');
}
}