tomatophp/filament-subscriptions

Manage subscriptions and feature access with customizable plans in FilamentPHP

1.0.7 2024-09-18 10:13 UTC

This package is auto-updated.

Last update: 2024-09-18 10:13:59 UTC


README

Screenshot

Filament Subscriptions

Latest Stable Version License Downloads

Manage subscriptions and feature access with customizable plans in FilamentPHP

thanks for Laravel Subscriptions you can review it before use this package.

Screenshots

Tenant Menu User Menu Billing Page Change Subscription Modal Plans Edit Plan Create Feature Features Subscriptions Create Subscription Cancel Modal

Features

  • Manage plans
  • Manage features
  • Manage subscriptions
  • multi-tenancy support
  • Native Filament subscriptions support
  • Subscription Middleware
  • Subscription Page like Spark
  • Subscription Events
  • Subscription Facade Hook
  • Subscription Webhooks
  • Subscription Payments Integrations

Installation

composer require tomatophp/filament-subscriptions

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"

now you need to publish your migrations

php artisan vendor:publish --provider="Laravelcm\Subscriptions\SubscriptionServiceProvider"

after that please run this command

php artisan filament-subscriptions:install

finally register the plugin on /app/Providers/Filament/AdminPanelProvider.php

->plugin(\TomatoPHP\FilamentSubscriptions\FilamentSubscriptionsPlugin::make())

Using

now on your User.php model or any auth model you like you need to add this trait

namespace App\Models;

use Laravelcm\Subscriptions\Traits\HasPlanSubscriptions;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use HasPlanSubscriptions;
}

To configure the billing provider for your application, use the FilamentSubscriptionsProvider:

use TomatoPHP\FilamentSubscriptions\FilamentSubscriptionsProvider;
use TomatoPHP\FilamentSubscriptions\Filament\Pages\Billing;
use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->pages([
            Billing::class
        ])
        ->tenantBillingProvider(new FilamentSubscriptionsProvider());
}

This setup allows users to manage their billing through a link in the tenant menu.

Requiring a Subscription

To enforce a subscription requirement for any part of your application, use the requiresTenantSubscription() method:

use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->requiresTenantSubscription();
}

Users without an active subscription will be redirected to the billing page.

Register New Subscriper Type

you can register new subscriber type by using this code

use TomatoPHP\FilamentSubscriptions\Facades\FilamentSubscriptions;

public function boot()
{
    FilamentSubscriptions::register(
        \TomatoPHP\FilamentSubscriptions\Services\Contracts\Subscriber::make()
            ->name('User')
            ->model(\App\Models\User::class)
    );
}

Use Events

we add events everywhere on the subscription process and here is the list of events

  • TomatoPHP\FilamentSubscriptions\Events\CancelPlan
  • TomatoPHP\FilamentSubscriptions\Events\ChangePlan
  • TomatoPHP\FilamentSubscriptions\Events\RequestPlan
  • TomatoPHP\FilamentSubscriptions\Events\SubscribePlan

all events have the same payload

return [
    "old" => //Plan,
    "new" => //Plan,
    "subscription" => //Subscription,
]

Use Facade Hook

you can use the facade hook to add your custom logic to the subscription process

use TomatoPHP\FilamentSubscriptions\Facades\FilamentSubscriptions;

FilamentSubscriptions::afterSubscription(function (array $data){
    // your logic here
});

FilamentSubscriptions::afterRenew(function (array $data){
    // your logic here
});

FilamentSubscriptions::afterChange(function (array $data){
    // your logic here
});

FilamentSubscriptions::afterCanceling(function (array $data){
    // your logic here
});

Publish Assets

you can publish config file by use this command

php artisan vendor:publish --tag="filament-subscriptions-config"

you can publish views file by use this command

php artisan vendor:publish --tag="filament-subscriptions-views"

you can publish languages file by use this command

php artisan vendor:publish --tag="filament-subscriptions-lang"

Other Filament Packages

Checkout our Awesome TomatoPHP