sonix/laravel-wayforpay

为 Laravel 的 WayForPay 付款

dev-main 2023-01-10 09:39 UTC

This package is auto-updated.

Last update: 2024-09-10 13:06:54 UTC


README

此仓库是从原始 https://github.com/maksa988/laravel-wayforpay 分叉而来,由于原始项目长时间未更新,我决定分叉并独立工作,以继续支持该应用程序。

WayForPay 付款网关的 Laravel 付款处理器包

使用此 Laravel 框架包 (Laravel) 通过 WayForPay (wayforpay.com) 接受付款。

  • 只需添加两个回调即可接收付款

Laravel >= 8.0.2

安装

使用 composer 安装此包。

composer require "sonix/laravel-wayforpay"

如果您不使用自动发现,请将 ServiceProvider 添加到 config/app.php 中的 providers 数组

Sonix\WayForPay\WayForPayServiceProvider::class,

WayForPay 面向对象添加到您的面向对象数组中

'WayForPay' => Sonix\WayForPay\Facades\WayForPay::class,

使用发布命令将包配置复制到您的本地配置

php artisan vendor:publish --provider="Sonix\WayForPay\WayForPayServiceProvider"

配置

发布配置文件后,请编辑 config/wayforpay.php 中的配置文件。

  • wayforpay.com 上创建账户和商户
  • 添加您的项目,复制 merchantAccountmerchantAccountmerchantSecretKey 参数,并将它们粘贴到 config/wayforpay.php
  • 配置发布后,编辑 config/wayforpay.php

用法

此包使用官方的 WayForPay SDK。您可以在官方 SDK 仓库中找到此包使用的类和内容的完整描述和内容 - wayforpay/php-sdk

1. 购买

购买请求用于在受保护的 WayForPay 网站上与客户端进行支付。

官方文档 - https://wiki.wayforpay.com/en/view/852102

方法 purchase() 允许您为小部件或表单准备数据。您还可以获取包含数据的数组以构建您的表单。

$order_id = time(); // Payment`s order ID
$amount = 100; // Payment`s amount
$client = new \Sonix\WayForPay\Domain\Client('John', 'Doe', 'johndoe@gmail.com');
$products = new \Sonix\WayForPay\Collection\ProductCollection([
    new \WayForPay\SDK\Domain\Product('iPhone 12', 10, 1),
]);
//
$data = WayForPay::purchase($order_id, $amount, $client, $products)->getData(); // Array of data for using to create your own form.
$form = WayForPay::purchase($order_id, $amount, $client, $products)->getAsString($submitText = 'Pay', $buttonClass = 'btn btn-primary'); // Get html form as string

您可以在调用 purchase 方法后使用 getWidget 方法获取小部件的 JS 代码 (https://wiki.wayforpay.com/en/view/852091)。

$widget = WayForPay::purchase($order_id, $amount, $client, $products)->getWidget($callbackJsFunction = null, $buttonText = 'Pay', $buttonClass = 'btn btn-primary'); // Get html form as string

2. 充值

充值请求用于快速支付,一步完成。它是在单阶段模式范围内执行的。

请求处理的结果是从客户端的卡中提取货币资产。

官方文档 - https://wiki.wayforpay.com/en/view/852194

方法 charge() 允许您发送充值请求并获得响应对象。

$card = new \Sonix\WayForPay\Domain\Card('5276999765600381', '05', '2021', '237', 'JOHN DOU');
$cardToken = new \Sonix\WayForPay\Domain\Card('1aa11aaa-1111-11aa-a1a1-0000a00a00aa');

您可以使用 \Sonix\WayForPay\Domain\Card::class 代替 WayForPay\SDK\Domain\Card 和或 WayForPay\SDK\Domain\CardToken。此类通过一个类简化了输入卡和卡令牌。当您只放入第一个参数时,此卡被定义为卡令牌。如果您放入所有参数,则此卡被定义为银行卡。

$response = WayForPay::charge($order_id, $amount, $client, $products, $card);
$response = WayForPay::charge($order_id, $amount, $client, $products, $cardToken);
echo "Status: ". $response->getTransaction()->getStatus();

3. 检查状态

检查状态请求用于检查订单引用上的支付状态。

官方文档 - https://wiki.wayforpay.com/en/view/852117

方法 check() 允许您使用订单号发送检查订单状态的请求。

$order = WayForPay::check($order_id)->getOrder();
echo "Status: ". $order->getStatus();

4. 退款

退款请求用于资产退款或取消支付。

官方文档 - https://wiki.wayforpay.com/en/view/852115

方法 refund() 允许您发送退款请求。

WayForPay::refund($order_id, $amount, $currency, $comment)->getTransactionStatus();

5. 创建发票

当前API允许为客户开具商品/服务的支付发票。

官方文档 - https://wiki.wayforpay.com/en/view/608996852

方法 createInvoice() 允许您创建发票。

$invoice = WayForpay::createInvoice($order_id, $amount, $client, $products);
$url = $invoice->getInvoiceUrl();
$qrCode = $invoice->getQrCode();

6. 完成3DS

如果 merchantTransactionSecureTtype=3DS,系统最初会检查卡片是否参与3D Secure程序。如果卡片支持3D Secure验证,Wayforpay系统将返回客户端身份验证的参数。商户必须使用这些参数将客户端转到发卡行的认证URL。验证会话有效的时间为10分钟。如果在10分钟内没有获得 COMPLETE_3DS,系统将取消交易,视为失败。

$response = WayForPay::complete3ds($authTicket, $d3Md, $d3Pares);
$response->getTransaction();

7. 处理支付

您可以使用WayForPay的服务URL处理支付过程。通过Laravel的控制器和此包,您可以处理支付。

要处理来自WayForPay的请求,您应该创建控制器和操作。在操作中,您应该使用方法 handleServiceUrl()

在第一个参数中,您应该放置请求数据的数组或 Arrayable 类。在第二个参数中,您应该放置一个 Closure,它在支付成功时被调用,并将传递两个参数:Transaction 对象和用于创建成功响应的 Closure

// Controller action
public function handle(Request $request)
{
    return WayForPay::handleServiceUrl($request, function (\WayForPay\SDK\Domain\Transaction $transaction, $success) {
        if($transaction->getReason()->isOK()) {
            // Payment confirmation process and etc...
            return $success();
        }
        return "Error: ". $transaction->getReason()->getMessage();
    });
}

更新日志

有关最近更改的更多信息,请参阅更新日志

贡献

有关详细信息,请参阅贡献指南

安全

如果您发现任何与安全相关的问题,请通过电子邮件发送给我 maksa988ua@gmail.com,而不是使用问题跟踪器。

鸣谢

许可协议

MIT许可(MIT)。有关更多信息,请参阅许可文件