escolalms/payments

Escola LMS 支付包。

0.2.20 2024-05-07 13:26 UTC

README

swagger codecov phpunit downloads downloads downloads Maintainability Mutation testing badge

目的

此包允许您通过外部支付提供程序(网关)的集成来创建支付并处理它们。

依赖关系

  • Stripe 集成基于 league/omnipayomnipay/stripe 包。
  • Przelewy24 集成基于 mnastalski/przelewy24-php 包。
  • 可选的 escolalms/settings 包集成允许使用设置 API(和管理面板)更改支付网关 API 密钥和密钥。

安装

  • composer require escolalms/payments
  • php artisan migrate
  • php artisan db:seed --class="EscolaLms\Cart\Database\Seeders\CartPermissionSeeder"

使用

门面

支付门面

使用 EscolaLms\Payments\Facades\Payments 开始支付处理。您可以从模型(使用可支付特性)或从预先创建的支付对象中创建 `PaymentProcessor`。

use EscolaLms\Cart\Models\Cart;
use EscolaLms\Payments\Dtos\PaymentMethodDto;
use EscolaLms\Payments\Facades\Payments;

$payable = Cart::find($id); // Cart must implement Payable interface and use Payable trait
$paymentMethodDto = PaymentMethodDto::instantiateFromRequest($request);
$processor = Payments::processPayment($payable);
$processor->purchase($paymentMethodDto); // will emit PaymentPaid event on success
if($payment->status->is(PaymentStatus::PAID)){
    // ...
}

支付网关门面

使用 EscolaLms\Payments\Facades\PaymentGateway 直接调用支付提供程序网关。

对于现有的支付,例如可以这样做

use EscolaLms\Payments\Dtos\PaymentMethodDto;
use EscolaLms\Payments\Facades\PaymentGateway;
use EscolaLms\Payments\Models\Payment;

$payment = Payment::find($id);
$paymentMethodDto = PaymentMethodDto::instantiateFromRequest($request);
$paymentDto = PaymentDto::instantiateFromPayment($payment); // or you can create it manually
PaymentGateway::purchase($paymentDto, $paymentMethodDto); // will use default payment driver

重要:这将不会保存 Payment 对象。

要使用特定驱动程序,可以调用

PaymentGateway::driver('stripe')->purchase($paymentDto, $paymentMethodDto);

可用的支付驱动程序

  • stripe(使用 Stripe 支付意图
  • 免费
  • przelewy24
  • 待办事项:stripe-checkout

可支付特性和接口

Payable 特性和接口是此包的核心,它简化了对 PaymentsServiceGatewayManager 的调用。当您将其包含在表示 Payable 的模型(例如 CartOrderProduct)中时,您可以开始处理该 Payable 的支付,通过调用 $payable->process(),它调用 Payments::processPayable($this) 并自动创建一个 Payment 并返回该支付的 PaymentProcessor 实例。

EscolaLms\Cart 包在 EscolaLms\Cart\Models\Order 中使用此特性和接口。

支付处理器

EscolaLms\Payments\Entities\PaymentProcessor 是一个特殊类,它围绕 Payment 包装并包含与处理该支付相关的功能,例如生成支付网关链接、在购买后自动设置支付状态、发出与支付状态相关的事件等。

use EscolaLms\Payments\Dtos\PaymentMethodDto;
use EscolaLms\Payments\Entities\PaymentProcessor;
use EscolaLms\Payments\Models\Payment;

$payment = Payment::find($id);
$paymentMethodDto = PaymentMethodDto::instantiateFromRequest($request);
$processor = new PaymentProcessor($payment); // instead of using Payments facade
$processor->purchase($paymentMethodDto);

PaymentProcessor 在支付金额等于 0 时自动选择 free 驱动程序。

支付模型

此包定义了一个 EscolaLms\Payments\Models\Payment,它包含所有关于给定支付的数据,这些数据对于支付网关工作所需。

端点

所有端点均在 swagger 中定义。

测试

运行 ./vendor/bin/phpunit 以运行测试。查看 tests/Mocks/Payable 了解如何定义可支付对象。

测试详情:codecov phpunit

事件

  • EscolaLms\Payments\Events\PaymentCancelled - 在支付处理被取消(由用户操作或可能是来自支付网关的超时)后发出
  • EscolaLms\Payments\Events\PaymentFailed - 在支付失败(支付网关返回错误)后发出
  • EscolaLms\Payments\Events\PaymentRegistered - 当创建新付款时发出
  • EscolaLms\Payments\Events\PaymentSuccess - 当支付网关返回成功时发出

监听器

此包中没有定义监听器。

如何在前端使用此包

管理面板

左侧菜单

Admin panel menu

付款列表

List of Payments

权限

权限在 枚举 中定义,并在 种子文件 中初始化。

路线图。待办事项。故障排除

  • ???