webcraft / lunar-mollie
Lunar的Mollie支付驱动程序。
Requires
- php: ^8.1
- laravel/framework: ^9.0|^10.0|^11.0
- livewire/livewire: ^2.0|^3.0
- lunarphp/lunar: ^0.4|^0.5|^0.6|^0.7|^0.8|^1.0
- mollie/laravel-mollie: ^2.25
Requires (Dev)
- mockery/mockery: ^1.4.4
- orchestra/testbench: ^7.0|^8.0
- pestphp/pest: ^1.23
README
Lunar 是一个领先的包,它将电子商务功能引入Laravel。
Mollie是一个支付提供商,支持各种支付方式,例如:Apple Pay、Bancontact、银行转账、Belfius、信用卡、直接借记、EPS、礼品卡、Giropay、iDEAL、KBC、MyBank、PayPal、Paysafecard、Przelewy24和Sofort。
此插件提供了Lunar的AbstractPayment接口的Mollie实现,以及一个用于您店面使用的支付组件。它使用Laravel Livewire和Tailwind构建。
要求
- Lunar >=
0.4
- 一个 Mollie 账户
- Laravel Livewire(如果使用前端组件)
安装
需要composer包
composer require webcraft/lunar-mollie
发布配置
这将发布配置到 config/lunar/mollie.php
。
php artisan vendor:publish --tag=lunar.mollie.config
发布视图(可选)
Lunar Mollie附带一个用于您结账时使用的辅助组件,如果您打算编辑它提供的视图,您可以发布它们。
php artisan vendor:publish --tag=lunar.mollie.components
发布翻译(可选)
结账组件使用按钮、支付方式等的翻译。如果您想编辑这些,您可以发布它们。
php artisan vendor:publish --tag=lunar.mollie.translations
启用驱动程序
在 config/lunar/payments.php
中设置驱动程序
<?php return [ // ... 'types' => [ 'mollie' => [ 'driver' => 'mollie', ], ], ];
添加您的Mollie凭据和其他配置
查看 config/mollie.php
中的配置。在适当的情况下,编辑或设置您 .env
文件中的环境变量。至少需要设置键。
MOLLIE_LIVE_KEY= MOLLIE_TEST_KEY=
密钥可以在您的Mollie账户中找到: https://my.mollie.com/dashboard/developers/api-keys
您可以使用 MOLLIE_TEST_MODE
环境变量在实时和测试模式之间切换。
店面使用
此插件提供了一个用于您店面使用的支付组件。它使用Laravel Livewire和Tailwind构建。在继续之前,请确保已安装并配置了这些依赖项。
添加支付组件

在您希望支付表单出现的地方添加此组件
@livewire('mollie.payment', [ 'cart' => $cart, ])
如果您使用的是 Lunar的Livewire Starter Kit,您可以将此代码添加到 payment.blade.php
视图中,例如。
<div class="bg-white border border-gray-100 rounded-xl"> <div class="flex items-center h-16 px-6 border-b border-gray-100"> <h3 class="text-lg font-medium"> Payment </h3> </div> @if ($currentStep >= $step) <div class="p-6 space-y-4"> @livewire('mollie.payment', [ 'cart' => $cart, ]) </div> @endif </div>
默认情况下,该组件将仅显示一个“继续支付”按钮,将用户重定向到Mollie托管支付方式选择屏幕。
如果您想从结账表单中直接显示可用的支付方式,请转到 config/lunar/mollie.php
,将 specify_payment_methods
设置为 true
并取消注释 payment_methods
中所有可用的支付方式。别忘了这些支付方式也需要在您的Mollie账户中启用。
[ //... 'specify_payment_methods' => true, 'payment_methods' => [ 'bancontact', 'creditcard', 'ideal', 'paypal', ], ]
Webhooks
每次支付尝试(无论成功与否)后,Mollie都会向您的应用程序发送webhook。处理此webhook的路由和逻辑已经实现。但是,如果您想编写自己的逻辑,您可以创建自己的命名路由,并将 webhook_route
配置值更改为您的路由名称。
实现重定向路由
支付尝试后,Mollie将用户重定向回您的应用程序。默认情况下,MollieRedirectController
将处理此重定向并将用户重定向到结账成功或失败页面。但是,如果您想实现自己的逻辑,您可以创建自己的命名路由,并将 redirect_route
配置值更改为您的路由名称。
虽然包已经实现了 MollieRedirectController
,但这只是一个中继控制器,会将用户重定向到结账成功或失败的页面。这些状态页面不是由包实现的,因为这些可能特定于您的主题。有4个状态需要页面:已支付、已取消、未结账和失败。您需要自行创建这些页面的命名路由,分别是 checkout-success.view
、checkout-canceled.view
、checkout-open.view
和 checkout-failure.view
。如果您想更改这些名称,可以在配置中进行修改。
[ //... 'payment_paid_route' => 'checkout-success.view', 'payment_canceled_route' => 'checkout-canceled.view', 'payment_open_route' => 'checkout-open.view', 'payment_failed_route' => 'checkout-failure.view', ]
以下是结账成功页面组件的一个示例
//app/Http/Livewire/CheckoutSuccessPage.php <?php namespace App\Http\Livewire; use Livewire\Component; use Lunar\Facades\CartSession; use Lunar\Models\Cart; use Lunar\Models\Order; class CheckoutSuccessPage extends Component { public ?Cart $cart; public Order $order; public function mount() { $this->cart = CartSession::current(); if (! $this->cart || ! $this->cart->completedOrder) { $this->redirect('/'); return; } $this->order = $this->cart->completedOrder; CartSession::forget(); } public function render() { return view('livewire.checkout-success-page'); } }
//resources/views/livewire/checkout-success-page.blade.php <section class="bg-white"> <div class="max-w-screen-xl px-4 py-32 mx-auto sm:px-6 lg:px-8 lg:py-48"> <div class="max-w-xl mx-auto text-center"> <h1 class="mt-8 text-3xl font-extrabold sm:text-5xl"> <span class="block mt-1 text-blue-500"> Thank you for your order </span> </h1> <p class="mt-4 font-medium sm:text-lg"> Your order reference number is <strong> {{ $order->reference }} </strong> </p> <a class="inline-block px-8 py-3 mt-8 text-sm font-medium text-center text-white bg-blue-600 rounded-lg hover:ring-1 hover:ring-blue-600" href="{{ url('/') }}"> Back Home </a> </div> </div> </section>
//routes/web.php Route::get('checkout/success', \App\Http\Livewire\CheckoutSuccessPage::class)->name('checkout-success.view');
您可以为其他状态页面做类似处理。
测试
composer test
贡献
欢迎贡献,如果您考虑添加功能,请先提交一个问题。
关于Webcraft
Webcraft 是来自比利时的一名自由职业网页开发者 Michiel Loncke 的公司,专注于使用 Laravel 和 Lunar 构建定制网络应用和电子商务解决方案。如果您需要项目帮助,请随时联系我们。