Flutter支付插件midtrans_sdk_v4的使用

Flutter支付插件midtrans_sdk_v4的使用

midtrans_sdk_v4

一个用于 Midtrans Mobile SDK 的 Flutter 插件。访问 https://midtrans.com

pub package


支持的平台

  • ✅ Android
  • ✅ iOS
  • ❌ Web

使用方法

要使用此插件,在你的 pubspec.yaml 文件中添加 midtrans_sdk 作为依赖项。


开始使用

查看示例目录以了解如何使用 snap token 开始支付。


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 实例,然后使用任何其他功能。MidtransSDK 接收一个 MidtransConfig 对象。这是你可以配置 MidtransSDK 实例并连接到你的 Midtrans 账户的方式。

示例:

import 'package:midtrans_sdk_v4/midtrans_sdk_v4.dart';

var config = MidtransConfig(
  clientKey: DotEnv.env['MIDTRANS_CLIENT_KEY'] ?? "",
  merchantBaseUrl: DotEnv.env['MIDTRANS_MERCHANT_BASE_URL'] ?? "",
  colorTheme: ColorTheme(
    colorPrimary: Theme.of(context).accentColor,
    colorPrimaryDark: Theme.of(context).accentColor,
    colorSecondary: Theme.of(context).accentColor,
  ),
);

初始化SDK

下一步是调用 init 方法,该方法需要 MidtransConfig 对象参数 config。在调用 init 之后,我们可以使用 Midtrans SDK 的所有功能。初始化 SDK 以启用 Midtrans 开始支付。

MidtransSDK.init(
    config: config,
);

开始支付

支付方法屏幕

midtrans_sdk 的默认模式是显示支付方法屏幕。此屏幕将显示你所有可用的支付方法。你可以在 MAP 中通过 Snap Preferences 启用或禁用支付方法。

使用snap token开始支付

我们提供了 SDK 方法,允许你通过传递 snap token 作为 startPaymentUiFlow 方法的参数来使用 snap token 进行支付,而无需首先初始化交易请求。

示例代码:

import 'package:flutter/material.dart';

import 'package:midtrans_sdk_v4/midtrans_sdk_v4.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](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  MidtransSDK? _midtrans;

  [@override](/user/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](/user/override)
  void dispose() {
    _midtrans?.removeTransactionFinishedCallback();
    super.dispose();
  }

  [@override](/user/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'],
              );
            },
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


midtrans_sdk_v4 是一个用于 Flutter 的第三方插件,用于集成 Midtrans 支付网关。Midtrans 是一个印度尼西亚的支付网关,支持多种支付方式,如信用卡、网银转账、电子钱包等。

以下是使用 midtrans_sdk_v4 插件进行支付集成的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 midtrans_sdk_v4 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  midtrans_sdk_v4: ^1.0.0  # 请检查最新版本

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

2. 初始化 Midtrans SDK

在使用 Midtrans SDK 之前,需要先初始化它。通常会在 main.dart 中或某个初始化函数中进行初始化。

import 'package:midtrans_sdk_v4/midtrans_sdk_v4.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Midtrans SDK
  await MidtransSdk.init(
    config: MidtransConfig(
      clientKey: 'YOUR_CLIENT_KEY',
      merchantBaseUrl: 'YOUR_MERCHANT_BASE_URL',
      colorTheme: ColorTheme(
        colorPrimary: Colors.blue,
        colorPrimaryDark: Colors.blue[700],
        colorSecondary: Colors.green,
      ),
    ),
  );
  
  runApp(MyApp());
}
  • clientKey: 从 Midtrans 后台获取的客户端密钥。
  • merchantBaseUrl: 你的服务器端 API 的基本 URL,用于生成支付令牌。
  • colorTheme: 可自定义 UI 的主题颜色。

3. 创建支付订单

在支付之前,你需要创建一个支付订单。通常需要在服务器端生成支付令牌,然后传递给客户端。

String transactionToken = await generateTransactionToken();

generateTransactionToken() 是一个示例函数,你需要在服务器端实现它,调用 Midtrans 的 API 生成支付令牌。

4. 发起支付

使用生成的支付令牌发起支付:

import 'package:midtrans_sdk_v4/midtrans_sdk_v4.dart';

Future<void> startPayment() async {
  try {
    final response = await MidtransSdk.startPaymentUiFlow(
      token: transactionToken,
    );

    // 处理支付结果
    if (response.status == PaymentStatus.success) {
      print('Payment Success');
    } else if (response.status == PaymentStatus.pending) {
      print('Payment Pending');
    } else if (response.status == PaymentStatus.failed) {
      print('Payment Failed');
    } else if (response.status == PaymentStatus.canceled) {
      print('Payment Canceled');
    }
  } catch (e) {
    print('Error: $e');
  }
}

5. 处理支付结果

支付结果会通过 PaymentStatus 返回,你可以根据状态来处理不同的支付结果。

  • success: 支付成功。
  • pending: 支付待处理。
  • failed: 支付失败。
  • canceled: 支付取消。

6. 清理资源

在应用退出或不再需要支付功能时,可以清理 Midtrans SDK 的资源:

void dispose() {
  MidtransSdk.dispose();
}
回到顶部