Flutter支付集成插件paystack_for_flutter的使用

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

Flutter支付集成插件paystack_for_flutter的使用

💰 Paystack Package for Flutter

paystack_for_flutter 是一个Flutter插件,它使得将Paystack支付网关集成到您的应用程序中变得非常简单。支持多种支付方式,如银行卡、银行转账、USSD、移动支付等。

Paystack Flow

截图

Initiate Payment Payment Options
Initiate Payment Payment Options
Pay With Card Pay With Bank Transfer
Pay With Card Pay With Bank Transfer
Pay With Bank Payment Successful
Pay With Bank Payment Successful

🎯 添加依赖到pubspec.yaml

dependencies:
  paystack_for_flutter: ^1.0.2

然后导入包:

import 'package:paystack_for_flutter/paystack_for_flutter.dart';

🚀 使用方法

要使用Paystack插件,只需在按钮点击时调用插件。以下是一个示例实现:

PaystackFlutter().pay(
  context: context,
  secretKey: 'YOUR_PAYSTACK_SECRET_KEY', // 您的Paystack私钥
  amount: 60000, // 要收取的金额,单位是最小货币单位(如果金额是600,则乘以100)
  email: 'theelitedevelopers1@gmail.com', // 客户的电子邮件地址
  callbackUrl: 'https://callback.com', // 支付后重定向的URL
  showProgressBar: true, // 是否显示进度条
  paymentOptions: [PaymentOption.card, PaymentOption.bankTransfer, PaymentOption.mobileMoney],
  currency: Currency.NGN,
  metaData: {
    "product_name": "Nike Sneakers",
    "product_quantity": 3,
    "product_price": 24000
  }, // 与交易关联的额外元数据
  onSuccess: (paystackCallback){
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('Transaction Successful::::${paystackCallback.reference}'),
        backgroundColor: Colors.blue,
      ));
  }, // 成功回调
  onCancelled: (paystackCallback){
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(
        content: Text('Transaction Failed/Not successful::::${paystackCallback.reference}'),
        backgroundColor: Colors.red,
      ));
  }, // 取消回调
);

完整的示例代码如下:

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Paystack Flutter Example',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
        useMaterial3: true,
      ),
      home: const MyHomePage(),
      debugShowCheckedModeBanner: false,
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TextButton(
              onPressed: () {
                PaystackFlutter().pay(
                  context: context,
                  secretKey: 'YOUR_PAYSTACK_KEY', // 您的Paystack私钥
                  amount: 60000, // 要收取的金额,单位是最小货币单位(如果金额是600,则乘以100)
                  email: 'theelitedevelopers1@gmail.com', // 客户的电子邮件地址
                  callbackUrl: 'https://callback.com', // 支付后重定向的URL
                  showProgressBar: false, // 是否显示进度条
                  paymentOptions: [
                    PaymentOption.card,
                    PaymentOption.bankTransfer,
                    PaymentOption.mobileMoney
                  ],
                  currency: Currency.NGN,
                  metaData: {
                    "product_name": "Nike Sneakers",
                    "product_quantity": 3,
                    "product_price": 24000
                  }, // 与交易关联的额外元数据
                  onSuccess: (paystackCallback) {
                    ScaffoldMessenger.of(context).showSnackBar(SnackBar(
                      content: Text(
                          'Transaction Successful::::${paystackCallback.reference}'),
                      backgroundColor: Colors.blue,
                    ));
                  }, // 成功回调
                  onCancelled: (paystackCallback) {
                    ScaffoldMessenger.of(context).showSnackBar(SnackBar(
                      content: Text(
                          'Transaction Failed/Not successful::::${paystackCallback.reference}'),
                      backgroundColor: Colors.red,
                    ));
                  }, // 取消回调
                );
              },
              child: const Text(
                'Pay with Paystack',
                style: TextStyle(
                  color: Colors.blue,
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

📝 参数详细说明

参数 数据类型 必需 详情
context BuildContext 当前构建上下文
secretKey String 您的Paystack私钥,可以在Paystack仪表板的设置中获取
amount double 要收取的金额,单位是最小货币单位(如果金额是600,则乘以100)
callbackUrl String 支付后重定向的URL
onSuccess Function(PaystackCallback) 成功回调函数
onCancelled Function(PaystackCallback) 取消回调函数
reference String 自定义交易参考号,如果不传递,Paystack会自动生成
confirmTransaction bool 如果为true,插件会确认交易是否成功,默认值为false
metadata dynamic(json) 与交易关联的额外元数据
paymentOptions List<PaymentOption(enum)> 允许的支付方式列表
currency enum 交易使用的货币
showProgressBar bool 如果为true,显示进度条,默认值为true

❕ 枚举及其值

paymentOptions:

/// - [paymentOptions] 允许的支付方式列表。
///     - **可用支付方式:**
///       - [PaymentOption.card] 允许使用借记卡/信用卡支付。
///       - [PaymentOption.bank] 允许通过银行支付。
///       - [PaymentOption.bankTransfer] 允许通过银行转账支付(替代 `bank`)。
///       - [PaymentOption.ussd] 允许通过USSD移动银行支付。
///       - [PaymentOption.mobileMoney] 允许通过移动钱包支付(例如Mpesa,MTN Mobile Money)。
///       - [PaymentOption.eft] 允许通过EFT(电子资金转账)支付。
///       - [PaymentOption.qr] 允许通过二维码支付。

currency:

/// - [currency] 交易使用的货币。如果省略,则使用与您Paystack账户关联国家的默认货币。
///     - **支持的货币:**
///       - [Currency.NGN] (尼日利亚奈拉)
///       - [Currency.USD] (美元)
///       - [Currency.GHS] (加纳塞地)
///       - [Currency.ZAR] (南非兰特)
///       - [Currency.KES] (肯尼亚先令)

❕ 银行转账在沙箱环境中无响应(但不要担心)

请不要担心,如果您发现“通过银行转账”选项在点击“我已汇款”按钮后一直加载。Paystack银行转账选项在沙箱环境中不起作用,但在使用您的“实时密钥”时工作正常。

✅ 成功回调(支付成功后)

Paystack建议您使用reference调用后台确认交易是否成功,然后再向客户提供价值。onSuccess回调使您可以轻松获取referenceaccessCode并调用后台:

onSuccess: (paystackCallback){
  ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('Transaction Successful::::${paystackCallback.reference}'),
        backgroundColor: Colors.blue,
      ));
}

✔️ 使用插件验证交易

也可以使用插件通过包含confirmTransaction参数来确认交易是否成功:

confirmTransaction: true

当包含此参数时,插件会直接从Paystack确认交易是否真正成功。如果是,它将执行onSuccess回调;如果不是,则调用onCancelled回调。

❌ 取消/未成功的回调(支付失败后)

当支付未成功时,将执行onCancelled回调。您可以选择向客户显示消息或使用reference进行其他操作:

onCancelled: (paystackCallback){
  ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(
          content: Text('Transaction Failed/Not successful::::${paystackCallback.reference}'),
        backgroundColor: Colors.red,
      ));
}

