Flutter支付集成插件payme_sdk_offical的使用

概述

PayME SDK 是一组库,允许应用程序与 PayME 平台进行交互。PayME SDK 提供的主要功能包括:

  • 系统登录和通过 PayME 钱包进行电子身份识别(eKYC)。
  • 支持应用获取 PayME 钱包余额信息。
  • 提供从 PayME 钱包充值和提现的功能。

术语表

以下是一些关键术语及其解释:

序号 名称 解释
1 app 集成了 PayME SDK 的移动应用(iOS/Android 或 Web)。
2 SDK 帮助集成 PayME 钱包到应用中的工具集。
3 backend 支持应用的后端系统、服务器或 API。
4 AES 使用 AES256 PKCS5 加密的数据算法。
5 RSA 用于数据加密的 RSA 算法。
6 IPN 即时支付通知,用于在应用后端与 PayME 后端之间传递通知。

安装步骤

  1. pubspec.yaml 文件中添加以下依赖项:

    dependencies:
      payme_sdk_offical: ^1.1.7
    

    然后运行以下命令以完成安装:

    dart pub get
    
  2. 更新 Info.plist(iOS 专用): 添加以下键值对以请求必要的权限:

    <key>NSCameraUsageDescription</key>
    <string>Need to access your camera to capture a photo add and update profile picture.</string>
    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>Need to access your library to add a photo or video for KYC.</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>Need to access your photo library to select a photo add and update profile picture.</string>
    <key>NSContactsUsageDescription</key>
    <string>Need to access your contacts.</string>
    

    如果不使用联系人功能,可以在 Podfile 的末尾添加以下配置:

    post_install do |installer|
      installer.pods_project.targets.each do |target|
          if target.name == 'PayMESDK'
              target.build_configurations.each do |config|
                config.build_settings['SWIFT_ACTIVE_COMPILATION_CONDITIONS'] ||= '$(inherited)'
                config.build_settings['SWIFT_ACTIVE_COMPILATION_CONDITIONS'] << 'IGNORE_CONTACT'
              end
          end
      end
    end
    

使用 SDK

在使用 PayME SDK 之前,必须先初始化并登录。以下是初始化和主要功能的示例代码:

// 初始化 PayME SDK
PaymeSdkFlutterConfig config = PaymeSdkFlutterConfig(
  appToken: "YOUR_APP_TOKEN",
  publicKey: "YOUR_PUBLIC_KEY",
  privateKey: "YOUR_PRIVATE_KEY",
  secretKey: "YOUR_SECRET_KEY",
);

// 登录
Future<void> login() async {
  try {
    PaymeSdkFlutterKYCState status = await PaymeSdkFlutter.login(
      "USER_ID", // 用户唯一标识符
      "PHONE_NUMBER", // 用户手机号码
      config,
    );
    print("Login Status: $status");
  } catch (e) {
    print("Login Error: $e");
  }
}

SDK 功能

1. 注销 (logout)
await PaymeSdkFlutter.logout(); // 注销当前会话
2. 关闭 SDK (close)
await PaymeSdkFlutter.close(); // 关闭当前 SDK UI
3. 打开钱包 (openWallet)
await PaymeSdkFlutter.openWallet(); // 打开 PayME 钱包主界面
4. 充值 (deposit)
await PaymeSdkFlutter.deposit(amount: 1000); // 充值金额为 1000
5. 提现 (withdraw)
await PaymeSdkFlutter.withdraw(amount: 500); // 提现金额为 500
6. 转账 (transfer)
await PaymeSdkFlutter.transfer(amount: 200, note: "Transfer Test"); // 转账金额为 200,并附带备注
7. 查看交易历史 (openHistory)
await PaymeSdkFlutter.openHistory(); // 打开交易历史页面
8. 支付 (pay)
await PaymeSdkFlutter.pay(
  1000, // 支付金额
  DateTime.now().millisecondsSinceEpoch.toString(), // 订单编号
  PaymeSdkFlutterPayCode.PAYME, // 支付方式
  storeId: "STORE_ID", // 商户 ID
);
9. 扫描二维码 (scanQR)
final qrString = "OPENEWALLET|STORE_ID|PAYMENT|1000|Note|ORDER_ID|USERNAME";
await PaymeSdkFlutter.scanQR(payCode: "PAYME"); // 扫描二维码支付
10. 支付二维码 (payQRCode)
await PaymeSdkFlutter.payQRCode(
  qr: "QR_CODE_STRING",
  payCode: "PAYME",
  isShowResultUI: true, // 是否显示支付结果 UI
);
11. 打开 KYC 模态框 (openKYC)
await PaymeSdkFlutter.openKYC(); // 打开 KYC 定义页面
12. 获取钱包信息 (getWalletInfo)
var walletInfo = await PaymeSdkFlutter.getWalletInfo();
print(walletInfo["walletBalance"]["balance"]); // 输出钱包余额
13. 获取支持的服务 (getSupportedServices)
var services = await PaymeSdkFlutter.getSupportedServices();
print(services); // 输出支持的服务列表
14. 设置语言 (setLanguage)
await PaymeSdkFlutter.setLanguage(PaymeSdkFlutterLanguage.EN); // 设置语言为英语

