Flutter支付功能插件pay_unit_sdk的使用

Flutter支付功能插件pay_unit_sdk的使用


PayUnit Logo

欢迎使用 Pay Unit Flutter SDK,在您的应用中无缝接受和管理付款。

Pub Version GitHub repo size GitHub issues GitHub Repo stars GitHub forks GitHub code size in bytes Website Twitter Follow Website

描述

Pay Unit SDK 包允许您通过一个按钮轻松地将付款集成到您的应用程序中。

安装

运行以下命令:

使用 dart
dart pub add pay_unit_sdk
使用 Flutter
flutter pub add pay_unit_sdk
手动添加依赖

pubspec.yaml 文件中添加以下内容:

dependencies:
  pay_unit_sdk: ^3.1.5
导入包
import 'package:pay_unit_sdk/pay_unit_sdk.dart';
添加 mavenCentral()

build.gradle 文件中添加 mavenCentral()allprojects 部分:

allprojects {
    repositories {
        google()
        mavenCentral() 
        jcenter()
    }
}
添加 PayUnitButton
PayUnitButton(
  apiUser: "Your apiuser>",
  apiPassword: "<Your apiPassword>",
  apiKey: "<Your apiKey>",
  transactionId: "<The id of your transaction>",
  mode: 'sandbox',
  transactionCallBackUrl: "<Your transactionCallBackUrl url>",
  notiFyUrl: "<Your notification url>",
  transactionAmount: "<Your transaction amount>",
  currency: "XAF", 
  buttonTextColor: Colors.white,
  productName: "<The name of the product>",
  color: Colors.teal,
  actionAfterProccess: (transactionId, transactionStatus) {
    // 回调参数包括交易ID和交易状态
  },
)

PayUnit 按钮参数

  • apiUser: 您的 API 用户 ID,在您的 PayUnit 仪表板上提供,格式为 “payunit_xxxxxxxx”
  • mode: 可以是 “sandbox” 或 “live”
  • currency: 交易货币:例如 XAF 表示 FCFA,USD 表示美元等
  • buttonTextColor: 自定义 PayUnit 按钮文本颜色
  • color: 自定义 PayUnit 按钮颜色
  • actionAfterProccess: 支付结束后的操作,可以在此执行某些操作,例如支付完成后显示一个 AlertDialog
  • transactionId 和 transactionStatusactionAfterProccess 函数的回调参数,不要修改它们。

注意事项

  • 对于 Flutter 版本 < 2.x ==> 2.0.4 不包含 Cupertino 包,因为该包已经包含了它。
  • 确保您的应用图标位于 @mipmap/ic_launcher 下,以便在每次交易后接收 PayUnit SDK 的通知。
  • 新版 Pay_unit_sdk 2.0.7 支持 Flutter 2.x。
  • 使用此包,只需遵循以下说明。请下载 SDK 的最新版本。
  • 最小 SDK 版本 19。
  • 使用 flutter sdk v.1.22.0+。

相册

合作伙伴


示例代码

import 'dart:math';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:pay_unit_sdk/pay_unit_sdk.dart';

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

class App extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) => MaterialApp(
        debugShowCheckedModeBanner: false,
        home: Scaffold(
          body: Home(),
        ),
      );
}

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

class _HomeState extends State<Home> {
  [@override](/user/override)
  initState() {
    super.initState();
  }

