jojostx / larasubs
Laravel的灵活计划和管理系统,包含运行SAAS服务所需的所有工具
Requires
- php: ^8.0|^8.1
- illuminate/console: ^8.0|^9.0
- illuminate/contracts: ^8.0|^9.0
- illuminate/database: ^8.0|^9.0
- illuminate/support: ^8.0|^9.0
- spatie/eloquent-sortable: ^4.0
- spatie/laravel-schemaless-attributes: ^2.3
- spatie/laravel-sluggable: ^3.4
- spatie/laravel-translatable: ^6.1
Requires (Dev)
- laravel/pint: ^1.2
- lucasdotvin/laravel-database-queries-counter: ^0.5.0
- nunomaduro/larastan: ^2.0
- orchestra/testbench: ^6.22|^7.0
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-04 14:54:36 UTC
README
关于
此包提供了一种简单的接口来处理订阅和功能消费。
注意事项
- 此包不包括支付功能。
- 如果您需要覆盖某些辅助方法(如
renew()
、cancel()
等)背后的逻辑,则可能需要扩展一些核心模型。例如:在取消订阅时,您可能还想取消附加的定期支付。
安装
您可以通过composer安装此包
composer require jojostx/larasubs
发布资源(配置和迁移文件)
php artisan vendor:publish --provider="Jojostx\Larasubs\LarasubsServiceProvider" --tag=larasubs-config php artisan vendor:publish --provider="Jojostx\Larasubs\LarasubsServiceProvider" --tag=larasubs-migrations
使用方法
要开始使用,只需将Jojostx\Larasubs\Models\Concerns\HasSubscriptions
特质添加到您的User
模型(或任何您希望具有订阅的模型)中
<?php namespace App\Models; use Jojostx\Larasubs\Models\Concerns\HasSubscriptions; class User { use HasSubscriptions; }
就这些!
设置计划
首先,您必须定义您将提供的计划。在下面的示例中,我们创建了两个计划。
<?php namespace Database\Seeders; use Illuminate\Database\Seeder; use Jojostx\Larasubs\Enums\IntervalType; use Jojostx\Larasubs\Models\Models\Plan; class PlanSeeder extends Seeder { public function run() { $silver = Plan::create([ 'name' => 'silver', 'description' => 'Plan for medium businesses', 'active' => true, 'price' => 100000, // price in the lowest currency value (kobo) 'currency' => 'NGN', 'interval' => 6, 'interval_type' => IntervalType::YEAR, 'trial_interval' => 1, 'trial_interval_type' => IntervalType::MONTH, 'grace_interval' => 1, 'grace_interval_type' => IntervalType::MONTH, 'sort_order' => 1, ]); $gold = Plan::create([ 'name' => 'gold', 'description' => 'Plan for large businesses', 'active' => true, 'price' => 10000000, // price in the lowest currency value (kobo) 'currency' => 'NGN', 'interval' => 6, 'interval_type' => IntervalType::YEAR, 'trial_interval' => 1, 'trial_interval_type' => IntervalType::MONTH, 'grace_interval' => 1, 'grace_interval_type' => IntervalType::MONTH ]); } }
这里的一切都很简单,但值得强调的是:通过接收上面的间隔选项,这两个计划被定义为每年一次,有1个月的试用期和宽限期。
试用期
您可以为每个计划定义试用期,这样您的用户就可以在订阅开始之前试用计划。
宽限期
您可以为每个计划定义宽限期,这样您的用户在订阅结束时不会立即失去访问功能。
设置功能
接下来,您可能需要定义计划将提供的功能。在下面的示例中,我们创建了两个功能:一个用于处理每个用户可以使用的分钟数,以及他们是否可以使用子域名。
<?php namespace Database\Seeders; use Illuminate\Database\Seeder; use Jojostx\Larasubs\Enums\IntervalType; use Jojostx\Larasubs\Models\Models\Feature; class FeatureSeeder extends Seeder { public function run() { $deployMinutes = Feature::create([ 'name' => 'deploy-minutes', 'consumable' => true, 'interval' => 1, 'interval_type' => IntervalType::DAY, ]); $customDomain = Feature::create([ 'name' => 'custom-domain', 'description' => 'Ability to create and use subdomains', 'consumable' => false, 'active' => true, 'interval' => 1, 'interval_type' => IntervalType::DAY, ]); } }
将计划与功能关联
由于每个功能可以属于多个计划(并且它们可以有多个功能),您必须将它们关联起来
use Jojostx\Larasubs\Models\Feature; // ... $deployMinutes = Feature::where('name', 'deploy-minutes')->first(); $subdomains = Feature::where('name', 'subdomains')->first(); $silver->features()->attach($deployMinutes, ['units' => 15]); $gold->features()->attach($deployMinutes, ['units' => 25]); $gold->features()->attach($subdomains);
在将可消费功能与计划关联时,必须为units
传递一个值。
在上面的示例中,我们为银用户提供15分钟的部署时间,为金用户提供25分钟。我们还允许金用户使用子域名。
订阅
现在,您已经有一组带有其功能的计划,是时候让用户订阅它们了。注册订阅很简单
<?php namespace App\Listeners; use App\Events\PaymentApproved; class SubscribeUser { public function handle(PaymentApproved $event) { $subscriber = $event->user; $plan = $event->plan; $subscriptionName = $user->name . strval(time()); // should be unique $subscriber->subscribeTo( $plan, $subscriptionName ); } }
在上面的示例中,我们模拟了一个在支付批准时注册其用户的程序。很容易看出,subscribeTo
方法只需要两个参数
- 用户订阅的计划。
- 订阅的唯一名称。
您可以传递其他一些参数给它来处理我们将在下面介绍的特殊情况。
默认情况下,
subscribeTo
方法根据计划的“间隔”选项计算到期时间,因此您无需担心。
测试
composer test
安全策略
如果您发现任何与安全相关的问题,请发送电子邮件而不是使用问题跟踪器。
支持
以下支持渠道随时可供您使用
许可
本软件根据MIT许可(MIT)发布。
© 2022 Jojostx,部分版权所有。