Flutter支付功能插件payme_sdk_flutter的使用

Flutter支付功能插件payme_sdk_flutter的使用

PayME SDK Flutter 是一个用于将应用与PayME平台集成的插件。

开始使用

本项目是一个Flutter插件包的起点,包含Android和/或iOS的特定平台实现代码。

如果你需要开始使用Flutter,可以查看官方文档,其中包括教程、示例、移动开发指南以及完整的API引用。

Android

  • 设置minSdk版本至少为21。
  • 修改MainActivity类,继承自FlutterFragmentActivity

iOS

  • 确保iOS版本大于等于11。
  • plist文件中添加NSContactsUsageDescription

完整示例Demo

以下是使用payme_sdk_flutter插件的完整示例代码:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:payme_sdk_flutter/payme_sdk_flutter.dart';
import 'package:payme_sdk_flutter_example/row_input.dart';

void main() {
  runApp(MaterialApp(home: MyApp()));
}

// 提供默认的沙盒环境参数
const APP_TOKEN_DEFAULT_SANDBOX = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBJZCI6MTQsImlhdCI6MTYxNDE2NDI3MH0.MmzNL81YTx8XyTu6SczAqZtnCA_ALsn9GHsJGBKJSIk";
const PUBLIC_KEY_DEFAULT_SANDBOX = "-----BEGIN PUBLIC KEY-----\n" +
    "      MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMyTFdiYBiaSIBgqFdxSgzk5LYXKocgT\n" +
    "      MCx/g1gz9k2jadJ1PDohCs7N65+dh/0dTbT8CIvXrrlAgQT1zitpMPECAwEAAQ==\n" +
    "      -----END PUBLIC KEY-----";
const SECRET_KEY_DEFAULT_SANDBOX = "de7bbe6566b0f1c38898b7751b057a94";
const PRIVATE_KEY_DEFAULT_SANDBOX = "-----BEGIN RSA PRIVATE KEY-----\n" +
    "      MIIBOQIBAAJAZCKupmrF4laDA7mzlQoxSYlQApMzY7EtyAvSZhJs1NeW5dyoc0XL\n" +
    "      yM+/Uxuh1bAWgcMLh3/0Tl1J7udJGTWdkQIDAQABAkAjzvM9t7kD84PudR3vEjIF\n" +
    "      5gCiqxkZcWa5vuCCd9xLUEkdxyvcaLWZEqAjCmF0V3tygvg8EVgZvdD0apgngmAB\n" +
    "      AiEAvTF57hIp2hkf7WJnueuZNY4zhxn7QNi3CQlGwrjOqRECIQCHfqO53A5rvxCA\n" +
    "      ILzx7yXHzk6wnMcGnkNu4b5GH8usgQIhAKwv4WbZRRnoD/S+wOSnFfN2DlOBQ/jK\n" +
    "      xBsHRE1oYT3hAiBSfLx8OAXnfogzGLsupqLfgy/QwYFA/DSdWn0V/+FlAQIgEUXd\n" +
    "      A8pNN3/HewlpwTGfoNE8zCupzYQrYZ3ld8XPGeQ=\n" +
    "      -----END RSA PRIVATE KEY-----";

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

