zfhassaan/payfast

Laravel 9 版本 Payfast 支付网关包

v1.0.3 2023-06-19 13:35 UTC

This package is auto-updated.

Last update: 2024-09-12 05:28:38 UTC


README

PayFast Payment Gateway

Latest Version on Packagist MIT Licensed Total Downloads Hits

免责声明

这是一个非官方的 Payfast API 支付网关。此仓库仅创建用于帮助开发者简化集成过程。您可以在此处查看官方支付网关。

此包仅涵盖直接结账和托管结账流程。目前尚未启用订阅选项,它将在下一个版本中添加。

关于

此文档包含关于如何与 Payfast API 的基于交易功能集成的详细说明。此文档还包含在线交易的详细信息。v1.0.0

目标受众

此文档面向希望与 Payfast 集成以执行基于 API 的交易的商家和开发者。

集成范围

商家将实现所有电子商务功能。PayFast 服务(PayFast)仅用于支付处理。

API 端点

本节包含 Payfast 提供的所有 API 的详细信息。这些 API 可以由商家、收单方和/或聚合器调用。这些 API 基于 REST 架构,并为响应负载提供标准 HTTP 状态码。

集成先决条件

商家在集成之前必须在 PayFast 上注册。商家在为 PayFast 账户注册后,将向商家提供以下两个唯一值,以供操作使用:Merchant_IDSecured_key,这些密钥用于获取一次性认证令牌,该令牌用于对“PayFast”支付网关的支付请求进行认证。

安装

您可以通过 composer 安装此包

composer require zfhassaan/payfast

设置 .env 配置

PAYFAST_API_URL=
PAYFAST_SANDBOX_URL=
PAYFAST_GRANT_TYPE=
PAYFAST_MERCHANT_ID=
PAYFAST_MODE=
PAYFAST_SECURED_KEY=
PAYFAST_RETURN_URL=

配置

将这些文件添加到 app/config.php

  /*
    * Package Service Providers...
    */

  \zfhassaan\Payfast\PayfastServiceProvider::class,

并在 app/config.php 中的别名中

  'aliases' => Facade::defaultAliases()->merge([
        'Payfast' => \zfhassaan\Payfast\Payfastfacade::class,
    ])->toArray(),

步骤

直接结账
  1. 获取认证令牌
  2. 验证客户信息
  3. 启动交易
托管结账
  1. 获取认证令牌
  2. 在 Payfast 页面上启动交易

直接结账和托管结账凭据可以从 Payfast 获取。以下是可以用于 PCIDSS 认证网站的直接结账方法。您可以在 维基页面上了解更多关于如何启动托管结账的信息

什么是 PCIDSS 认证。

PCI 认证通过 PCI SSC 建立的一套要求确保了您的业务中卡数据的安全性。这包括许多众所周知的最佳实践,例如:安装防火墙。数据传输加密,使用防病毒软件。此外,企业必须限制对持卡人数据的访问并监控对网络资源的访问。

PCI 合规性安全提供了一种宝贵的资产,它告知客户您的业务是安全的。相反,不合规的成本,无论是货币还是声誉方面的,都应该足以让任何企业主认真对待数据安全。

泄露敏感客户信息的数据泄露可能会对企业造成严重影响。泄露可能引起支付卡发行商的罚款、诉讼、销售额下降以及严重损害声誉。

在经历泄露后,企业可能必须停止接受信用卡交易或被迫支付比安全合规初始成本更高的后续费用。对 PCI 安全程序的投入在很大程度上有助于确保您的商业的其他方面免受恶意网络行为者的侵害。

托管结账

托管结账需要遵循以下步骤;

  1. 从Payfast获取认证令牌
  2. 使用md5标准创建签名 md5($merchant_id.':' . $merchant_name.':'.$amount.':'.$order_id)
  3. 为网站创建负载。网站负载可能看起来像这样
...
...
$backend_callback = "signature=".$signature."&order_id=".$order_id;
...
...
$payload = array(
            'MERCHANT_ID' => $merchant_id, // Merchant ID received from Payfast
            'MERCHANT_NAME' => $merchant_name, // Merchant Name registered with Payfast.
            'TOKEN' => $ACCESS_TOKEN, // Access Token received from Payfast.
            'PROCCODE' => 00, // status code default is 00
            'TXNAMT' => $amount, // Transaction Amount or total amount
            'CUSTOMER_MOBILE_NO' => $mobile, // Customer Mobile Number
            'CUSTOMER_EMAIL_ADDRESS' => $email, // Customer Email address
            'SIGNATURE' => $signature, // Signature as described in above step 2.
            'VERSION' => 'WOOCOM-APPS-PAYMENT-0.9', // Optional
            'TXNDESC' => 'Products purchased from ' .$merchant_name, // Transaction Description to show on website
            'SUCCESS_URL' => urlencode($successUrl), // Success URL where to redirect user after success
            'FAILURE_URL' => urlencode($failUrl), // Failure URL where to redirect user after failure
            'BASKET_ID' => $order_id, // Order ID from Checkout Page.
            'ORDER_DATE' => date('Y-m-d H:i:s', time()), // Order Date 
            'CHECKOUT_URL' => urlencode($backend_callback), // Encrypted Checkout URL
        );
		
  1. 在Payfast提供的URL上提交。

用法

use zfhassaan\Payfast\Payfast;
...
...

/**
 * Validate Customer and get OTP Screen.
 * Step 1
 */
public function checkout(Request $request) {
  $payfast = new Payfast();
  $response = $payfast->getToken();
  if($response != null && $response->code == "00" ){
      $payfast->setAuthToken($response->token);
  } else {
      abort(403, 'Error: Auth Token Not Generated.');
  }
  $show_otp = $payfast->customer_validate($request->all());
  return $show_otp;
}

/**
 * Receive 3ds PaRes from Callback. 
 * This will be called on Callback from OTP Screen.
 * You can Show Proceed to Payment Screen or Complete Transaction Screen.
 * Step 2
 */
public function callback(Request $request) {
    return response()->json($request->all());
}

/**
 * Send a request again with Required Params and complete the transaction
 * Proceed to Payment and complete Transaction
 * Step 3 
 */
public function proceed(Request $request) {
  $payfast = new Payfast();
  $response = $payfast->initiate_transaction($request);
  return $response;
}


/**
 * Mobile Wallet Account Initiate Transaction 
 * This is demo function for Easy Paisa. 
 * 
 */

public function payfast(Request $request)
{
    $payfast = new Payfast();
    $response = $payfast->getToken();
    if($response != null && $response->code == "00" ){
        $payfast->setAuthToken($response->token);
    } else {
        abort(403, 'Error: Auth Token Not Generated.');
    }
    $show_otp = $payfast->wallet($request->all());
    return $show_otp;
}

变更日志

请参阅变更日志以获取更多关于最近更改的信息。

安全性

以下内容摘自briandk 仓库,以在开源项目中做出贡献。

优秀的错误报告通常具有

  • 简要总结和/或背景
  • 重现步骤
    • 具体说明!
    • 如果可能,提供示例代码。一个问题包括示例代码,任何具有基础R设置的人都可以运行以重现我所看到的情况
  • 你期望发生的事情
  • 实际发生的事情
  • 备注(可能包括你为什么认为可能发生这种情况,或你没有成功的尝试过的东西)

许可证

MIT许可证(MIT)。请参阅许可证文件获取更多信息。