  // 生成随机交易ID
  getRandomId() {
    // 初始化当前日期时间
    var now = DateTime.now();
    var rng = Random();
    // 指定日期格式
    var formatter = DateFormat('yyyyMMddHms');
    String formattedDate = "${formatter.format(now)}${rng.nextInt(100000)}";
    return formattedDate;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.grey,
      appBar: AppBar(
        elevation: 1,
        backgroundColor: Colors.white,
        title: const Text(
          "Pay unit demo",
          style: TextStyle(color: Colors.black),
        ),
        centerTitle: true,
      ),
      body: Center(
        child: Padding(
          padding: EdgeInsets.only(left: 30, right: 30),
          child: PayUnitButton(
            isTerminalPayment: false,
            hasConnexion: true,
            apiUser: "xxxxxxxxxxxxxxxxxxxxxxx",
            apiPassword: "xxxxxx-xxxxxxx-xxxxxx-xxxxxx",
            apiKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxx",
            transactionId: getRandomId(),
            mode: 'live', // test or live
            transactionCallBackUrl: "",
            notiFyUrl: "",
            transactionAmount: "Enter the Amount here",
            currency: "XAF",
            buttonTextColor: Colors.black,
            productName: "Vapor max sniper edition",
            color: Colors.white,
            actionAfterProccess: (transactionId, transactionStatus) {
              print("Transaction id is : $transactionId  and transaction status : $transactionStatus");
              if (transactionStatus != "FAILED") {
                // 如果交易成功,执行此操作
              } else {
                // 如果交易失败,执行此操作
              }
            },
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


在Flutter项目中集成并使用支付功能插件pay_unit_sdk,可以通过以下步骤实现。请注意,由于具体的支付流程和配置可能因支付平台和服务商而异,下面的代码示例将展示一个基本的集成流程,但具体的API密钥、支付参数等需要根据实际情况配置。

1. 添加依赖

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

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

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

2. 配置Android和iOS支付环境

对于Android,你可能需要在android/app/src/main/AndroidManifest.xml中添加必要的权限和配置。对于iOS,你可能需要在Info.plist中添加相应的配置。具体配置请参照pay_unit_sdk的官方文档。

3. 初始化支付插件

在你的Flutter应用中,初始化pay_unit_sdk插件。通常,这会在你的主应用入口文件(如main.dart)中进行。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Payment Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: PaymentScreen(),
    );
  }
}

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

class _PaymentScreenState extends State<PaymentScreen> {
  @override
  void initState() {
    super.initState();
    // 初始化支付插件(假设有初始化方法)
    // PayUnitSdk.initialize(...); // 根据实际情况填写参数
  }

  void _makePayment() async {
    try {
      // 构建支付参数,这里以假设的参数为例
      Map<String, String> paymentParams = {
        'amount': '100.00', // 支付金额
        'currency': 'USD',  // 货币类型
        'description': 'Test Payment', // 支付描述
        // 其他必要的支付参数,如订单号、商品信息等
      };

      // 调用支付方法
      var result = await PayUnitSdk.pay(paymentParams);

      if (result['status'] == 'success') {
        // 支付成功处理
        print('Payment successful!');
      } else {
        // 支付失败处理
        print('Payment failed: ${result['message'] ?? 'Unknown error'}');
      }
    } catch (e) {
      // 错误处理
      print('Error during payment: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Payment Screen'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _makePayment,
          child: Text('Make Payment'),
        ),
      ),
    );
  }
}

4. 处理支付回调

对于实际的支付流程,支付成功后通常会有回调。pay_unit_sdk插件可能会有自己的回调机制,你需要根据插件的文档来实现回调处理。这通常涉及到在应用的不同生命周期阶段(如onResumeonActivityResult对于Android,或特定的AppDelegate方法对于iOS)中监听支付结果。

由于具体的回调处理代码依赖于插件的具体实现和支付平台的要求,这里无法给出确切的代码示例。请参照pay_unit_sdk的官方文档来处理支付回调。

注意事项

  • 确保你已经正确配置了支付平台所需的API密钥、商户ID等信息。
  • 在实际项目中,支付金额、货币类型、订单号等敏感信息应该通过安全的方式获取和处理。
  • 测试支付功能时,请使用沙箱环境或测试账户,以避免产生真实的支付交易。

以上是一个基本的Flutter项目中集成pay_unit_sdk插件的示例。具体的实现细节和配置可能会根据插件版本和支付平台的要求有所不同,请参考pay_unit_sdk的官方文档获取最新的集成指南和API参考。

回到顶部