Payment Manager by Fady Mondy
CommunityManage your payments inside FilamentPHP app with multi payment gateway integration
Author:
Fady Mondy
Package health
Automated checks of this plugin's Composer package
15 checks
- Failed: GitHub Actions pinned to SHA — View details on Plumb
- Skipped: GitLab CI includes pinned to SHA
- Passed: Open security advisories
- Passed: Dependabot PR responsiveness — No open Dependabot PRs.
- Skipped: Renovate MR responsiveness
- Failed: Dependabot or Renovate configured — No dependency updater configuration found. View details on Plumb
- Skipped: Dependency update cooldown configured
- Passed: Provides a security policy
- Passed: Abandoned or archived — No consulted source marks the package abandoned (packagist, github).
- Passed: Commit and release recency — Active: last commit 0 days ago; last release 25 days ago.
-
Passed:
composer.lock not committed by library
—
composer.lockis absent from the released dist archive. - Warning: Dist archive is lean
-
Passed:
Current Laravel version supported
—
Package dependencies resolve together with current Laravel
13.0. -
Passed:
Current PHP version supported
—
Constraint
^8.2supports current PHP8.5. - Skipped: Current Symfony version supported
filament/
namespace. Review the source and install at your own risk. Found
malware or an unresolved security issue the author won't
address?
Report it
.
Documentation
- Screenshots
- Features
- Compatibility
- Installation
- Using
- Use Payment Action
- Integrate With Filament Subscription
- Payment Page Guard
- Payment Links
- Gateway Secrets
- Publish Assets
- Other Filament Packages

Manage your payments inside FilamentPHP app with multi payment gateway integration
#Screenshots

