Flutter支付集成插件midpayment的使用

Flutter支付集成插件midpayment的使用

Flutter Midtrans支付插件

请注意在使用此库之前阅读Midtrans文档,并确保您已经拥有Midtrans账户以访问仪表板。

Android设置

仅支持AndroidX且编译目标最低为28

请将以下样式添加到您的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">
        <!-- 在活动上显示一个启动屏幕。自动移除当Flutter绘制其第一帧时 -->
        <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文件的应用程序标签中添加样式:

android:theme="@style/AppTheme"

iOS

无需特定设置

示例用法

请确保您已经准备了这些变量:

  • YOUR_CLIENT_ID: Midtrans客户端ID
  • YOUR_URL_BASE: 处理支付的后端API基础URL

支付

import 'package:midpayment/midpayment.dart';

// 初始化支付参数
var midtransPayParam = MidtransPayParam();
midtransPayParam.clientKey = "="; // 替换为您的客户端密钥
midtransPayParam.merchantBaseUrl = ""; // 替换为您的商户基础URL
midtransPayParam.totalPrice = 0; // 替换为您要支付的金额
midtransPayParam.orderId = ""; // 替换为订单ID
midtransPayParam.selectedPaymentMethod = MidtransPaymentMethod.SHOPEEPAY.index; // 可选

// 执行支付操作
var result = await FlutterMidtransPayment.pay(midtransPayParam);

使用令牌支付

import 'package:midpayment/midpayment.dart';

// 初始化支付参数
var midtransPayParam = MidtransPayWithTokenParam();
midtransPayParam.clientKey = ""; // 替换为您的客户端密钥
midtransPayParam.merchantBaseUrl = ""; // 替换为您的商户基础URL
midtransPayParam.snapToken = ""; // 替换为Snap Token

// 执行支付操作
var result = await FlutterMidtransPayment.payWithToken(midtransPayParam);

完整示例Demo

以下是完整的示例代码:

import 'dart:developer';

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

import 'package:flutter/services.dart';
import 'package:midpayment/midpayment.dart';

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

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

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 异步平台消息初始化
  Future<void> initPlatformState() async {
    log("开始");
    String platformVersion;
    // 平台消息可能失败,因此我们使用try/catch PlatformException。
    try {
      platformVersion = await FlutterMidtransPayment.platformVersion;
    } on PlatformException {
      platformVersion = '无法获取平台版本。';
    }

    // 如果小部件在异步平台消息处于飞行状态时从树中删除,则我们希望丢弃回复而不是调用
    // setState以更新我们的非存在外观。
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Column(
            children: [
              Text('运行于: $_platformVersion\n'),
              ElevatedButton(
                  child: Text('支付'),
                  onPressed: () async {
                    var midtransPayParam = MidtransPayParam();
                    midtransPayParam.clientKey = "="; // 替换为您的客户端密钥
                    midtransPayParam.merchantBaseUrl = ""; // 替换为您的商户基础URL
                    midtransPayParam.totalPrice = 0; // 替换为您要支付的金额
                    midtransPayParam.orderId = ""; // 替换为订单ID
                    midtransPayParam.selectedPaymentMethod = MidtransPaymentMethod.SHOPEEPAY.index; // 可选

                    var result = await FlutterMidtransPayment.pay(midtransPayParam);
                    log(result);
                  }),
              ElevatedButton(
                  child: Text('使用令牌支付'),
                  onPressed: () async {
                    log("开始");
                    var midtransPayParam = MidtransPayWithTokenParam();
                    midtransPayParam.clientKey = "SB-Mid-client-lqSYrzuU0C8KghnG"; // 替换为您的客户端密钥
                    midtransPayParam.merchantBaseUrl = "https://kesan-api.bangun-kreatif.com"; // 替换为您的商户基础URL
                    midtransPayParam.snapToken = "3143c741-3e24-4251-96e5-e5391cd19280"; // 替换为Snap Token

                    try {
                      var result = await FlutterMidtransPayment.payWithToken(midtransPayParam);
                      log('结果');
                      log(result.toString());
                    } catch (err) {
                      log(err.toString());
                    }
                  })
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


midpayment 是一个用于 Flutter 应用集成支付功能的插件。它支持多种支付方式,如支付宝、微信支付、Apple Pay 等。以下是如何在 Flutter 项目中使用 midpayment 插件的基本步骤。

1. 添加依赖

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

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

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

2. 配置支付平台

根据你使用的支付平台,进行相应的配置。

支付宝

  • AndroidManifest.xml 中添加支付宝的 activity 配置。
  • Info.plist 中添加支付宝的 URL Scheme

微信支付

  • AndroidManifest.xml 中添加微信的 activity 配置。
  • Info.plist 中添加微信的 URL Scheme

Apple Pay

  • Xcode 中启用 Apple Pay 功能,并配置 Merchant ID

3. 初始化支付插件

在你的 Flutter 项目中,初始化 midpayment 插件。

import 'package:midpayment/midpayment.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化支付插件
  await Midpayment.initialize(
    alipayScheme: 'your_alipay_scheme', // 支付宝的 URL Scheme
    wechatAppId: 'your_wechat_app_id',  // 微信的 App ID
  );
  
  runApp(MyApp());
}

4. 发起支付请求

使用 midpayment 插件发起支付请求。

void payWithAlipay() async {
  try {
    final result = await Midpayment.alipay(
      orderInfo: 'your_order_info', // 支付宝订单信息
    );
    
    if (result['resultStatus'] == '9000') {
      // 支付成功
      print('支付成功');
    } else {
      // 支付失败
      print('支付失败: ${result['resultStatus']}');
    }
  } catch (e) {
    print('支付异常: $e');
  }
}

void payWithWechat() async {
  try {
    final result = await Midpayment.wechatPay(
      appId: 'your_wechat_app_id', // 微信 App ID
      partnerId: 'your_partner_id', // 商户 ID
      prepayId: 'your_prepay_id', // 预支付 ID
      packageValue: 'Sign=WXPay', // 包名
      nonceStr: 'your_nonce_str', // 随机字符串
      timeStamp: 'your_timestamp', // 时间戳
      sign: 'your_sign', // 签名
    );
    
    if (result['errCode'] == '0') {
      // 支付成功
      print('支付成功');
    } else {
      // 支付失败
      print('支付失败: ${result['errCode']}');
    }
  } catch (e) {
    print('支付异常: $e');
  }
}

5. 处理支付回调

支付完成后,midpayment 插件会将支付结果返回到你的应用中。你可以在支付回调中处理支付结果。

void handlePaymentResult(Map<String, dynamic> result) {
  if (result['resultStatus'] == '9000') {
    // 支付宝支付成功
    print('支付宝支付成功');
  } else if (result['errCode'] == '0') {
    // 微信支付成功
    print('微信支付成功');
  } else {
    // 支付失败
    print('支付失败: $result');
  }
}

6. 其他支付方式

midpayment 还支持其他支付方式,如 Apple Pay、Google Pay 等。你可以根据需要调用相应的方法。

void payWithApplePay() async {
  try {
    final result = await Midpayment.applePay(
      paymentRequest: 'your_payment_request', // Apple Pay 支付请求
    );
    
    if (result['status'] == 'success') {
      // 支付成功
      print('Apple Pay 支付成功');
    } else {
      // 支付失败
      print('Apple Pay 支付失败');
    }
  } catch (e) {
    print('Apple Pay 支付异常: $e');
  }
}
回到顶部