Flutter支付集成插件sdkmidtrans的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

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

1 回复

更多关于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 KeyServer 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');
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!