#Features
- Payments List
- Payment View
- Payment Filter And Groups by Status
- Payment Gates
- Payment Gate Options
- Payment Action
- Payment Facade Method
- Payment Page
- Payment Drivers
- StripeV3 Integration
- Plisio Integration
- Paypal Integration
- Paymob Integration
- Tap Integration
- Myfatoorah Integration
- Creptomus Integration
- Paddle Integration
- Lemon Squeezy Integration
- Binance Integration
- PayTabs Integration
- Moyaser Integration
- Payfort Integration
- Fawery Integration
#Compatibility
| Package version | Filament | Laravel | PHP |
|---|---|---|---|
| 5.x | 5.x | 12 / 13 | 8.2+ |
1.x (v3 branch) |
3.x | 10 / 11 | 8.1+ |
#Installation
composer require tomatophp/filament-payments
we need the Media Library plugin to be installed and migrated you can use this command to publish the migration
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="medialibrary-migrations"
after install your package please run this command
php artisan filament-payments:install
finally register the plugin on /app/Providers/Filament/AdminPanelProvider.php
->plugin(\TomatoPHP\FilamentPayments\FilamentPaymentsPlugin::make())
#Using
you can use payment with the very easy way just use Facade FilamentPayments like this
use TomatoPHP\FilamentPayments\Facades\FilamentPayments;
use TomatoPHP\FilamentPayments\Services\Contracts\PaymentBillingInfo;
use TomatoPHP\FilamentPayments\Services\Contracts\PaymentCustomer;
use TomatoPHP\FilamentPayments\Services\Contracts\PaymentRequest;
use TomatoPHP\FilamentPayments\Services\Contracts\PaymentShippingInfo;
use TomatoPHP\FilamentSubscriptions\Facades\FilamentSubscriptions;
return redirect()->to(
FilamentPayments::pay(
data: PaymentRequest::make(Plan::class)
->model_id($data['new']->id)
->currency('USD')
->amount($data['new']->price)
->details('Subscription Payment')
->success_url(url('/success'))
->cancel_url(url('/cancel'))
->customer(
PaymentCustomer::make('John Doe')
->email('[email protected]')
->mobile('+201207860084')
)
->billing_info(
PaymentBillingInfo::make('123 Main St')
->area('Downtown')
->city('Cairo')
->state('Cairo')
->postcode('12345')
->country('EG')
)
->shipping_info(
PaymentShippingInfo::make('123 Main St')
->area('Downtown')
->city('Cairo')
->state('Cairo')
->postcode('12345')
->country('EG'
)
)),
);
if you want to return it as json you can just make json: true, this method return a URL for you with the payment, you can share this signed link with the customer to make the payment done (see Payment Links).
#Use Payment Action
you can use a Table Action to make it easy to link Payment with your table like this
use TomatoPHP\FilamentPayments\Filament\Actions\PaymentAction;
public function table(Table $table): $table
{
return $table
->actions([
PaymentAction::make('payment')
->request(function ($record){
return PaymentRequest::make(Order::class)
->model_id($record->id)
->currency('USD')
->amount($record->total)
->details($record->ordersItems()->pluck('product_id')->implode(', '))
->success_url(url('/success'))
->cancel_url(url('/cancel'))
->customer(
PaymentCustomer::make($record->name)
->email($record->account->email)
->mobile($record->phone)
)
->billing_info(
PaymentBillingInfo::make($record->address)
->area($record->area->name)
->city($record->city->name)
->state($record->city->name)
->postcode('12345')
->country($record->country->iso3)
)
->shipping_info(
PaymentShippingInfo::make($record->address)
->area($record->area->name)
->city($record->city->name)
->state($record->city->name)
->postcode('12345')
->country($record->country->iso3)
);
})
->pay(),
]);
}
#Integrate With Filament Subscription
if you like to use this package with Filament Subscription you can use this code
use TomatoPHP\FilamentPayments\Facades\FilamentPayments;
use TomatoPHP\FilamentPayments\Services\Contracts\PaymentBillingInfo;
use TomatoPHP\FilamentPayments\Services\Contracts\PaymentCustomer;
use TomatoPHP\FilamentPayments\Services\Contracts\PaymentRequest;
use TomatoPHP\FilamentPayments\Services\Contracts\PaymentShippingInfo;
use TomatoPHP\FilamentSubscriptions\Facades\FilamentSubscriptions;
public function boot(): void
{
FilamentSubscriptions::afterSubscription(function ($data) {
//Payment Here
return redirect()->to(FilamentPayments::pay(
data: PaymentRequest::make(Plan::class)
->model_id($data['new']->id)
->currency('USD')
->amount($data['new']->price)
->details('Subscription Payment')
->success_url(url('/success'))
->cancel_url(url('/cancel'))
->customer(
PaymentCustomer::make('John Doe')
->email('[email protected]')
->mobile('+201207860084')
)
->billing_info(
PaymentBillingInfo::make('123 Main St')
->area('Downtown')
->city('Cairo')
->state('Cairo')
->postcode('12345')
->country('EG')
)
->shipping_info(
PaymentShippingInfo::make('123 Main St')
->area('Downtown')
->city('Cairo')
->state('Cairo')
->postcode('12345')
->country('EG')
)
));
});
}
it will redirect you to payment after the hook is called.
#Payment Page Guard
The payment page (/pay/{trx}) requires an authenticated user. Since v5 it uses config('filament-payments.guard'), which defaults to your app's default guard (before v5 it was hard-coded to auth:accounts). To use another guard, or to get the old behaviour back, publish the config and set:
// config/filament-payments.php
'guard' => 'accounts',
#Payment Links
The payment page (/pay/{trx}) and the gateway cancel return (GET /pay/{trx}/cancel) are protected by Laravel signed URLs, and only the payment owner can open or cancel a payment. Route names are unchanged, but links must now come from the package: FilamentPayments::pay(), the PaymentAction and the pay/initiate API already return signed links; if you build one yourself use the payment model:
$payment->payUrl(); // signed link to the payment page
$payment->cancelUrl(); // signed link a gateway can redirect the customer back to
A plain route('payment.index', $trx) (or a hand-written /pay/{trx} link) is rejected with a 403. Breaking changes:
- Payment page links expire (default 24 hours) and cancel return links expire (default 3 days). Change it, or pass
nullto never expire, in the published config:
// config/filament-payments.php
'links' => [
'pay_expires' => 60 * 24, // minutes
'cancel_expires' => 60 * 24 * 3,
],
- Cancelling from the payment page is now a CSRF protected
POST /pay/{trx}/cancel(routepayment.cancel.submit). The signedGETcancel route is only meant for gateway redirects; custom drivers must use$payment->cancelUrl()for their cancel/return URL (extra query parameters go incancelUrl(['session' => $payment->trx])so they are part of the signature). - The signed-in user must own the payment: the payment
modelis the user, the user can access the paymentmodelas a team/tenant (canAccessTenant()/belongsToTeam()), or the paymentcustomer.emailmatches the user's email. Anyone else gets a 403. If your payment links are meant to be paid by a different account, set'enforce_owner' => falsein the config (the signed link is then the only check).
#Gateway Secrets
Gateway parameters are stored encrypted with your APP_KEY, and secret parameters are never sent to the browser: in the gateway edit modal they are empty password inputs, and leaving one blank keeps the current value. Each driver declares its secret keys; a custom driver opts in like this:
public static function secretKeys(): array
{
return ['secret_key'];
}
If you rotate APP_KEY, re-enter your gateway keys.
#Publish Assets
you can publish config file by use this command
php artisan vendor:publish --tag="filament-payments-config"
you can publish views file by use this command
php artisan vendor:publish --tag="filament-payments-views"
you can publish languages file by use this command
php artisan vendor:publish --tag="filament-payments-lang"
you can publish migrations file by use this command
php artisan vendor:publish --tag="filament-payments-migrations"
#Other Filament Packages
Checkout our Awesome TomatoPHP
The author
Applied AI engineer and fractional CTO from Cairo, Egypt. Creator of TomatoPHP, 50+ open-source Filament plugins for building full apps (CMS, e-commerce, accounts, invoices, SaaS panels), and of Laravilt, an admin panel framework for Laravel on Inertia.
From the same author
Menu Generator
Menu view generator using view component
Author:
Fady Mondy
Translations Manager
Manage your translation with DB and cache, you can scan an collect translation strings like `trans()` and `__()`, and translate them using UI
Author:
Fady Mondy
Meta Manager
Convert any model on your app to pluggable model using Meta and get ready to use relation manager on FilamentPHP panel
Author:
Fady Mondy
Sticky Notes
Add Sticky Notes to your dashboard with tons of options and style.
Author:
Fady Mondy
Featured Plugins
A selection of plugins curated by the Filament team
Sharp Theme
A theme that gives panels a precise, technical look with square corners, strong borders, and clear contrast.
Filament
Custom Fields
Eliminate custom field migrations forever. Let your users create and manage form fields directly in Filament admin panels with 20+ built-in field types, validation, and zero database changes.
Relaticle
Blueprint
Filament Blueprint is a premium Laravel Boost extension that helps AI agents produce accurate, detailed implementation plans and security reports for Filament apps.
Filament