jinseokoh/bootpay

非官方的 BootPay 包用于 Laravel

1.2.0 2022-03-02 10:09 UTC

This package is auto-updated.

Last update: 2024-09-29 04:43:35 UTC


README

Total Downloads License

这是一个用于 Laravel 项目的 PHP Laravel 包,可用于使用 BootPay。

虽然 BootPay 官方提供了用于 PHP 的 GitHub 仓库 GitHub,但遗憾的是,无法通过 Composer 这样的 PHP 依赖管理器轻松添加代码,因此为了方便现代 PHP 开发者使用 BootPay,我将其打包。

BootPay 支付是通过 JS 客户端 SDK 实现的,而验证和取消操作则通过此包进行。由于此包中提供的代码与 BootPay 官方代码相同,因此可能存在无法正常执行的所有调用,但除了验证和取消之外的定期订阅等附加功能尚未使用,因此如果发现任何问题,请通过问题报告。

安装

要安装此包,请在终端中运行以下命令。

composer require jinseokoh/bootpay

使用方法

从 Laravel 5.5 开始提供的 Package Auto-Discovery 功能,安装此包时将自动注册 ServiceProvider 和 Facade 等。从 1.2.0 版本开始支持 Laravel 8/9 新版本。

配置

必须在 Laravel 项目的 .env 文件中添加与 BootPay 相关的以下 3 个 Key/Value 值。可以访问 BootPay 管理页面以获取用于 REST API 的 Application Id 和 Private Key。

BOOTPAY_URI=https://api.bootpay.co.kr
BOOTPAY_REST_APP_ID=000000000000000000000000
BOOTPAY_PRIVATE_KEY=0000000000000000000000000000000000000000000=

示例

BootPay 文档中提到,API 调用的 AccessToken 仅有效 30 分钟。此包的处理器内部有逻辑将 AccessToken 存储在缓存层 25 分钟,然后使用超过该时间的新 AccessToken。因此,使用此包的用户不需要添加 AccessToken 管理的任何逻辑,只需执行 verify() 或 cancel() 等所需的 API 调用即可。

通常的 WebApp 流程是使用 BootPay JS 代码执行支付操作后,使用 OrderIdReceiptId 作为参数调用 Laravel API 以验证实际金额,并通过使用 API verify() 以及在 Controller 中通过 DI 注入 JinseokOh\BootPay\BootPayHanlder 类或使用 BootPay facade 来实现,如下所示。

verify() 调用示例代码

    public function verify(
        OrderVerifyRequest $request,
        BootPayHandler $bootPayHandler,
        OrderHandler $orderHandler
    ): JsonResponse {
        $orderId = $request->getOrderId();
        $receiptId = $request->getReceiptId();
        $order = $orderHandler->findById($orderId);

        try {
            $response = $bootPayHandler->verify($receiptId);
        } catch (\Throwable $e) {
            \Log::critical("[LOG] {$e->getMessage()}");
            throw $e;
        }
        :
        // 추가로직
        :
    }

对于需要取消的特定支付,调用以下 cancel() API 规则。

cancel() 调用示例代码

    public function cancel(
        OrderCancelRequest $request,
        BootPayHandler $bootPayHandler,
        OrderHandler $orderHandler
    ): JsonResponse {
        $orderId = $request->getOrderId();
        $receiptId = $request->getReceiptId();
        $order = $orderHandler->findById($orderId);

        try {
            $response = $bootPayHandler->cancel($receiptId);
        } catch (\Throwable $e) {
            \Log::critical("[LOG] {$e->getMessage()}");
            throw $e;
        }
        :
        // 추가로직
        :
    }

许可

MIT 许可证 (MIT)。