Flutter支付集成插件midpay的使用

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

Flutter支付集成插件midpay的使用

Midtrans Payment Gateway for Flutter

pub package Follow on Twitter

平台支持

平台 Android iOS MacOS Web Linux Windows
支持情况 ✔️ ✔️

Android 设置

android/app/src/main/res/values/styles.xml 中添加样式:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

完整的 styles.xml 文件如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <!-- Show a splash screen on the activity. Automatically removed when
             Flutter draws its first frame -->
        <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>
</resources>

AndroidManifest.xml 中的应用程序标签中添加样式:

tools:replace="android:label"
android:theme="@style/AppTheme"

iOS 设置

无需特定设置。

BASE_URL

请参考 Midtrans 官方文档商户服务器 GitHub 示例 获取更多信息。

示例代码

以下是一个完整的示例,展示了如何在Flutter应用中使用 midpay 插件进行支付集成:

main.dart

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

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final midpay = Midpay();

  // 测试支付
  _testPayment() async {
    // 对于Android,在调试时自动使用沙箱环境,在发布时使用生产环境
    midpay.init("CLIENT KEY", "BASE_URL", environment: Environment.sandbox);
    midpay.setFinishCallback(_callback);

    var midtransCustomer = MidtransCustomer(
        'Zaki', 'Mubarok', 'kakzaki@gmail.com', '085704703691');

    List<MidtransItem> listitems = [];
    var midtransItems = MidtransItem('IDXXX', 50000, 2, 'Charger');
    listitems.add(midtransItems);

    var midtransTransaction = MidtransTransaction(
        100000, midtransCustomer, listitems,
        skipCustomer: true);

    await midpay.makePayment(midtransTransaction).catchError((err) {
      print("ERROR $err");
    });
  }

  // 回调函数
  Future<void> _callback(TransactionFinished finished) async {
    print("Finish $finished");
    return Future.value(null);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Midpay Plugin example app'),
        ),
        body: Center(
          child: ElevatedButton(
            child: Text("Payment"),
            onPressed: () => _testPayment(),
          ),
        ),
      ),
    );
  }
}

使用说明

  1. 初始化:通过 midpay.init() 方法初始化 midpay 插件,并设置您的客户端密钥、基础URL和环境(沙箱或生产)。
  2. 设置回调:使用 midpay.setFinishCallback() 方法设置支付完成后的回调函数。
  3. 创建客户信息:使用 MidtransCustomer 类创建客户对象。
  4. 创建商品列表:使用 MidtransItem 类创建商品对象,并将其添加到商品列表中。
  5. 创建交易对象:使用 MidtransTransaction 类创建交易对象。
  6. 发起支付请求:调用 midpay.makePayment() 方法发起支付请求。
  7. 处理回调:在回调函数中处理支付结果。

通过以上步骤,您可以在Flutter应用中集成Midtrans支付网关。希望这个示例能帮助您快速上手并成功实现支付功能。如果有任何问题,请随时提问!


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

1 回复

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


在Flutter项目中集成支付插件 midpay 通常涉及以下几个步骤:添加依赖、配置项目、实现支付功能。以下是一个基本的代码示例,展示如何在Flutter项目中集成并使用 midpay 插件。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  midpay: ^最新版本号  # 请替换为实际最新版本号

然后运行 flutter pub get 来获取依赖。

2. 配置项目

确保你已经按照 midpay 插件的官方文档配置了必要的支付平台(如微信支付、支付宝支付等)的密钥和配置信息。这通常需要在你的原生代码(iOS 和 Android)中进行配置。

iOS 配置

ios/Runner/Info.plist 中添加必要的配置,例如微信支付或支付宝支付的相关信息。

Android 配置

android/app/build.gradle 中添加必要的配置,如支付密钥和包名等。

3. 实现支付功能

在你的 Flutter 项目中,你可以使用 midpay 插件提供的 API 来实现支付功能。以下是一个简单的示例,展示如何初始化支付并处理支付结果。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: PaymentScreen(),
    );
  }
}

class PaymentScreen extends StatefulWidget {
  @override
  _PaymentScreenState createState() => _PaymentScreenState();
}

class _PaymentScreenState extends State<PaymentScreen> {
  final Midpay midpay = Midpay();

  void _initiatePayment() async {
    try {
      // 替换为你的实际支付参数
      var paymentParams = {
        "method": "WECHAT", // 或 "ALIPAY" 等
        "orderId": "your_order_id",
        "amount": "1.00",
        "currency": "CNY",
        // 其他必要的参数,根据midpay文档添加
      };

      var result = await midpay.pay(paymentParams);
      if (result["status"] == "SUCCESS") {
        // 支付成功处理
        print("支付成功: ${result}");
      } else {
        // 支付失败处理
        print("支付失败: ${result}");
      }
    } catch (e) {
      // 异常处理
      print("支付过程中发生错误: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('支付示例'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _initiatePayment,
          child: Text('发起支付'),
        ),
      ),
    );
  }
}

注意事项

  1. 支付参数:确保你提供的支付参数符合 midpay 插件和支付平台的要求。
  2. 错误处理:在实际应用中,你需要更完善的错误处理机制来应对各种可能的异常情况。
  3. 平台特定配置:务必按照 midpay 插件的官方文档,在 iOS 和 Android 项目中进行必要的配置。

上述代码只是一个基本的示例,用于展示如何在 Flutter 项目中集成和使用 midpay 插件。根据你的具体需求,你可能需要调整支付参数和处理逻辑。

回到顶部