sepayvn/laravel-sepay

Laravel SePay 包 - 银行转账自动化支付解决方案

v1.2.0 2024-05-22 08:36 UTC

This package is auto-updated.

Last update: 2024-09-08 10:59:04 UTC


README

安装

您可以通过 composer 安装此包

composer require sepayvn/laravel-sepay

适用于 Laravel 7, 8 和 PHP 7.4 及以上版本

composer require "sepayvn/laravel-sepay:dev-lite"

您可以使用以下命令发布和运行迁移

php artisan vendor:publish --tag="sepay-migrations"
php artisan migrate

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="sepay-config"

这是发布配置文件的内容

return [
    'webhook_token' => env('SEPAY_WEBHOOK_TOKEN'),
    'pattern' => env('SEPAY_MATCH_PATTERN', 'SE'),
];

可选地,您可以使用以下命令发布视图

php artisan vendor:publish --tag="sepay-views"

使用方法

创建 SePayWebhookListener

php artisan make:listener SePayWebhookListener
<?php

namespace App\Listeners;

use App\Models\User;
use SePay\SePay\Events\SePayWebhookEvent;
use SePay\SePay\Notifications\SePayTopUpSuccessNotification;

class SePayWebhookListener
{
    /**
     * Create the event listener.
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     */
    public function handle(SePayWebhookEvent $event): void
    {
        // Xử lý tiền vào tài khoản
        if ($event->sePayWebhookData->transferType === 'in') {
            // Trường hợp $info là user id
            $user = User::query()->where('id', $event->info)->first();
            if ($user instanceof User) {
                $user->notify(new SePayTopUpSuccessNotification($event->sePayWebhookData));
            }
        } else {
            // Xử lý tiền ra tài khoản
        }
    }
}
  • 对于 Laravel 11 及以下版本(7, 8, 9, 10)

    将 SePayWebhookListener 注册到 app/Providers/EventServiceProvider.php

        protected $listen = [
            ...
            \SePay\SePay\Events\SePayWebhookEvent::class => [
                \App\Listeners\SePayWebhookListener::class,
            ],
        ];
  • 对于 Laravel 11,将 SePayWebhookListener 放在 app/Listeners 目录中,Laravel 将自动将其与 SePayWebhookEvent 绑定,您无需在 Provider 中注册,避免重复调用。

    如果您发现 SePayWebhookListener 未监听 SePayWebhookEvent,则可以在 app/Providers/AppServiceProvider.phpboot 方法中执行以下操作:

    public function boot(): void
    {
        \Illuminate\Support\Facades\Event::listen(
            \SePay\SePay\Events\SePayWebhookEvent::class,
            \App\Listeners\SePayWebhookListener::class,
        );
    }

Webhook

  1. 访问SePay Webhooks

  2. 点击右上角的 添加 Webhook 按钮

  3. 需要填写的信息,请填写,以下几项需要注意:

    1. domain.com 替换为您的域名
    2. 认证类型:为 Api Key
    3. API Key:输入一个由字母和数字组成的随机密钥(如示例所示,不要有标点符号)
  4. 将您的 Laravel 应用程序中的 .env 文件修改如下

    1. SEPAY_WEBHOOK_TOKEN - 是步骤 3.3 中输入的 API Key
    2. SEPAY_MATCH_PATTERN - 默认为 SE,您可以根据您的应用程序进行修改

使用 Postman 进行测试

在 Postman 中点击导入,并粘贴以下代码

curl --location 'https://domain.com/api/sepay/webhook' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer Apikey đây_là_khóa_bí_mật' \
--data '{
    "gateway": "MBBank",
    "transactionDate": "2024-05-25 21:11:02",
    "accountNumber": "0359123456",
    "subAccount": null,
    "code": null,
    "content": "Thanh toan QR SE123456",
    "transferType": "out",
    "description": "Thanh toan QR SE123456",
    "transferAmount": 1700000,
    "referenceCode": "FT123456789",
    "accumulated": 0,
    "id": 123456
}'

测试

composer test

支持开发者

您可以通过以下服务支持此包的开发者:

变更日志

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

贡献

请参阅CONTRIBUTING 了解详细信息。

安全漏洞

请参阅我们的安全策略 了解如何报告安全漏洞。

鸣谢

许可证

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