Paystack Flutter 插件
一个强大的 Flutter 插件,用于通过 Paystack 支付网关进行支付。完全支持 Android 和 iOS
:rocket: 安装
要使用此插件,请将 flutter_paystack 添加到您的 pubspec.yaml 文件中的 依赖项。
然后,最好在您的 widget 的 initState 中初始化该插件。
import 'package:flutter_paystack/flutter_paystack.dart';
class _PaymentPageState extends State<PaymentPage> {
var publicKey = '[YOUR_PAYSTACK_PUBLIC_KEY]';
@override
void initState() {
PaystackPlugin.initialize(
publicKey: publicKey);
}
}
无需其他配置——该插件开箱即用。
:heavy_dollar_sign: 进行支付
有两种方式可以使用此插件进行支付。
- Checkout (结账):这是简单的方式;插件处理所有支付流程(除了需要从您的后端进行的交易初始化和验证)。
流程
初始化和验证,这应该从您的
后端进行。 - Charge Card (扣款):这是一个更长的方法;您需要处理所有回调和 UI 状态。
和 UI 状态。
1. :star2: Checkout (推荐)
您可以使用金额、电子邮件和 accessCode 或 reference 初始化一个 charge 对象。仅当您已从后端初始化交易时,才传递 accessCode。
reference。
当您
从后端初始化交易时,仅传递 reference。
Charge charge = Charge()
..amount = 10000
..reference = _getReference()
// or ..accessCode = _getAccessCodeFrmInitialization()
..email = '[email protected]';
CheckoutResponse response = await PaystackPlugin.checkout(
context context,
method: CheckoutMethod.card, // Defaults to CheckoutMethod.selectable
charge: charge,
);
请注意,如果方法是 CheckoutMethod.bank 或 CheckoutMethod.selectable,则需要 accessCode。
CheckoutMethod.selectable。
PaystackPlugin.checkout() 返回 CheckoutResponse 实例中的支付状态和详细信息。CheckoutResponse。
建议当 PaystackPlugin.checkout() 返回时,支付应该在您的后端进行验证。
支付应该
验证
在您的后端。
2. :star: Charge Card
您可以选择在本地或通过您的后端初始化付款。
A. 通过您的后端初始化 (推荐)
1.a. 这首先需要向 paystack 发送一个 HTTP POST 请求。
paystack
在您的后端。
1.b 如果一切顺利,初始化请求将返回一个带有 access_code 的响应。
然后,您可以使用 access code 和卡详细信息创建一个 Charge 对象。然后将 charge 传递给 PaystackPlugin.chargeCard() 函数进行支付。
PaymentCard _getCardFromUI() {
// Using just the must-required parameters.
return PaymentCard(
number: cardNumber,
cvc: cvv,
expiryMonth: expiryMonth,
expiryYear: expiryYear,
);
// Using Cascade notation (similar to Java's builder pattern)
// return PaymentCard(
// number: cardNumber,
// cvc: cvv,
// expiryMonth: expiryMonth,
// expiryYear: expiryYear)
// ..name = 'Segun Chukwuma Adamu'
// ..country = 'Nigeria'
// ..addressLine1 = 'Ikeja, Lagos'
// ..addressPostalCode = '100001';
// Using optional parameters
// return PaymentCard(
// number: cardNumber,
// cvc: cvv,
// expiryMonth: expiryMonth,
// expiryYear: expiryYear,
// name: 'Ismail Adebola Emeka',
// addressCountry: 'Nigeria',
// addressLine1: '90, Nnebisi Road, Asaba, Deleta State');
}
_chargeCard(String accessCode) {
var charge = Charge()
..accessCode = accessCode
..card = _getCardFromUI();
PaystackPlugin.chargeCard(context,
charge: charge,
beforeValidate: (transaction) => handleBeforeValidate(transaction),
onSuccess: (transaction) => handleOnSuccess(transaction),
onError: (error, transaction) => handleOnError(error, transaction));
}
handleBeforeValidate(Transaction transaction) {
// This is called only before requesting OTP
// Save reference so you may send to server if error occurs with OTP
}
handleOnError(Object e, Transaction transaction) {
// If an access code has expired, simply ask your server for a new one
// and restart the charge instead of displaying error
}
handleOnSuccess(Transaction transaction) {
// This is called only after transaction is successful
}
2. 本地初始化
只需将付款详细信息发送到 PaystackPlugin.chargeCard。
// Set transaction params directly in app (note that these params
// are only used if an access_code is not set. In debug mode,
// setting them after setting an access code would throw an error
Charge charge = Charge();
charge.card = _getCardFromUI();
charge
..amount = 2000
..email = '[email protected]'
..reference = _getReference()
..putCustomField('Charged From', 'Flutter PLUGIN');
_chargeCard();
:wrench: :nut_and_bolt: 验证卡详细信息
您需要(但非必需)为用户构建输入其付款详细信息的 UI。
为了更方便地进行验证,请将 TextFormFields 包装在 Form widget 中。如果您对此不熟悉,请参阅这篇关于在 Flutter 中验证表单的文章。
验证表单
如果您对此不熟悉。
注意: 您不必将 card 对象传递给 Charge。插件将调用 UI,供用户输入其卡信息。
您可以使用以下方法验证字段
card.validNumber
此方法有助于检查卡号是否有效。
card.validCVC
检查卡安全码是否有效的方法。
card.validExpiryDate
方法检查有效期(年份和月份的组合)是否有效。
card.isValid
检查卡是否有效的方法。在扣款之前,请务必执行此检查。
card.getType
此方法返回卡类型(发行方)的字符串表示形式的估计值。