class _MyAppState extends State<MyApp> {
  String _accountStatus = '未连接。请先登录';
  PaymeSdkFlutterPayCode _payCode = PaymeSdkFlutterPayCode.PAYME;
  TextEditingController _userIdController = TextEditingController();
  TextEditingController _phoneController = TextEditingController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    final sdkArgs = PaymeSdkFlutterConfig(
      appToken: APP_TOKEN_DEFAULT_SANDBOX,
      publicKey: PUBLIC_KEY_DEFAULT_SANDBOX,
      privateKey: PRIVATE_KEY_DEFAULT_SANDBOX,
      secretKey: SECRET_KEY_DEFAULT_SANDBOX,
    );
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('PayME SDK 示例'),
        ),
        body: GestureDetector(
          behavior: HitTestBehavior.translucent,
          onTap: () {
            print('aaaaa');
            FocusManager.instance.primaryFocus?.unfocus();
          },
          child: Center(
            child: Column(
              children: [
                Padding(
                  padding: const EdgeInsets.all(10.0),
                  child: Text(_accountStatus),
                ),
                _buildTextField('用户ID', _userIdController),
                _buildTextField('电话', _phoneController),
                Container(
                  width: double.infinity,
                  child: Row(
                    mainAxisSize: MainAxisSize.max,
                    children: [
                      _buildButton(() async {
                        try {
                          final status = await PaymeSdkFlutter.login(
                              _userIdController.text,
                              _phoneController.text,
                              sdkArgs);
                          setState(() {
                            _accountStatus = status.toString();
                          });
                          print(status);
                        } catch (e) {
                          print(e);
                        }
                      }, '登录'),
                      _buildButton(() async {
                        try {
                          await PaymeSdkFlutter.logout();
                          setState(() {
                            _accountStatus = '未连接。请先登录';
                          });
                        } catch (e) {
                          print(e);
                        }
                      }, '登出'),
                    ],
                  ),
                ),
                Expanded(
                  child: ListView(
                    children: [
                      _buildDropdown(),
                      _buildButton(() {
                        PaymeSdkFlutter.openWallet();
                      }, '打开钱包'),
                      _buildButton(() async {
                        try {
                          await PaymeSdkFlutter.openKYC();
                        } on PlatformException catch (e) {
                          showAlertDialog(context,
                              content: e.message ?? '发生错误');
                        }
                      }, '打开KYC'),
                      RowFunction(
                        placeholder: '存款金额',
                        onPress: (value) async {
                          if (value.isEmpty) {
                            return;
                          }
                          try {
                            final response = await PaymeSdkFlutter.deposit(
                                amount: int.parse(value));
                            print(response);
                          } on PlatformException catch (e) {
                            print(e);
                            showAlertDialog(context,
                                title: '错误',
                                content: e.message ?? '发生错误');
                          }
                        },
                        text: '存款',
                      ),
                      RowFunction(
                        placeholder: '取款金额',
                        onPress: (value) async {
                          if (value.isEmpty) {
                            return;
                          }
                          try {
                            final response = await PaymeSdkFlutter.withdraw(
                                amount: int.parse(value));
                            print(response);
                          } on PlatformException catch (e) {
                            print(e);
                            showAlertDialog(context,
                                title: '错误',
                                content: e.message ?? '发生错误');
                          }
                        },
                        text: '取款',
                      ),
                      RowFunction(
                        placeholder: '转账金额',
                        onPress: (value) async {
                          if (value.isEmpty) {
                            return;
                          }
                          try {
                            final response = await PaymeSdkFlutter.transfer(
                                amount: int.parse(value));
                            print(response);
                          } on PlatformException catch (e) {
                            print(e);
                            showAlertDialog(context,
                                title: '错误',
                                content: e.message ?? '发生错误');
                          }
                        },
                        text: '转账',
                      ),
                      RowFunction(
                        placeholder: '支付金额',
                        onPress: (value) async {
                          if (value.isEmpty) {
                            return;
                          }
                          try {
                            final response = await PaymeSdkFlutter.pay(
                                int.parse(value),
                                DateTime.now()
                                    .millisecondsSinceEpoch
                                    .toString(),
                                _payCode,
                                storeId: '10581207');
                            print(response);
                          } on PlatformException catch (e) {
                            print(e);
                            if (e.code != 'USER_CANCELLED') {
                              showAlertDialog(context,
                                  title: '错误',
                                  content: e.message ?? '发生错误');
                            }
                          }
                        },
                        text: '支付',
                      ),
                      _buildButton(() async {
                        try {
                          final response =
                              await PaymeSdkFlutter.getSupportedServices();
                          showAlertDialog(context,
                              title: '获取服务列表成功',
                              content: response.toString());
                        } on PlatformException catch (e) {
                          showAlertDialog(context,
                              content: e.message ?? '发生错误');
                        }
                      }, '获取服务列表'),
                    ],
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }

  Widget _buildButton(VoidCallback onPress, String text) {
    return Padding(
      padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 18),
      child: Container(
          height: 40,
          child: ElevatedButton(
            style: ButtonStyle(
                foregroundColor: MaterialStateProperty.all<Color>(Colors.white),
                backgroundColor: MaterialStateProperty.all<Color>(Colors.blue),
                shape: MaterialStateProperty.all<RoundedRectangleBorder>(
                    RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(20.0),
                ))),
            onPressed: onPress,
            child: Text(text),
          )),
    );
  }

  Widget _buildTextField(String placeholder, TextEditingController controller) {
    return Padding(
      padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 16),
      child: TextField(
        controller: controller,
        decoration: InputDecoration(
          contentPadding: const EdgeInsets.symmetric(horizontal: 20),
          border: OutlineInputBorder(
            borderRadius: BorderRadius.circular(26.0),
          ),
          hintText: placeholder,
        ),
      ),
    );
  }

  Widget _buildDropdown() {
    return Padding(
      padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 16),
      child: Row(
        children: [
          Padding(
            padding: const EdgeInsets.fromLTRB(0, 0, 20, 0),
            child: Text('选择PAYCODE: '),
          ),
          Container(
            height: 40,
            decoration: BoxDecoration(
                color: Colors.black12, borderRadius: BorderRadius.circular(30)),
            child: DropdownButton<PaymeSdkFlutterPayCode>(
              value: _payCode,
              icon: Icon(Icons.arrow_drop_down),
              iconSize: 42,
              underline: SizedBox(),
              items: [
                PaymeSdkFlutterPayCode.PAYME,
                PaymeSdkFlutterPayCode.ATM,
                PaymeSdkFlutterPayCode.CREDIT,
                PaymeSdkFlutterPayCode.MANUAL_BANK,
                PaymeSdkFlutterPayCode.VN_PAY,
                PaymeSdkFlutterPayCode.MOMO
              ].map((PaymeSdkFlutterPayCode value) {
                return DropdownMenuItem(
                  value: value,
                  child: Padding(
                    padding:
                        const EdgeInsets.symmetric(vertical: 0, horizontal: 20),
                    child: Text(value.toString().split('.').last),
                  ),
                );
              }).toList(),
              onChanged: (value) {
                setState(() {
                  _payCode = value!;
                });
              },
            ),
          ),
        ],
      ),
    );
  }

  showAlertDialog(BuildContext context,
      {String title = '通知', String content = '发生错误'}) {
    // 显示对话框
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text(title),
          content: Text(content),
          actions: [
            TextButton(
              child: Text("已理解"),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
          ],
        );
      },
    );
  }
}

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

