emydev / laravel_paytabs
官方 Laravel 包,用于实现与 Laravel 应用的 PayTabs 集成
Requires
- php: ^7.0.0
This package is auto-updated.
Last update: 2024-09-29 20:19:24 UTC
README
A Flutter 插件,用于通过 Paystack 支付网关进行支付。完全支持 Android 和 iOS。
🚀 安装
要使用此插件,请在您的 pubspec.yaml 文件中将 flutter_paystack
添加为依赖项。
然后在您的 widget 的 initState
中初始化插件。
import 'package:flutter_paystack/flutter_paystack.dart'; class _PaymentPageState extends State<PaymentPage> { var publicKey = '[YOUR_PAYSTACK_PUBLIC_KEY]'; final plugin = PaystackPlugin(); @override void initState() { plugin.initialize(publicKey: publicKey); } }
无需其他配置——插件即插即用。
💲 进行支付
使用此插件进行支付有两种方式。
- 结账:这是最简单的方式;该插件处理所有支付过程中涉及的过程(除了交易初始化和验证,这些应该在您的后端完成)。
- 刷卡:这是一种更长的做法;您处理所有回调和 UI 状态。
1. 🌟 结账(推荐)
您可以使用金额、电子邮件 & accessCode 或 reference 初始化一个 charge 对象。仅在您已从后端 初始化了交易 时才传递 accessCode
。否则,传递 reference
。
Charge charge = Charge() ..amount = 10000 ..reference = _getReference() // or ..accessCode = _getAccessCodeFrmInitialization() ..email = 'customer@email.com'; CheckoutResponse response = await plugin.checkout( context context, method: CheckoutMethod.card, // Defaults to CheckoutMethod.selectable charge: charge, );
请注意,如果方法是 CheckoutMethod.bank
或 CheckoutMethod.selectable
,则必须需要 accessCode
。
plugin.checkout()
返回支付的状态和详情,在 CheckoutResponse
实例中。
建议当 plugin.checkout()
返回时,应在您的后端 验证 支付。
2. ⭐ 刷卡
您可以选择在本地或通过您的后端初始化支付。
A. 通过您的后端初始化(推荐)
1.a. 这需要从您的后端向 paystack 发送 HTTP POST 请求。
1.b 如果一切顺利,初始化请求将返回包含 access_code
的响应。然后,您可以使用访问代码和卡详情创建一个 Charge
对象。然后将 charge
传递给 plugin.chargeCard()
函数进行支付。
PaymentCard _getCardFromUI() { // Using just the must-required parameters. 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); // Use the response }
如果 response.status
为 true,则交易成功。请参阅 CheckoutResponse 的文档以获取更多信息。
2. 本地初始化
只需将支付详情发送到 plugin.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 = 'user@email.com' ..reference = _getReference() ..putCustomField('Charged From', 'Flutter PLUGIN'); _chargeCard();
🔧 🔩 验证卡详情
您可以为用户构建 UI 以输入他们的支付详情,但这不是必需的。为了便于验证,请将 TextFormField 包装在 Form 小部件中。如果您对此不熟悉,请参阅有关在 Flutter 中验证表单的这篇文章 validating forms on Flutter。
注意:您不需要将卡对象传递给 Charge
。插件将调用 UI 让用户输入他们的卡信息。
您可以使用以下方法验证字段
card.validNumber
此方法有助于检查卡号是否有效。
card.validCVC
检查卡安全码是否有效的方法。
card.validExpiryDate
该方法检查有效期(年份和月份的组合)是否有效。
card.isValid
检查卡片是否有效的方法。在扣款前,始终执行此检查。
card.getType
此方法返回卡类型(发行者)的字符串表示形式的估计值。
✔️ 验证交易
这很简单。只需向 https://api.paystack.co/transaction/verify/$[TRANSACTION_REFERENCE]
发送 HTTP GET 请求。请查看关于验证交易的官方文档。
🚁 测试您的实现
Paystack 为测试提供了大量的测试支付卡。
▶️ 运行示例项目
有关开始使用 Flutter 的帮助,请查看在线 文档。
在此插件中已提供示例项目。克隆此存储库,然后导航到 example 文件夹。使用支持的 IDE 打开它,或在终端中从该文件夹执行 flutter run
。
📝 贡献,😞 问题及 🐛 缺陷报告
该项目对公众开放贡献。请随时贡献。遇到问题或想要报告缺陷?请在此处报告。请尽量详细描述。
🏆 信用
感谢 Paystack 的 iOS 和 Android SDK 的作者。我利用他们的工作来实现此插件。
Laravel PayTabs PT2
描述
本包提供与 PayTabs 支付网关的集成。
本文件的目录内容
- 介绍
- 需求
- 安装
- 配置
- 使用
介绍
本包从 Laravel 框架 5.8 - 8.x 版本开始,将 PayTabs 在线支付集成到 Laravel 框架中。
需求
本包不需要外部依赖。
安装
- composer require paytabscom/laravel_paytabs
配置
-
composer dump-autoload
-
转到 config/app.php 并在 providers 数组中添加
Paytabscom\Laravel_paytabs\PaypageServiceProvider::class,
-
创建包配置文件
php artisan vendor:publish --tag=paytabs
-
转到 config/logging.php 并在 channels 数组中添加
'PayTabs' => [ 'driver' => 'single', 'path' => storage_path('logs/paytabs.log'), 'level' => 'info', ],
-
在 config/paytabs.php 中添加您的商户信息。
重要提示:您可以使用与 config/paytabs.php 文件中提到的相同键名在环境文件中传递您的商户信息。如果不存在给定键的环境变量,将返回此值。
使用
-
创建支付页面
use Paytabscom\Laravel_paytabs\Facades\paypage; $pay= paypage::sendPaymentCode('all') ->sendTransaction('sale') ->sendCart(10,1000,'test') ->sendCustomerDetails('Walaa Elsaeed', 'w.elsaeed@paytabs.com', '0101111111', 'test', 'Nasr City', 'Cairo', 'EG', '1234','100.279.20.10') ->sendShippingDetails('Walaa Elsaeed', 'w.elsaeed@paytabs.com', '0101111111', 'test', 'Nasr City', 'Cairo', 'EG', '1234','100.279.20.10') ->sendURLs('return_url', 'callback_url') ->sendLanguage('en') ->create_pay_page(); return $pay;
-
如果您想将送货地址与账单地址相同,可以使用
->sendShippingDetails('same as billing')
-
如果您想隐藏送货地址,可以使用
->sendHideShipping(true);
-
如果您想使用 iframe 选项而不是重定向,可以使用
->sendFramed(true);
-
退款(您可以使用此函数进行全额退款和部分退款)
$refund = Paypage::refund('tran_ref','order_id','amount','refund_reason'); return $refund;
-
认证
pay= Paypage::sendPaymentCode('all') ->sendTransaction('Auth') ->sendCart(10,1000,'test') ->sendCustomerDetails('Walaa Elsaeed', 'w.elsaeed@paytabs.com', '0101111111', 'test', 'Nasr City', 'Cairo', 'EG', '1234','100.279.20.10') ->sendShippingDetails('Walaa Elsaeed', 'w.elsaeed@paytabs.com', '0101111111', 'test', 'Nasr City', 'Cairo', 'EG', '1234','100.279.20.10') ->sendURLs('return_url', 'callback_url') ->sendLanguage('en') ->create_pay_page(); return $pay;
-
扣款(tran_ref 是您需要扣款的 Auth 交易的 tran_ref。
您可以使用此函数进行全额扣款和部分扣款。)
$capture = Paypage::capture('tran_ref','order_id','amount','capture description'); return $capture;
-
取消(tran_ref 是您需要取消的 Auth 交易的 tran_ref。
您可以使用此函数进行全额扣款和部分扣款)
$void = Paypage::void('tran_ref','order_id','amount','void description'); return $void
-
交易详情
$transaction = Paypage::queryTransaction('tran_ref'); return $transaction;
-
如果您遇到任何错误,您将在以下位置找到它:storage/logs/paytabs.log
支付结果通知
PayTabs 支付网关提供在交易处理完成后通知您的系统支付结果的方法,以便您的系统可以更新相应的购物车。
要使用此功能,请执行以下操作
1- 定义路由(可选)
Laravel PayTabs PT2 包默认提供了一条用于接收IPN请求的路由。该路由URI为/paymentIPN,如果您不喜欢这个URI,可以直接忽略并定义自己的。查看src/routes.php文件以获取相关信息。
2- 实现接收通知的方式
为了接收通知,您可以执行以下操作之一:
-
在创建支付页面时,将URL作为sendURLs方法的第二个参数传递,该URL将接收带有支付结果的HTTP Post请求。有关回调的更多信息,请参阅:商家仪表板 > 开发者 > 交易API。
-
第二种方式是配置来自商家仪表板的IPN通知。有关如何配置IPN请求及其不同格式的详细信息,请参阅:商家仪表板 > 开发者 > 服务类型。
3- 配置回调方法
现在,您需要使用类\方法配置插件,该方法将抓取支付详情并执行您的自定义逻辑(更新数据库中的购物车、通知客户等)。
-
在您的网站config/paytabs.php文件中,添加以下内容:
'callback' => env('paytabs_ipn_callback', new namespace\your_class() ),
-
在您的类中添加新方法,其名称必须为:updateCartByIPN
updateCartByIPN( $requestData){ $cartId= $requestData->getCartId(); $status= $requestData->getStatus(); //your logic .. updating cart in DB, notifying the customer ...etc }
您还可以获取交易参考号。要获取可用属性的列表,请查看Paytabscom\Laravel__paytabs\IpnRequest类。