lacodix / laravel-plans
一个用于管理计划、功能和订阅以及跟踪Laravel SAAS计费的Laravel包。
v1.0.0
2024-09-15 12:48 UTC
Requires
- php: ^8.2
- ext-intl: *
- illuminate/contracts: ^11.0
- nesbot/carbon: ^3.0
- spatie/eloquent-sortable: ^4.4
- spatie/laravel-package-tools: ^1.16.0
- spatie/laravel-sluggable: ^3.6
- spatie/laravel-translatable: ^6.7
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.59
- illuminate/database: ^11.0
- illuminate/support: ^11.0
- larastan/larastan: ^2.9
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.0|^8.0
- nunomaduro/phpinsights: ^2.6
- orchestra/testbench: ^9.0
- pestphp/pest: ^2.21
- pestphp/pest-plugin-faker: ^2.0
- pestphp/pest-plugin-laravel: ^2.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^10.0
- rector/rector: ^1.0
- spatie/pest-plugin-test-time: ^2.1
This package is auto-updated.
Last update: 2024-09-15 20:13:03 UTC
README
文档
您可以在我们的文档网站上找到此包的完整文档,包括详细的解释和多个用例。
它做什么
- 管理您SaaS中的所有可订阅的计划和附加功能。
- 通过不同的计费周期订阅一个或多个计划。
- 管理可选的功能。如果您需要,您也可以仅检查已订阅的计划。
- 提供可计数的和不可计数的功能。使用不可计数的功能来启用/禁用功能。使用可计数的功能,例如令牌、信用等。将不同计划的不同功能值附加到不同的计划中,包括“无限”。在给定的时间间隔后自动重置值。
- 只要可用余额,就可以使用功能。分割不同计划的使用情况,具体取决于计划的顺序。
- 翻译您的计划和功能。在您的应用程序中通过slug标识它们,但通过spatie/laravel-translatable为用户提供本地化版本。
- 排序您的计划、功能(用于向用户可视化)和订阅(以保持对使用顺序的控制)。
- 在计划和订阅中允许元数据。元数据的使用取决于您。在某些用例中,我们使用元数据来保存货币或额外的价格信息。这些信息可以被后续的计费系统使用。
它不做什么
- 计费。我们不创建发票或跟踪账单。使用您选择的发票服务,无论哪种都行。Stripe、PayPal、您自己的软件或其他任何服务。您只需从这个包中获得事件,当订阅创建或续订时,这可以用来触发发票。您也可以在创建订阅或相反操作之前等待付款。
- 定价。是的,计划模型中有价格列,可以用于可视化。您也可以使用元数据来提供额外的价格信息,就像我们在某些示例中所做的那样。但您不需要这样做。您可以将价格保存在您的计费系统中,或者将其与计划分开保存。但确实,如果您使用价格列,您也可以获得部分订阅间隔的计算价格。
安装
composer require lacodix/laravel-plans
快速入门
为了熟悉所有设置和可能性,请参阅更详细的示例。这只是一个关于包如何工作的快速概述。
订阅者
将我们的HasSubscription特性添加到任何模型中。
use Lacodix\LaravelPlans\Models\Traits\HasSubscriptions; class User extends Authenticatable { use HasSubscriptions; ... }
计划和功能
创建包含功能的计划(后者是可选的,如果您不需要功能功能)。
use Lacodix\LaravelPlans\Enums\Interval; use Lacodix\LaravelPlans\Models\Feature; use Lacodix\LaravelPlans\Models\Plan; $myPlan = Plan::create([ 'slug' => 'my-plan', 'name' => 'My Plan', // can also be locale-array - see Feature below 'price' => 50.0, 'active' => true, 'billing_interval' => Interval::MONTH, 'billing_period' => 1, 'meta' => [ 'price_per_token' => 0.05, ], ]); $myFeature = Feature::create([ 'slug' => 'tokens', 'name' => [ 'de' => 'Zusätzliche Tokens', 'en' => 'Additional Tokens', ], ]); $myPlan->features()->attach($myFeature, [ 'value' => 1000, 'resettable_period' => 1, 'resettable_interval' => Interval::MONTH, ]);
订阅和续订
// Subscribe to multiple plans $user->subscribe($myPlan1, 'main'); $user->subscribe($myPlan2, 'addon'); // Change Subscription $user->subscribe($myPlan3, 'main'); // will replace myPlan1 subscription // Renew $user->subscriptions()->first()->renew(); // Cancel $user->subscriptions()->first()->cancel();
测试
composer test
贡献
在提交前,请运行以下命令并解决潜在的问题,并考虑为新的功能添加测试。
composer rector:test composer insights composer csfixer:test composer phpstan:test
变更日志
请参阅变更日志以获取有关最近更改的更多信息。
鸣谢
此软件包受由Laravel Cameroon创建的Laravel Subscriptions的启发,最初是从它分叉出来的。经过几次决定在订阅计算方面走不同的路线后,它被从头开始重写,但仍包含一些原始的简单方法和代码部分。因此,如果此软件包不符合您的需求,请尝试查看Laravel Cameroons的订阅软件包。
许可协议
MIT 许可协议(MIT)。有关更多信息,请参阅许可文件。