Flutter支付集成插件midtrans_sdk的使用

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

Flutter支付集成插件midtrans_sdk的使用

midtrans_sdk

这是一个用于Flutter的Midtrans移动SDK插件。访问 Midtrans官网 获取更多信息。

pub package


支持的平台

  • ✅ Android
  • ✅ iOS
  • ❌ Web

使用方法

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


入门指南

请参阅 示例目录 了解如何使用 midtrans_sdk 开始支付的示例。

Android

Midtrans SDK UIKit 需要 Appcompat 来打开支付UI流屏幕。

  1. 打开 styles.xml 文件并添加 AppTheme 样式:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
</style>
  1. 打开 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

1 回复

更多关于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项目中,按照以下步骤进行集成:

  1. 配置Android和iOS支付环境

    • Android:在android/app/src/main/AndroidManifest.xml中添加必要的权限和网络配置。
    • iOS:在ios/Runner/Info.plist中添加必要的配置,并确保你的Apple Developer账号已配置好支付证书。
  2. 初始化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');
    }
  }
}
  1. 处理支付回调

    在实际应用中,你可能需要处理支付完成后的回调,以便更新订单状态。这通常涉及到在你的服务器端设置一个webhook来处理Midtrans的支付通知。

  2. 注意事项

    • 确保你已经在Midtrans后台配置了正确的客户端密钥和服务器密钥。
    • 在生产环境中使用production环境,并测试所有支付流程以确保其正常工作。
    • 处理用户隐私和数据安全,确保支付信息的安全传输和存储。

以上代码提供了一个基本的集成框架,你可以根据实际需求进行扩展和修改。确保在实际部署前进行充分的测试,并遵循Midtrans的官方文档和最佳实践。

回到顶部