Flutter支付集成插件sdkmidtrans的使用
Flutter支付集成插件sdkmidtrans的使用
midtrans
非官方插件,用于集成Flutter与Midtrans移动SDK。
此插件在Midtrans中以Snap模式运行。
您可以在此 文档 中阅读更多详细信息。
开始使用
要求
- Client-Key:从Midtrans商户账户获取。
- 商户服务器:需要后端实现支持Midtrans移动SDK。您可以查看 商户服务器实现参考,并了解您后端服务器可能需要的API。
完成上述需求后,您需要配置项目:
配置 AndroidManifest.xml
将 AndroidManifest.xml
修改为以下内容:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hello_example" xmlns:tools="http://schemas.android.com/tools">
<application
android:label="hello_example"
android:icon="@mipmap/ic_launcher"
tools:replace="android:label"
android:theme="@style/AppTheme">
.....
</application>
</manifest>
配置 styles.xml
在您的项目中找到 styles.xml
文件,路径为 android/app/src/main/res/values/styles.xml
,并将其修改为以下内容:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 启动时的主题,适用于系统暗模式关闭的情况 -->
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<!-- 设置启动画面背景 -->
<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>
<!-- 普通主题 -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
排错
如果您遇到任何问题,可以打开GitHub上的问题页面或联系我。
常见问题:调试模式运行错误
错误代码如下:
E/AndroidRuntime(28442): java.lang.AssertionError
E/AndroidRuntime(28442): at com.koushikdutta.async.AsyncSSLSocketWrapper.write(AsyncSSLSocketWrapper.java:390)
...
此错误是由Midtrans移动SDK使用的第三方库引起的。解决方法是切换到发布模式或降低Gradle版本至4.0.2及以下。
修改Gradle版本
在文件 android/build.gradle
中进行如下修改:
dependencies {
classpath 'com.android.tools.build:gradle:4.0.2'
.....
}
完整示例代码
以下是一个完整的示例代码,展示如何使用 sdkmidtrans
插件进行支付集成。
示例代码
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:sdkmidtrans/sdkmidtrans.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final sdkmidtrans = SdkMidtrans();
String _platformVersion = 'Unknown';
[@override](/user/override)
void initState() {
super.initState();
// 初始化Midtrans SDK
sdkmidtrans.init(MidtransConfig(
clientKey: 'YOUR_CLIENT_KEY',
merchantBaseUrl: 'https://YOUR_MERCHANT_URL_DOMAIN.com/',
colorTheme: MidtransColorTheme(
lightPrimaryColor: Colors.deepOrange,
darkPrimaryColor: Colors.deepOrange,
secondaryColor: Colors.blueAccent)));
// 设置交易完成回调
sdkmidtrans.setTransactionFinishCallback((result) {
print("Result ${result.status}");
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Midtrans Payment Example'),
),
body: Center(
child: Text('Running on: $_platformVersion\n'),
),
floatingActionButton: FloatingActionButton(
onPressed: () async {
// 创建交易对象并发起支付
await sdkmidtrans.payTransaction(MidtransTransaction(
amount: 40000, // 支付金额
skipCustomer: false, // 是否跳过客户信息
midtransCustomer: MidtransCustomer(
customerIdentifier: "USER01", // 用户标识符
phone: "08991585001", // 用户电话
lastName: "Mas", // 用户姓氏
firstName: "Wend", // 用户名字
email: 'maswend.2020@gmail.com', // 用户邮箱
billingAddress: MidtransCustomerAddress(
address: "Indramayu", // 地址
city: "Indramayu", // 城市
postalCode: "45271")), // 邮政编码
items: [
MidtransItem(
id: 'id-10', price: 10000, quantity: 1, name: 'Pembayaran'), // 商品信息
],
));
},
),
),
);
}
}
更多关于Flutter支付集成插件sdkmidtrans的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件sdkmidtrans的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
midtrans
是一个流行的支付网关,支持多种支付方式,如信用卡、银行转账、电子钱包等。在 Flutter 应用中集成 midtrans
支付功能,可以使用 sdkmidtrans
插件。以下是如何在 Flutter 项目中使用 sdkmidtrans
插件的步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 sdkmidtrans
插件的依赖:
dependencies:
flutter:
sdk: flutter
sdkmidtrans: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 配置 Midtrans
在 Midtrans
官网注册并获取你的 Client Key
和 Server Key
。你需要在 Flutter 项目中配置这些密钥。
3. 初始化 Midtrans
在你的 Flutter 项目中,初始化 Midtrans
SDK。通常可以在 main.dart
或某个初始化文件中进行:
import 'package:sdkmidtrans/sdkmidtrans.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 Midtrans
Midtrans.instance.initialize(
clientKey: 'YOUR_CLIENT_KEY',
merchantBaseUrl: 'YOUR_MERCHANT_BASE_URL',
environment: MidtransEnvironment.sandbox, // 使用 sandbox 或 production
);
runApp(MyApp());
}
4. 创建支付请求
在需要支付的地方,创建一个支付请求。你可以使用 MidtransTransactionDetails
来设置交易详情:
import 'package:sdkmidtrans/sdkmidtrans.dart';
void startPayment() async {
var transactionDetails = MidtransTransactionDetails(
orderId: 'ORDER_ID_123',
grossAmount: 10000, // 金额
);
var itemDetails = [
MidtransItemDetails(
id: 'ITEM_ID_1',
price: 10000,
quantity: 1,
name: 'Product Name',
),
];
var customerDetails = MidtransCustomerDetails(
firstName: 'John',
lastName: 'Doe',
email: 'john.doe@example.com',
phone: '081234567890',
);
try {
var result = await Midtrans.instance.startPayment(
transactionDetails: transactionDetails,
itemDetails: itemDetails,
customerDetails: customerDetails,
);
if (result.status == MidtransPaymentStatus.success) {
print('Payment Success: ${result.transactionId}');
} else {
print('Payment Failed: ${result.message}');
}
} catch (e) {
print('Error: $e');
}
}