jgabboud/laravel-subscriptions

一个Laravel扩展包,允许您拥有具有免费试用和折扣的动态订阅,享受吧!

dev-master 2022-09-08 14:18 UTC

This package is auto-updated.

Last update: 2024-09-10 10:36:50 UTC


README

一个Laravel扩展包,允许您拥有具有免费试用和折扣的动态订阅,包括相应的中间件,享受吧!

Software License Total Downloads

该库由5个主要表组成
plans
plan_has_items
plan_items
plan_subscriptions
plan_subscription_usages

安装

使用composer安装此包

composer require jgabboud/laravel-subscriptions

发布供应商

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

用法

首先,让我们添加订阅模型,假设是用户模型

use Jgabboud\Subscriptions\Traits\HasSubscriptions;

class MyModel extends Model
{
    use HasSubscriptions;
    
    //...
}

现在让我们使用我们的订阅!

计划和项目

为了创建一个计划,我们将执行以下操作

$plan = Plan::create([
    'name' => 'Gold Plan',
    'description' => 'This plan is the one for you',
    'price' => 25.50,
    'currency' => 'USD',
    'trial_duration' => 20,
    'trial_duration_type' => 'days',
    'package_duration' => 1,
    'package_duration_type' => 'month',
    'subscriptions_limit' => 1500    
]);

//-- check if plan is active
$plan->isActive();

//-- activate plan
$plan->activate();

//-- deactivate plan
$plan->deactivate();

注意持续时间类型,是否是trial_duration_typepackage_duration_type,可以是daysmonthyear

要创建一个免费计划,只需将价格设置为0。

要检查计划是否免费,只需点击

$plan = Plan::find(1);
$plan->isFree();

要将项目分配给计划,首先让我们创建项目,然后按如下方式分配

//-- create plan item
PlanItem::create([
     'name' => 'Emails', 
     'description' => 'Limit number of emails'
]);


$plan = Plan::find(1);
$items[] = (object)['item_id' => 1, 'value' => 15,'item_duration' => 10, 'item_duration_type' => 'days'];
$items[] = (object)['item_id' => 2, 'value' => 30,'item_duration' => 10, 'item_duration_type' => 'days'];

//-- assign items to plan
$plan->assignItems($items);

item_ids = [1, 2];
//-- remove items from plan
$plan->revokeItems($item_ids);

订阅者

为了将用户模型订阅到计划

$plan = Plan::find(1);
$user = User::find(1);

//-- subscribe user to plan
$user->subscribe($plan);   

//-- get user subscriptions
$user->planSubscriptions

结构

计划表将包含每个计划的详细信息,包括名称、描述、价格、试用期等。现在一个计划可能包含许多项目,例如,您可以使用此订阅创建的最大产品数量。因此,我们将使用计划项表来初始化这些项目。由于一个计划可以包含多个项目,而一个项目可以属于多个计划,我们将使用计划项来连接这两个。

现在,为了使用户能够订阅计划,我们将将计划的详细信息模拟到计划订阅表中,包括相应的订阅者信息和计划信息,并将项目模拟到计划订阅使用表中。这样做的主要原因,除了跟踪用户订阅的计划外,还为了跟踪用户在那天订阅计划时的实际计划,因为相同的计划可能会稍后更新,而新更新的计划不应该对用户当时实际订阅的内容产生影响,而应该对新订阅生效。

免费试用

您可以创建一个包,命名为“30天免费试用”,给予30天的试用期,包的有效期将为0。在此,您为用户创建了一个免费试用。另一方面,您也可以通过添加免费试用期和包有效期来为现有的持续订阅提供免费试用。

在计划订阅表中真正发生的事情是,每个订阅的记录将只插入一次,并对应于相应的订阅者。现在,每次订阅续订时,我们只更新starts_at和ends_at字段。我们可以根据业务需求将计划订阅使用重置为新的计划中的状态,或将旧的使用情况滚动到新的计划中。如果我们想要跟踪订阅的历史记录,我们可以在稍后创建一个发票表来保存每个订阅的详细信息。

用户可以随时取消订阅

附加组件和捆绑包

您可以在稍后添加一个包含多个项目的另一个表,用户可以购买该捆绑包,并且类似地,将项目附加到计划订阅使用表中,并带有附加标志

按使用付费

默认情况下,订阅库对项目使用次数没有限制,因此您可以指定一个功能,该功能将计算项目被使用的次数并为其设置计费价格。