▶️ 运行示例项目

example项目已经提供。克隆此仓库并导航到example文件夹。使用支持的IDE打开它或在终端中执行flutter run

📝 贡献、Issues和Bug Reports

您的贡献对于改进这个库非常重要。如果您有兴趣贡献,请提交pull request或在我们的仓库链接上打开issue。如果您遇到问题或想要报告bug,请在这里报告,请尽可能详细描述。


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

1 回复

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


当然,以下是一个关于如何在Flutter项目中集成并使用paystack_for_flutter插件的示例代码。这个插件允许你使用Paystack进行支付集成。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加paystack_for_flutter依赖:

dependencies:
  flutter:
    sdk: flutter
  paystack_for_flutter: ^x.y.z  # 请替换为最新版本号

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

2. 配置Android

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

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

3. 配置iOS(可选)

如果你也在iOS上开发,请确保在Info.plist中添加必要的权限配置(如果需要)。不过,Paystack的Flutter插件通常会自动处理大部分配置。

4. 初始化Paystack

在你的Flutter项目的lib目录下创建一个新的Dart文件,例如paystack_service.dart,用于初始化Paystack并处理支付。

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

class PaystackService {
  static const String publicKey = 'YOUR_PAYSTACK_PUBLIC_KEY';  // 替换为你的Paystack公钥

  static Future<void> initializePaystack() async {
    await PaystackPlugin.initialize(
      publicKey: publicKey,
      acceptance: 'USD',  // 或其他货币类型
      email: 'customer@example.com',  // 用户的邮箱
      amount: 1000,  // 支付金额,单位为分
      metadata: {
        'custom_fields': [
          {'display_name': 'Order ID', 'variable_name': 'order_id', 'value': '12345'},
        ],
      },
      referrer: 'referrer_code',  // 可选
    );
  }

  static Future<void> startPayment() async {
    try {
      bool isSuccess = await PaystackPlugin.startTransaction(
        onComplete: (transaction) {
          // 支付成功后的回调处理
          print('Transaction successful: $transaction');
        },
        onCancel: () {
          // 支付取消后的回调处理
          print('Transaction cancelled');
        },
        onError: (error) {
          // 支付错误后的回调处理
          print('Transaction error: $error');
        },
      );

      if (isSuccess) {
        print('Payment initiated successfully');
      } else {
        print('Payment initiation failed');
      }
    } catch (e) {
      print('Error starting payment: $e');
    }
  }
}

5. 使用PaystackService进行支付

在你的主应用逻辑中,例如main.dart,调用PaystackService进行支付初始化并启动支付流程:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Paystack Payment Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              await PaystackService.initializePaystack();
              await PaystackService.startPayment();
            },
            child: Text('Start Payment'),
          ),
        ),
      ),
    );
  }
}

注意事项

  1. 安全性:确保你的Paystack公钥和私钥不要硬编码在客户端代码中,尤其是在生产环境中。通常,这些信息应该通过安全的后端API来获取。
  2. 测试环境:在开发过程中,使用Paystack的测试公钥和测试卡进行测试,避免对你的真实账户产生费用。
  3. 错误处理:在实际应用中,添加更详细的错误处理和用户反馈机制。

这样,你就可以在Flutter应用中集成并使用Paystack进行支付了。希望这个示例对你有帮助!

回到顶部