Flutter支付集成插件midtrans_sdk的使用
Flutter支付集成插件midtrans_sdk的使用
midtrans_sdk
这是一个用于Flutter的Midtrans移动SDK插件。访问 Midtrans官网 获取更多信息。
支持的平台
- ✅ Android
- ✅ iOS
- ❌ Web
使用方法
要使用此插件,请在您的 pubspec.yaml
文件中添加 midtrans_sdk
作为依赖项。
入门指南
请参阅 示例目录 了解如何使用 midtrans_sdk
开始支付的示例。
Android
Midtrans SDK UIKit 需要 Appcompat 来打开支付UI流屏幕。
- 打开
styles.xml
文件并添加AppTheme
样式:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
</style>
- 打开
AndroidManifest.xml
文件并为您的应用程序主题使用AppTheme
样式:
<manifest>
...
<application
android:label="midtrans_sdk_example"
tools:replace="android:label"
android:theme="@style/AppTheme"
>
...
</application>
...
</manifest>
MidtransConfig
要开始使用 Midtrans,您需要首先创建一个 MidtransSDK
实例,然后才能使用我们SDK的其他功能。MidtransSDK
接收一个 MidtransConfig
对象。这是配置 MidtransSDK
实例并将其连接到您的 Midtrans 账户的方法。
示例:
import 'package:midtrans_sdk/midtrans_sdk.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart' as DotEnv;
var config = MidtransConfig(
clientKey: DotEnv.env['MIDTRANS_CLIENT_KEY'] ?? "",
merchantBaseUrl: DotEnv.env['MIDTRANS_MERCHANT_BASE_URL'] ?? "",
colorTheme: ColorTheme(
colorPrimary: Theme.of(context).colorScheme.secondary,
colorPrimaryDark: Theme.of(context).colorScheme.secondary,
colorSecondary: Theme.of(context).colorScheme.secondary,
),
);
初始化SDK
下一步是调用 init
方法,该方法需要一个 MidtransConfig
对象参数 config
。调用 init
后,您可以使用 Midtrans SDK 的所有功能。初始化 SDK 以启用 Midtrans 开始支付。
MidtransSDK.init(
config: config,
);
开始支付
显示支付方法屏幕
midtrans_sdk
的默认模式是显示支付方法屏幕。此屏幕将显示您所有可用的支付方法。您可以通过 Snap Preferences 在 MAP 中启用/禁用支付方法。
使用snap token开始支付
我们提供了一个SDK方法,允许您使用 snap token 进行支付,而无需先初始化交易请求。您只需将 snap token 作为 startPaymentUiFlow
方法的参数传递即可。
示例代码
以下是一个完整的示例代码,展示了如何在Flutter应用中使用 midtrans_sdk
插件进行支付。
import 'package:flutter/material.dart';
import 'package:midtrans_sdk/midtrans_sdk.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart' as DotEnv;
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await DotEnv.load();
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
MidtransSDK? _midtrans;
@override
void initState() {
super.initState();
initSDK();
}
void initSDK() async {
_midtrans = await MidtransSDK.init(
config: MidtransConfig(
clientKey: DotEnv.env['MIDTRANS_CLIENT_KEY'] ?? "",
merchantBaseUrl: DotEnv.env['MIDTRANS_MERCHANT_BASE_URL'] ?? "",
colorTheme: ColorTheme(
colorPrimary: Theme.of(context).colorScheme.secondary,
colorPrimaryDark: Theme.of(context).colorScheme.secondary,
colorSecondary: Theme.of(context).colorScheme.secondary,
),
),
);
_midtrans?.setUIKitCustomSetting(
skipCustomerDetailsPages: true,
);
_midtrans!.setTransactionFinishedCallback((result) {
print(result.toJson());
});
}
@override
void dispose() {
_midtrans?.removeTransactionFinishedCallback();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: ElevatedButton(
child: Text("Pay Now"),
onPressed: () async {
_midtrans?.startPaymentUiFlow(
token: DotEnv.env['SNAP_TOKEN'],
);
},
),
),
),
);
}
}
在这个示例中,我们首先加载了环境变量,然后初始化了 MidtransSDK
,设置了自定义UI设置,并注册了交易完成回调。最后,我们在界面上添加了一个按钮,点击该按钮将启动支付流程。
更多关于Flutter支付集成插件midtrans_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件midtrans_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中集成Midtrans支付插件midtrans_sdk
可以大大简化支付流程的实现。以下是一个基本的代码案例,展示如何在Flutter中使用midtrans_sdk
插件进行支付集成。
首先,确保你已经在pubspec.yaml
文件中添加了midtrans_sdk
依赖:
dependencies:
flutter:
sdk: flutter
midtrans_sdk: ^最新版本号 # 请替换为实际最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,按照以下步骤进行集成:
-
配置Android和iOS支付环境:
- Android:在
android/app/src/main/AndroidManifest.xml
中添加必要的权限和网络配置。 - iOS:在
ios/Runner/Info.plist
中添加必要的配置,并确保你的Apple Developer账号已配置好支付证书。
- Android:在
-
初始化Midtrans SDK:
在你的主文件(如
main.dart
)中,首先导入midtrans_sdk
包,并进行初始化。
import 'package:flutter/material.dart';
import 'package:midtrans_sdk/midtrans_sdk.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Midtrans Payment Integration'),
),
body: Center(
child: ElevatedButton(
onPressed: _initiatePayment,
child: Text('Initiate Payment'),
),
),
),
);
}
Future<void> _initiatePayment() async {
// 替换为你的Midtrans客户端密钥、环境(sandbox或production)和支付参数
String clientKey = 'your_client_key_here';
String environment = 'sandbox'; // 或 'production'
// 创建支付请求数据
Map<String, dynamic> transactionDetails = {
'amount': 100000, // 支付金额,单位印尼卢比(Rupiah)
'currency': 'IDR',
'order_id': 'order_${DateTime.now().millisecondsSinceEpoch}', // 订单ID,唯一标识
'gross_amount': 100000, // 总金额,单位印尼卢比(Rupiah)
'payment_type': 'credit_card', // 支付类型,可以是 'credit_card', 'bank_transfer', 'gopay', 等
'customer_details': {
'first_name': 'John',
'last_name': 'Doe',
'email': 'john.doe@example.com',
'phone': '+6281234567890',
},
// 其他必要的支付细节
};
try {
// 发起支付请求
MidtransResponse response = await MidtransSdk.startPayment(
clientKey: clientKey,
environment: environment,
transactionDetails: transactionDetails,
);
// 处理支付结果
if (response.statusCode == 200 || response.statusCode == 201) {
// 支付成功或待确认
print('Payment successful or pending: ${response.data}');
} else {
// 支付失败
print('Payment failed: ${response.message}');
}
} catch (e) {
// 处理异常
print('Error initiating payment: $e');
}
}
}
-
处理支付回调:
在实际应用中,你可能需要处理支付完成后的回调,以便更新订单状态。这通常涉及到在你的服务器端设置一个webhook来处理Midtrans的支付通知。
-
注意事项:
- 确保你已经在Midtrans后台配置了正确的客户端密钥和服务器密钥。
- 在生产环境中使用
production
环境,并测试所有支付流程以确保其正常工作。 - 处理用户隐私和数据安全,确保支付信息的安全传输和存储。
以上代码提供了一个基本的集成框架,你可以根据实际需求进行扩展和修改。确保在实际部署前进行充分的测试,并遵循Midtrans的官方文档和最佳实践。