emydev/laravel_paytabs

官方 Laravel 包,用于实现与 Laravel 应用的 PayTabs 集成

安装: 462

依赖者: 0

建议者: 0

安全性: 0

星标: 0

关注者: 0

分支: 14

语言: Dart

类型: composer-package

1.1.1 2021-11-03 16:01 UTC

This package is auto-updated.

Last update: 2024-09-29 20:19:24 UTC


README

build status Coverage Status pub package

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);
  }
}

无需其他配置——插件即插即用。

💲 进行支付

使用此插件进行支付有两种方式。

  1. 结账:这是最简单的方式;该插件处理所有支付过程中涉及的过程(除了交易初始化和验证,这些应该在您的后端完成)。
  2. 刷卡:这是一种更长的做法;您处理所有回调和 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.bankCheckoutMethod.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 的 iOSAndroid 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类。