maksa988/laravel-wayforpay

Laravel 的 WayForPay 付款

v1.0.2 2020-11-02 15:28 UTC

This package is auto-updated.

Last update: 2024-09-13 12:18:05 UTC


README

Latest Stable Version StyleCI CodeFactor Total Downloads License

通过此 Laravel 框架包(Laravel)接受 WayForPay(《wayforpay.com》)的付款。

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

Laravel >= 5.5.*, PHP >= 7.2

安装

使用 composer 需要此包。

composer require "maksa988/laravel-wayforpay"

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

Maksa988\WayForPay\WayForPayServiceProvider::class,

WayForPay 门面添加到您的门面数组

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

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

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

配置

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

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

用法

此包使用官方 WayForPay SDK for PHP。您可以在官方 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 \Maksa988\WayForPay\Domain\Client('John', 'Doe', 'johndoe@gmail.com');

$products = new \Maksa988\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 \Maksa988\WayForPay\Domain\Card('5276999765600381', '05', '2021', '237', 'JOHN DOU');
$cardToken = new \Maksa988\WayForPay\Domain\Card('1aa11aaa-1111-11aa-a1a1-0000a00a00aa');

您可以使用 \Maksa988\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. 检查状态

检查状态请求用于在 orderReference 上检查付款状态。

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

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

$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

如果商户交易安全类型为 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() 方法。

在第一个参数中,您应该放置请求数据数组或 Arrayble 类。在第二个参数中,您应该放置在支付成功时被调用的 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();
    });
}

更新日志

请参阅 CHANGELOG 了解最近更改的详细信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全性

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

鸣谢

许可证

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