Flutter支付插件flutter_paystack_payment的使用

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

Flutter支付插件 flutter_paystack_payment 的使用

概述

flutter_paystack_payment 是一个用于在Flutter应用中集成Paystack支付系统的插件。它支持所有平台,并提供了多种支付方式。

特性

当前支持的功能:

  • 卡支付
  • 银行转账

开发中的功能:

  • USSD支付
  • QR码支付
  • 移动货币支付

安装

在您的 pubspec.yaml 文件中添加 flutter_paystack_payment 作为依赖项:

dependencies:
  flutter_paystack_payment: ^latest_version

然后在您的Widget的 initState 方法中初始化插件:

import 'package:flutter_paystack_payment/flutter_paystack_payment.dart';

class _ExamplePaymentPageState extends State<ExamplePaymentPage> {
  var publicKey = 'Add your Paystack Public Key Here';
  final plugin = PaystackPayment();

  [@override](/user/override)
  void initState() {
    super.initState();
    plugin.initialize(publicKey: publicKey);
  }
}

新特性

现在可以扫描卡片而不是手动输入卡信息。

设置 - Android

需要添加权限以使用相机:

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

设置 - iOS

需要添加权限以使用相机,并提供使用原因:

<key>NSCameraUsageDescription</key>
<string>To Scan Details on Card While trying to process payment</string>

支付流程

有两种方法可以进行支付:

  1. Checkout(推荐):插件处理所有支付过程,除了交易初始化和验证。
  2. Charge Card:开发者处理所有回调和UI状态。

1. Checkout(推荐)

通过初始化一个包含金额、电子邮件和访问代码或引用的 Charge 对象来开始支付流程:

Charge charge = Charge()
      ..amount = 10000 // 金额单位为最小货币单位
      ..reference = _getReference() // 或者使用 accessCode
      ..email = 'customer@email.com'; 

CheckoutResponse response = await plugin.checkout(
      context,
      method: CheckoutMethod.card, // 默认是 CheckoutMethod.selectable
      charge: charge,
);

如果 CheckoutMethodbankselectable,则必须提供 accessCode

2. Charge Card

可以选择在本地或通过后端初始化支付。

A. 后端初始化(推荐)

  1. 在后端发送HTTP POST请求到 Paystack 初始化交易。
  2. 成功后返回响应中的 access_code,创建 Charge 对象并调用 plugin.chargeCard() 函数进行支付:
PaymentCard _getCardFromUI() {
    return PaymentCard(
      number: cardNumber,
      cvc: cvv,
      expiryMonth: expiryMonth,
      expiryYear: expiryYear,
    );
}

_chargeCard(String accessCode) async {
    var charge = Charge()
      ..accessCode = accessCode
      ..card = _getCardFromUI();

    final response = await plugin.chargeCard(context, charge: charge);
    // 使用响应
}

示例项目

以下是一个完整的示例项目,演示如何在Flutter应用程序中使用 flutter_paystack_payment 插件。

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

void main() => runApp(MyApp());

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

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

class _HomePageState extends State<HomePage> {
  final plugin = PaystackPayment();
  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();

  [@override](/user/override)
  void initState() {
    super.initState();
    plugin.initialize(publicKey: 'your_public_key_here');
  }

  void _startPayment() async {
    Charge charge = Charge()
      ..amount = 10000
      ..email = 'customer@example.com'
      ..reference = 'some_unique_reference';

    CheckoutResponse response = await plugin.checkout(
      context,
      method: CheckoutMethod.card,
      charge: charge,
    );

    if (response.status) {
      _showMessage('Payment successful: ${response.message}');
    } else {
      _showMessage('Payment failed: ${response.message}');
    }
  }

  void _showMessage(String message) {
    ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(message)));
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      key: _scaffoldKey,
      appBar: AppBar(title: Text('Paystack Example')),
      body: Center(
        child: ElevatedButton(
          onPressed: _startPayment,
          child: Text('Start Payment'),
        ),
      ),
    );
  }
}

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

1 回复

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


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

首先,确保你已经在你的pubspec.yaml文件中添加了flutter_paystack_payment依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_paystack_payment: ^1.0.10  # 请检查最新版本号

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

接下来,你需要进行一些初始化设置,包括获取Paystack的公钥(public key)。你可以在Paystack的仪表板上找到这个公钥。

下面是一个完整的示例,展示如何在Flutter应用中使用flutter_paystack_payment插件:

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

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

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

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

class _PaymentScreenState extends State<PaymentScreen> {
  final String publicKey = 'YOUR_PAYSTACK_PUBLIC_KEY'; // 替换为你的Paystack公钥

  void initiatePayment() async {
    try {
      PaystackPayment paystackPayment = PaystackPayment();
      String email = "test@example.com";
      int amount = 1000; // 金额,单位为奈拉(Naira),这里示例为1000奈拉
      String reference = DateTime.now().millisecondsSinceEpoch.toString();

      Map<String, dynamic> result = await paystackPayment.initializePayment(
        publicKey: publicKey,
        email: email,
        amount: amount,
        currency: 'NGN',
        reference: reference,
        // 其他可选参数,如metadata等
      );

      if (result['status']) {
        print("Payment successful!");
        // 处理支付成功后的逻辑
      } else {
        print("Payment failed: ${result['message']}");
        // 处理支付失败后的逻辑
      }
    } catch (e) {
      print("Error initiating payment: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Paystack Payment Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: initiatePayment,
          child: Text('Initiate Payment'),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮,点击按钮将启动Paystack支付流程。

注意

  1. 替换YOUR_PAYSTACK_PUBLIC_KEY为你的实际Paystack公钥。
  2. 金额单位为奈拉(NGN),你可以根据需要调整。
  3. reference是一个唯一标识符,通常使用当前时间的毫秒数,但你可以根据需求生成。
  4. 根据你的应用需求,你可以添加更多的支付参数,如metadata等。

确保在实际部署前,在Paystack仪表板上配置好你的应用,并遵循Paystack的安全和合规要求。

回到顶部