错误码

以下是 PayME SDK 返回的一些常见错误码及解释:

错误码 描述
EXPIRED Token 已过期。
NETWORK 网络连接失败。
SYSTEM 系统错误。
LIMIT 余额不足。
ACCOUNT_NOT_ACTIVATED 账户未激活。
ACCOUNT_NOT_KYC 账户未完成 KYC。
PAYMENT_ERROR 支付失败。
ERROR_KEY_ENCODE 数据加密/解密失败。
USER_CANCELLED 用户取消操作。
ACCOUNT_NOT_LOGIN 未登录账户。
PAYMENT_PENDING 支付正在处理中。
ACCOUNT_ERROR 账户被锁定。

示例代码

以下是一个完整的示例代码,展示了如何使用 PayME SDK 进行登录、支付等操作:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

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

class _HomePageState extends State<HomePage> {
  String _status = "Not Connected. Please LOGIN first";

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("PayME SDK Example"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () async {
                try {
                  var status = await PaymeSdkFlutter.login(
                    "USER_ID",
                    "PHONE_NUMBER",
                    PaymeSdkFlutterConfig(
                      appToken: "APP_TOKEN",
                      publicKey: "PUBLIC_KEY",
                      privateKey: "PRIVATE_KEY",
                      secretKey: "SECRET_KEY",
                    ),
                  );
                  setState(() {
                    _status = status.toString();
                  });
                } catch (e) {
                  setState(() {
                    _status = "Error: ${e.toString()}";
                  });
                }
              },
              child: Text("Login"),
            ),
            ElevatedButton(
              onPressed: () async {
                try {
                  await PaymeSdkFlutter.logout();
                  setState(() {
                    _status = "Not Connected. Please LOGIN first";
                  });
                } catch (e) {
                  setState(() {
                    _status = "Error: ${e.toString()}";
                  });
                }
              },
              child: Text("Logout"),
            ),
            ElevatedButton(
              onPressed: () async {
                try {
                  var response = await PaymeSdkFlutter.pay(
                    1000,
                    DateTime.now().millisecondsSinceEpoch.toString(),
                    PaymeSdkFlutterPayCode.PAYME,
                    storeId: "STORE_ID",
                  );
                  print(response);
                } catch (e) {
                  print("Payment Error: ${e.toString()}");
                }
              },
              child: Text("Pay"),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


payme_sdk_offical 是一个用于在 Flutter 应用中集成支付功能的插件。它通常用于与 Payme 支付网关进行交互,以便在应用中实现支付功能。以下是如何在 Flutter 项目中使用 payme_sdk_offical 插件的基本步骤:

1. 添加依赖

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

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

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

2. 初始化 SDK

在使用 payme_sdk_offical 之前,你需要初始化 SDK。通常,你需要在应用的 main.dart 文件中进行初始化。

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Payme SDK
  await PaymeSdkOffical.initialize(
    merchantId: 'YOUR_MERCHANT_ID',
    merchantKey: 'YOUR_MERCHANT_KEY',
    isTestMode: true, // 设置为 true 以使用测试环境
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Payme Example',
      home: PaymentScreen(),
    );
  }
}

3. 发起支付

在需要发起支付的地方,你可以使用 PaymeSdkOffical 提供的 API 来发起支付请求。

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

class PaymentScreen extends StatelessWidget {
  Future<void> _makePayment() async {
    try {
      // 发起支付请求
      final response = await PaymeSdkOffical.makePayment(
        amount: 1000, // 支付金额
        orderId: 'ORDER_ID_123', // 订单ID
        description: 'Payment for order #123', // 订单描述
      );

      // 处理支付结果
      if (response['status'] == 'success') {
        print('Payment successful: ${response['transactionId']}');
      } else {
        print('Payment failed: ${response['errorMessage']}');
      }
    } catch (e) {
      print('Error: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Payme Payment'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _makePayment,
          child: Text('Make Payment'),
        ),
      ),
    );
  }
}
回到顶部