1 回复

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


Flutter 是一个由 Google 开发的开源框架,用于构建跨平台的移动应用程序。Flutter 提供了丰富的插件生态系统,使开发者能够轻松地集成各种功能,包括支付功能。payme_sdk_flutter 是一个专为 Flutter 应用程序设计的支付插件,允许开发者集成支付功能到他们的应用程序中。这个插件可能提供了与特定支付网关或支付服务提供商的集成,使开发者能够处理支付交易。

为了有效地使用 payme_sdk_flutter 插件,开发者需要遵循以下步骤:

  1. 安装插件:首先,开发者需要在 pubspec.yaml 文件中添加 payme_sdk_flutter 插件的依赖项。这可以通过在 dependencies 部分添加插件名称和版本号来完成。
dependencies:
  flutter:
    sdk: flutter
  payme_sdk_flutter: ^1.0.0
  1. 导入插件:在需要使用支付功能的 Dart 文件中,开发者需要导入 payme_sdk_flutter 插件。这可以通过在文件顶部添加 import 'package:payme_sdk_flutter/payme_sdk_flutter.dart'; 来实现。
import 'package:payme_sdk_flutter/payme_sdk_flutter.dart';
  1. 初始化插件:在应用程序启动时,开发者需要初始化 payme_sdk_flutter 插件。这通常涉及设置一些配置参数,如支付网关的 API 密钥、商户 ID 等。
PaymeSdkFlutter.initialize(
  apiKey: 'your_api_key',
  merchantId: 'your_merchant_id',
);
  1. 创建支付请求:开发者需要创建一个支付请求对象,该对象包含支付所需的所有信息,如订单金额、货币类型、商品描述等。
final paymentRequest = PaymentRequest(
  amount: 1000, // 订单金额
  currency: 'USD', // 货币类型
  description: 'Sample Payment', // 商品描述
);
  1. 处理支付响应:开发者需要设置一个回调函数来处理支付响应。这通常涉及检查支付是否成功,并根据响应更新应用程序的状态或执行其他操作。
PaymeSdkFlutter.onPaymentResponse((response) {
  if (response.success) {
    print('Payment successful!');
  } else {
    print('Payment failed: ${response.errorMessage}');
  }
});
  1. 启动支付:最后,开发者可以调用插件提供的方法来启动支付流程。这可能会打开一个支付界面,用户可以在其中输入支付信息并完成支付。
PaymeSdkFlutter.startPayment(paymentRequest);

以下是一个完整的示例代码:

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

void main() async {
  // 初始化插件
  PaymeSdkFlutter.initialize(
    apiKey: 'your_api_key',
    merchantId: 'your_merchant_id',
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Payme SDK Flutter Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              // 创建支付请求
              final paymentRequest = PaymentRequest(
                amount: 1000, // 订单金额
                currency: 'USD', // 货币类型
                description: 'Sample Payment', // 商品描述
              );

              // 处理支付响应
              PaymeSdkFlutter.onPaymentResponse((response) {
                if (response.success) {
                  print('Payment successful!');
                } else {
                  print('Payment failed: ${response.errorMessage}');
                }
              });

              // 启动支付
              PaymeSdkFlutter.startPayment(paymentRequest);
            },
            child: Text('Pay Now'),
          ),
        ),
      ),
    );
  }
}
回到顶部