damms005/laravel-cashier

此包已被弃用且不再维护。作者建议使用 damms005/laravel-multipay 包。

一个有观点的、易于扩展和配置的Laravel支付处理包

v3.10.1 2024-09-25 11:31 UTC

README

Art image for laravel-multipay

GitHub GitHub tag (with filter) Total Downloads GitHub Workflow Status (with event)

一个用于处理支付的有观点Laravel包,包含blade视图、路由以及所有中间内容。

无论是快速为您的Laravel应用程序启动支付处理,还是想测试支持的支付处理器,这个包都能满足您的需求。

虽然是有观点的,但此包允许您“主题化”视图。它通过在 config('laravel-multipay.extended_layout')(默认为 layout.app)中指定任何视图来扩展 @extend(),从而实现主题化。这提供了一个无缝的即插即用™体验。

要求

此包已针对以下进行测试:

  • Laravel 8/9/10
  • PHP 8.0, 8.1

当前支持的支付处理器

目前,此包支持以下在线支付处理器/处理器:

注意:指定支付处理器的实现尚未完成。如果您不能等待,请考虑提交PR。

如果您的首选支付处理器尚未支持,请考虑 打开适当类型的问题

添加新的支付处理器很简单。只需添加一个扩展 Damms005\LaravelMultipay\Services\PaymentHandlers\BasePaymentHandler 的类,并实现 Damms005\LaravelMultipay\Contracts\PaymentHandlerInterface

注意
如您所述注册的支付提供程序将从 Laravel 容器 中解析,以提高此包的灵活性和改进DX。

安装

您只需做三件事

  • 通过composer安装。
composer require damms005/laravel-multipay
  • 发布配置文件。
php artisan vendor:publish --tag=laravel-multipay-config
  • 运行迁移。
php artisan migrate

演示仓库

我发布了一个开源应用程序,该应用程序使用此支付包。它也是一个使用 Laravel Vite 和利用 Laravel Echo 的Laravel应用程序的绝佳示例,通过使用 Laravel Websocket 的公共和私有通道提供实时体验,并由 Livewire 驱动。该应用程序称为 NFT Marketplace. 点击这里查看✌🏼

测试驾驶 🚀

想试一试?访问 /payment/test-drive (由此包提供的 route('payment.test-drive'))。对于 Paystack,请确保在您之前安装时发布的 laravel-multipay.php 配置文件中将 paystack_secret_key 键设置好。您可以从您的 设置页面 获取密钥。

警告
请确保您已经安装了 TailwindCSS,然后添加此包的视图到您的 tailwind.config.js 配置文件的 content 键中,如下所示

    content: [
        ...,
        './vendor/damms005/laravel-multipay/views/**/*.blade.php',
    ],
    ...

需要的第三方集成

  • Flutterwave:如果您想使用Flutterwave,请确保从仪表板获取您的API详情 (请点击此处),并使用它来设置以下环境变量
FLW_PUBLIC_KEY=FLWPUBK-xxxxxxxxxxxxxxxxxxxxx-X
FLW_SECRET_KEY=FLWSECK-xxxxxxxxxxxxxxxxxxxxx-X
FLW_SECRET_HASH='My_lovelysite123'
  • Paystack:Paystack需要密钥。请访问 Paystack仪表板 获取密钥,并使用它来设置以下环境变量
PAYSTACK_SECRET_KEY=FLWPUBK-xxxxxxxxxxxxxxxxxxxxx-X
  • Remita:确保设置以下环境变量
REMITA_MERCHANT_ID=xxxxxxxxxxxxxxxxxxxxx-X
REMITA_API_KEY=xxxxxxxxxxxxxxxxxxxxx-X

对于上述大多数环境变量,您最好使用(已发布的)配置文件来设置相应的值。

用法

典型流程

步骤 1

/payment/details/confirm 发送 POST 请求(由本包提供的 route('payment.show_transaction_details_for_user_confirmation') 提供)。

检查 InitiatePaymentRequest 表单请求类,了解您需要提交到此端点的值。(提示:您也可以查看 test-drive/pay.blade.php)。

POST 请求通常通过从前端提交表单来实现。

提示:如果您需要与此支付一起存储额外的/上下文数据,您可以在名为 metadata 的字段中包含此类数据。该值必须是有效的JSON字符串。

步骤 2

在用户确认交易后,用户将被重定向到适当的支付处理程序网关。

步骤 3

当用户在支付处理程序端完成交易(无论是成功支付还是交易被拒绝)时,用户将被重定向回 /payment/completed(由本包提供的 route('payment.finished.callback_url'))。

如果 Paymentmetadata(与支付启动请求一起提供),其中有一个名为 completion_url 的键,则在成功支付后,用户将被重定向到该URL,并在URL查询字符串中包含 transaction_reference 作为交易参考。

如果成功支付后您想执行额外的步骤,请监听 SuccessfulLaravelMultipayPaymentEvent。每当发生成功支付时,它都会触发,并带有相应的 Payment 模型。

支付冲突解决(PCR)

如果由于任何原因,您的用户/客户声称他们已成功支付,但您的平台没有反映这种成功的支付,则此PCR功能使您能够通过简单地调用来解决这个问题

/**
* @var bool //true if payment was successful, false otherwise
**/
$outcome = LaravelMultipay::reQueryUnsuccessfulPayment( $payment )

将重新解决此支付,并在数据库中更新支付。如果支付成功,将触发 SuccessfulLaravelMultipayPaymentEvent 事件,您将有机会运行任何特定于域/应用程序的程序。

支付通知(WebHooks)

一些支付处理程序提供发送成功通知详情的途径。通常,您需要向支付处理程序提供URL,以便将此类通知的详情发送到该URL。如果您需要此功能,通知URL由本包提供的 route('payment.external-webhook-endpoint') 处理。

如果您使用此支付通知URL功能,请确保在您的 SuccessfulLaravelMultipayPaymentEvent 处理程序中检查,您是否已先前处理过该同一支付的该事件。

测试

composer test

致谢

本包的实现得益于以下出色项目所做的工作:

许可证

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