tomatophp / filament-payments
Manage your payments inside FilamentPHP app with multi payment gateway integration
Fund package maintenance!
3x1io
Requires
- php: ^8.1
- cryptomus/api-php-sdk: ^1.0
- filament/filament: ^3.0
- filament/spatie-laravel-media-library-plugin: ^3.0
- myfatoorah/library: ^2.2
- paypal/paypal-checkout-sdk: ^1.0
- plisio/plisio-sdk-laravel: ^1.0
- stripe/stripe-php: ^15.4
- tomatophp/console-helpers: ^1.0
- tomatophp/filament-translation-component: ^1.0
README
Filament Payment Manager
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
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('john@gmail.com') ->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 link with anyone to make the payment done.
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('john@gmail.com') ->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.
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