Flutter支付处理插件midtranz的使用

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

Flutter支付处理插件midtrans的使用

midtrans是一个非官方插件,用于在Flutter应用中集成Midtrans移动SDK。该插件在Midtrans的snap模式下运行。您可以在此文档中阅读更多详细信息。

开始使用

要求

  • 客户端密钥:从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上的issue或联系作者。

错误调试

在调试模式下运行时出现错误

错误代码类似如下:

E/AndroidRuntime(28442): java.lang.AssertionError
E/AndroidRuntime(28442): 	at com.koushikdutta.async.AsyncSSLSocketWrapper.write(AsyncSSLSocketWrapper.java:390)
E/AndroidRuntime(28442): 	at com.koushikdutta.async.AsyncSSLSocketWrapper.handleHandshakeStatus(AsyncSSLSocketWrapper.java:276)
E/AndroidRuntime(28442): 	at com.koushikdutta.async.AsyncSSLSocketWrapper.handshake(AsyncSSLSocketWrapper.java:114)
...

此错误可能是由于Midtrans移动SDK使用的第三方库导致的。解决方法是在发布模式下运行,或者将Gradle版本降低到4.0.2或更低。

修改Gradle版本

android/build.gradle 文件中修改Gradle版本为4.0.2:

dependencies {
        classpath 'com.android.tools.build:gradle:4.0.2'
        .....
}

完整示例

以下是一个完整的示例代码,展示如何使用Flutter插件 midtranz 进行支付处理。

示例代码

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:midtranz/midtranz.dart'; // 导入midtranz插件

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final midtrans = Midtrans(); // 初始化Midtrans实例
  String _platformVersion = 'Unknown'; // 平台版本

  [@override](/user/override)
  void initState() {
    super.initState();
    midtrans.init(MidtransConfig( // 初始化Midtrans配置
        clientKey: 'YOUR_CLIENT_KEY', // 替换为您的客户端密钥
        merchantBaseUrl: 'https://YOUR_MERCHANT_URL_DOMAIN.com/', // 替换为您的商户URL
        colorTheme: MidtransColorTheme( // 自定义颜色主题
            lightPrimaryColor: Colors.deepOrange,
            darkPrimaryColor: Colors.deepOrange,
            secondaryColor: Colors.blueAccent)));
    midtrans.setTransactionFinishCallback((result) { // 设置交易完成回调
      print("Result ${result.status}"); // 打印交易结果状态
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Flutter Midtrans 示例'), // 设置应用标题
        ),
        body: Center(
          child: Text('运行环境: $_platformVersion\n'), // 显示平台版本
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () async { // 支付按钮点击事件
            await midtrans.payTransaction(MidtransTransaction( // 发起支付交易
              amount: 40000, // 支付金额
              skipCustomer: false, // 是否跳过客户信息
              midtransCustomer: MidtransCustomer( // 客户信息
                  customerIdentifier: "USER01", // 用户标识
                  phone: "089689008988", // 用户电话
                  lastName: "Hanif", // 用户姓氏
                  firstName: "Ibrahim", // 用户名字
                  email: 'email@mail.com', // 用户邮箱
                  billingAddress: MidtransCustomerAddress( // 账单地址
                      address: "Losari Kidul",
                      city: "Cirebon",
                      postalCode: "45192"),
                  shippingAddress: MidtransCustomerAddress( // 发货地址
                      address: "Losari Kidul",
                      city: "Cirebon",
                      postalCode: "45192")),
              items: [ // 商品列表
                MidtransItem(
                    id: '123456', price: 10000, quantity: 1, name: 'GoPayment') // 商品详情
              ],
            ));
          },
        ),
      ),
    );
  }
}

更多关于Flutter支付处理插件midtranz的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter支付处理插件midtranz的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


Midtrans 是一个流行的支付网关,支持多种支付方式,包括信用卡、银行转账、电子钱包等。在 Flutter 应用中,你可以使用 midtranz 插件来处理支付。midtranz 是一个 Flutter 插件,用于与 Midtrans 支付网关进行集成。

以下是如何在 Flutter 项目中使用 midtranz 插件的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 midtranz 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  midtranz: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 初始化 Midtrans

在你的 Flutter 应用中,首先需要初始化 Midtrans。你可以在 main.dart 或任何其他合适的地方进行初始化。

import 'package:midtranz/midtranz.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Midtrans
  Midtranz.initialize(
    clientKey: 'YOUR_CLIENT_KEY',
    merchantBaseUrl: 'YOUR_MERCHANT_BASE_URL',
    environment: MidtranzEnvironment.sandbox, // 使用沙盒环境进行测试
  );

  runApp(MyApp());
}

3. 创建支付请求

接下来,你可以创建一个支付请求。你可以使用 MidtranzTransaction 类来定义支付请求的参数。

import 'package:midtranz/midtranz.dart';

void initiatePayment() async {
  var transaction = MidtranzTransaction(
    transactionDetails: TransactionDetails(
      orderId: 'ORDER_ID_123',
      grossAmount: 10000, // 金额(以最小单位表示,例如印尼盾的 rupiah)
    ),
    customerDetails: CustomerDetails(
      firstName: 'John',
      lastName: 'Doe',
      email: 'john.doe@example.com',
      phone: '081234567890',
    ),
    itemDetails: [
      ItemDetails(
        id: 'ITEM_ID_1',
        price: 10000,
        quantity: 1,
        name: 'Product Name',
      ),
    ],
  );

  try {
    var result = await Midtranz.startPayment(transaction);
    print('Payment Result: $result');
  } catch (e) {
    print('Payment Error: $e');
  }
}

4. 处理支付结果

Midtranz.startPayment 方法会返回一个 Map<String, dynamic>,其中包含支付结果。你可以根据返回的结果来处理支付成功或失败的情况。

void handlePaymentResult(Map<String, dynamic> result) {
  if (result['status'] == 'success') {
    print('Payment Successful: ${result['transaction_id']}');
  } else {
    print('Payment Failed: ${result['message']}');
  }
}

5. 运行支付流程

你可以在按钮点击事件或其他用户交互中调用 initiatePayment 方法来启动支付流程。

ElevatedButton(
  onPressed: initiatePayment,
  child: Text('Pay Now'),
),

6. 处理回调

Midtrans 支付完成后,可能会回调你的服务器或应用。你需要在你的服务器上处理这些回调,并更新订单状态。

7. 测试与发布

在开发阶段,你可以使用 Midtrans 的沙盒环境进行测试。确保在生产环境中切换到生产环境,并使用真实的 clientKeymerchantBaseUrl

Midtranz.initialize(
  clientKey: 'YOUR_PRODUCTION_CLIENT_KEY',
  merchantBaseUrl: 'YOUR_PRODUCTION_MERCHANT_BASE_URL',
  environment: MidtranzEnvironment.production,
);

8. 处理错误

在支付过程中,可能会遇到各种错误。确保你捕获并处理这些错误,以提供更好的用户体验。

try {
  var result = await Midtranz.startPayment(transaction);
  handlePaymentResult(result);
} catch (e) {
  print('Payment Error: $e');
  // 显示错误信息给用户
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!