Flutter支付插件mpcheckout的使用

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

Flutter支付插件mpcheckout的使用

mpcheckout

mpcheckout 是一个非官方的 MercadoPago 移动支付插件。

要求

  • Android 最低 SDK 版本为 19
  • iOS 10.0

注意: 目前 iOS 不再受支持,因为 MercadoPago 将 px-ios SDK 仓库设置为了私有模式,我们无法继续使用该 SDK。

如何使用

首先,确保你的项目中已经添加了 mpcheckout 依赖。你可以在 pubspec.yaml 文件中添加以下内容:

dependencies:
  mpcheckout: ^版本号

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

接下来,你可以参考以下完整的示例代码来了解如何使用 mpcheckout 插件。

示例代码

import 'dart:math';

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

import 'cart.dart';

/// [mp] 实例(全局)
late Mpcheckout mp;

void main() {
  // 初始化凭证
  mp = Mpcheckout.initialize(
    clientID: const String.fromEnvironment("CLIENT_ID"),
    publicKey: const String.fromEnvironment("PUBLIC_KEY"),
    accesToken: const String.fromEnvironment("ACCESS_TOKEN"),
  );
  runApp(MaterialApp(home: MyApp()));
}

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

class _MyAppState extends State<MyApp> {
  final List<Item> items = [
    Item(
      title: '测试商品 1',
      quantity: 1,
      unitPrice: 150,
    ),
  ];

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('MercadoPagoSDK'),
        centerTitle: true,
        actions: [
          IconButton(
            onPressed: () => Navigator.push(
              context,
              MaterialPageRoute(
                builder: (_) => CartScreen(
                  items: items,
                ),
              ),
            ),
            icon: Icon(
              Icons.shopping_bag_outlined,
            ),
          )
        ],
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: [
            ...items
                .map(
                  (item) => ListTile(
                    title: Text(item.title! + ' x${item.quantity}个'),
                    trailing: Text('\$${item.unitPrice}'),
                  ),
                )
                .toList(),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(
            () {
              items.add(
                Item(
                  title: '测试商品 ${items.length + 1}',
                  quantity: 1,
                  unitPrice: Random().nextInt(350),
                ),
              );
            },
          );
        },
        child: Icon(Icons.add),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用mpcheckout插件进行支付的代码案例。mpcheckout插件通常用于集成微信或支付宝支付功能。以下示例将展示如何集成和使用微信支付功能。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  mpcheckout: ^最新版本号  # 请替换为最新版本号

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

2. 配置Android和iOS支付信息

Android

android/app/src/main/AndroidManifest.xml中添加必要的权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        ... >
        <!-- 添加微信支付所需的Activity -->
        <activity
            android:name=".wxapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@android:style/Theme.Translucent.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="yourappid" />  <!-- 替换为你的微信应用ID -->
            </intent-filter>
        </activity>
    </application>
</manifest>

然后在android/app/build.gradle中配置签名:

android {
    ...
    signingConfigs {
        release {
            // 配置签名信息
            keyAlias 'your-key-alias'
            keyPassword 'your-key-password'
            storeFile file('your-keystore-path.jks')
            storePassword 'your-store-password'
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            ...
        }
    }
}

iOS

ios/Runner/Info.plist中添加URL Types配置:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>yourappid</string>  <!-- 替换为你的微信应用ID -->
        </array>
    </dict>
</array>

3. 初始化并调用支付

在你的Flutter代码中,初始化并调用支付功能:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter MP Checkout Example'),
        ),
        body: Center(
          child: PaymentButton(),
        ),
      ),
    );
  }
}

class PaymentButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: _startPayment,
      child: Text('Start Payment'),
    );
  }

  void _startPayment() async {
    try {
      // 配置支付参数,这里以微信支付为例
      final paymentConfig = WeChatPayConfig(
        appId: 'your_wechat_app_id',  // 替换为你的微信应用ID
        partnerId: 'your_wechat_mch_id',  // 替换为你的微信支付商户号
        prepayId: 'your_prepay_id',  // 替换为预支付交易会话标识
        nonceStr: 'your_nonce_str',  // 随机字符串
        timeStamp: 'your_timestamp',  // 时间戳
        packageValue: 'Sign=WXPay',  // 固定值
        sign: 'your_sign',  // 签名
      );

      // 调用支付方法
      final result = await MPCheckout.startPayment(
        context: context,
        config: paymentConfig,
      );

      if (result.isSuccess) {
        // 支付成功处理
        print('Payment succeeded');
      } else {
        // 支付失败处理
        print('Payment failed: ${result.message}');
      }
    } catch (e) {
      // 异常处理
      print('Error: $e');
    }
  }
}

注意事项

  1. 安全性:在实际项目中,不要在客户端硬编码敏感信息(如partnerIdprepayId等)。这些信息应该通过安全的服务器端接口获取。
  2. 签名:确保生成的签名是正确的,否则支付会失败。
  3. 平台配置:确保在微信支付商户平台正确配置了应用的包名和支付目录等信息。

通过上述步骤,你应该能够在Flutter项目中成功集成并使用mpcheckout插件进行微信支付。

回到顶部