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

当前支持的支付处理器

目前,该包支持以下在线支付处理器/处理程序

key: **指定支付处理器的实现尚未完成。如果您无法等待,请提交PR😉

您首选的支付处理器尚未支持?请考虑创建适当的issue类型

添加新的支付处理器很简单。只需添加一个继承自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,并且交易参考将作为transaction_reference包含在URL查询字符串中。

如果您在成功支付后想采取额外的步骤,请监听SuccessfulLaravelMultipayPaymentEvent。每当发生成功支付时,都会触发该事件,并附带相应的Payment模型。

支付冲突解决(PCR)

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

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

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

支付通知(WebHooks)

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

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

测试

composer test

致谢

本包的实现得益于以下优秀项目的出色工作

许可

MIT许可(MIT)。请参阅许可文件以获取更多信息。