Manage your payments inside FilamentPHP app with multi payment gateway integration
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())
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.
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(),
]);
}
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.
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"
Checkout our Awesome TomatoPHP