nafiswatsiq / subbase-payment
Payment gateway integration plugin for Subbase subscriptions
Requires
- php: ^8.2
- nafiswatsiq/subbase: ^1.3
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- phpunit/phpunit: ^12.5
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Payment gateway integrations for nafiswatsiq/subbase. Out-of-the-box support for popular gateways, public checkout pages, webhook handling, and payment events for subscription activation.
Quick links: Features · Requirements · Installation · Public Checkout · Events · Email Invoices · Configuration
Features
- 💳 Multiple Gateway Drivers — Built-in support for PayPal, Stripe, Midtrans, and Xendit.
- ⚙️ Custom Gateway Support — Extensible architecture to build your own payment driver.
- 🛒 Hosted Public Checkout — Modern, responsive checkout UI automatically connected with Subbase plan components.
- 🔔 Idempotent Webhooks — Secure, signature-verified webhook handling to update payment status safely.
- ⚡ Automated CLI Setup — Interactively install, configure, reset, or switch gateway drivers via
php artisan subbase-payment:install. - 📧 Email Invoices — Optional email receipt/invoice delivery upon verified payment completion.
- 🔄 Custom Redirect Flow — Easily redirect customers to named routes or external URLs after payment.
Requirements
- PHP 8.2+
- Laravel 13.0+
- Filament 5.0
nafiswatsiq/subbase^1.3
Installation
1. Install via Composer
composer require nafiswatsiq/subbase-payment
2. Publish Configuration & Migrations
php artisan vendor:publish --tag=subbase-payment-config
php artisan vendor:publish --tag=subbase-payment-migrations
3. Interactive Gateway Installer
Run the interactive installer to configure your driver:
php artisan subbase-payment:install
Or pass the driver explicitly:
php artisan subbase-payment:install --driver=paypal
Available Drivers for --driver:
paypal— PayPal REST API Gatewaystripe— Stripe Checkout Sessions Gatewaymidtrans— Midtrans Snap Gateway (Indonesia)xendit— Xendit Invoice Gateway (SE Asia)custom— Custom/Manual Gateway Driver
CI / Non-interactive setup:
php artisan subbase-payment:install --driver=paypal --no-interaction
The install command updates your .env file with SUBBASE_PAYMENT_DRIVER and the corresponding provider credentials.
4. Run Migrations
php artisan migrate
Reset / Switch Driver
Reset current driver configuration and clear driver env keys:
php artisan subbase-payment:reset
Reset and immediately switch to another driver:
php artisan subbase-payment:reset --driver=stripe --force
Public Checkout
Auto-links from Subbase <x-subbase::plan-list /> component:
/checkout/{plan-slug}
Route name: subbase-payment.checkout
Customize path/middleware/redirects in config/subbase-payment.php:
'checkout' => [ 'path' => 'checkout', 'middleware' => ['web'], 'return_url' => null, // named route or full URL after successful payment 'cancel_url' => null, // named route or full URL after canceled payment ],
Page shows plan features, locale-aware price, collects name/email before payment.
Custom Redirect After Payment
Set return_url / cancel_url to override the default status page:
| Value | Behavior |
|---|---|
null (default) |
Show built-in status page (status.blade.php) |
Named route (e.g. dashboard) |
redirect()->route('dashboard', $plan->slug) |
Full URL (e.g. https://app.example/success) |
redirect()->away('https://app.example/success') |
Example — redirect to dashboard after payment:
'checkout' => [ 'return_url' => 'dashboard', 'cancel_url' => 'plans.index', ],
Example — external URLs:
'checkout' => [ 'return_url' => 'https://app.example.com/payment/success', 'cancel_url' => 'https://app.example.com/payment/cancel', ],
Events & Subscription Lifecycle
Webhook verifies payment → dispatches PaymentReceived event.
Handle in your app (e.g. AppServiceProvider):
use Nafiswatsiq\SubbasePayment\Events\PaymentReceived; use Nafiswatsiq\Subbase\Models\Plan; use Illuminate\Support\Facades\Event; Event::listen(PaymentReceived::class, function (PaymentReceived $event) { $payment = $event->paymentRecord; $planId = $event->metadata['plan_id'] ?? null; $user = \App\Models\User::where('email', $payment->customer_email)->first(); $plan = Plan::find($planId); if ($user && $plan) { $user->newSubscription('default', $plan); } });
Payment Driver & Documentation
| Payment | Payment Driver | Driver Option | Guide |
|---|---|---|---|
| PayPal | paypal |
PayPal Setup Guide | |
| Stripe | stripe |
Stripe Setup Guide | |
| Midtrans | midtrans |
Midtrans Setup Guide | |
| Xendit | xendit |
Xendit Setup Guide | |
| ⚙️ | Custom | custom |
Custom Gateway Guide |
Configuration
Published config/subbase-payment.php:
| Key | Default | Description |
|---|---|---|
driver |
null |
Selected gateway (paypal, stripe, midtrans, etc.) |
checkout.path |
checkout |
Public checkout URL prefix |
checkout.middleware |
['web'] |
Middleware on checkout routes |
checkout.return_url |
null |
Named route or full URL after successful payment |
checkout.cancel_url |
null |
Named route or full URL after canceled payment |
mail.send_invoice |
false |
Send email invoice to buyer on verified payment |
webhook.path |
subbase-payment/webhook |
Webhook endpoint path |
webhook.middleware |
[] |
Middleware on webhook (keep empty for PayPal) |
gateways |
[] |
Per-gateway config (see driver guides) |
Email Invoices
Optional email invoice sending to customer upon verified payment. Disabled by default.
Enable via .env
Add to your .env file:
SUBBASE_PAYMENT_SEND_INVOICE=true
Enable via Configuration
Or update config/subbase-payment.php:
'mail' => [ 'send_invoice' => true, ],
The email view can be published and customized using:
php artisan vendor:publish --tag=subbase-payment-views
Look for resources/views/vendor/subbase-payment/mail/invoice.blade.php.
Publishing Assets & Views
Publish configuration file:
php artisan vendor:publish --tag=subbase-payment-config
Publish Blade views (checkout.blade.php, status.blade.php to resources/views/vendor/subbase-payment):
php artisan vendor:publish --tag=subbase-payment-views
Development
composer install
composer validate --strict
composer test
Support
- 📖 Documentation: GitHub Wiki
- 🐛 Issues: GitHub Issues
- 💬 Discussions: GitHub Discussions
License
The MIT License (MIT). Please see License File for more information.