【问题标题】:Handling subscription downgrades with Laravel Cashier使用 Laravel Cashier 处理订阅降级
【发布时间】:2022-01-26 11:15:01
【问题描述】:

我在 Laravel 8 项目中使用 Laravel Cashier (Stripe)。我的项目允许用户将 domainsmonitors 添加到他们的帐户,默认情况下,用户可以根据需要添加/删除任意数量的域和监视器,最多 50 个。免费计划。

然后,他们可以将其帐户升级为 PRO 订阅,其中包含不同数量的附加域/监视器,例如:75、100、200。

所以一个场景可能是……

用户目前在其帐户中拥有 50 个域,然后他们升级到第二个 PRO 计划并添加另外 30 个域,因此他们现在拥有可能的 100 个域中的 80 个域。

如果用户随后将他们的帐户降级到最大 50,我如何在 Laravel Cashier 中处理这个问题?我现在如何有效地禁用在该特定订阅期间添加的那些?

【问题讨论】:

    标签: php laravel stripe-payments laravel-cashier


    【解决方案1】:

    您需要在数据库中存储产品和计划。产品定义了客户可以订阅的内容,然后计划(价格)确定数量和间隔(每月、每 6 个月、每年等)。然后,您只需将产品和用户支付的计划存储在用户表中即可在它们之间切换。

    【讨论】:

    • 好的,我有一个plans 表,其中包含以下列:title、slug、stripe_price,然后我的User 模型得到了计划,但我同样可以使用$user->subscribedToPrice($user->plan->stripe_id, 'default'),我就是这样。您所说的产品(在我的示例中)是一个,实际上是用户想要获得的到期日期,但这些与计划没有任何联系,您是否建议我将plan 添加到我的domains 表中,它会被用户添加的任何计划标记,然后创建where 查询来检索这些? @keneferinho95
    • 在创建条纹产品时,您定义了价格和计费周期。您必须在数据库中存储相同的信息,以便检索与 Stripe 同步的计划(产品)信息。 (您要单独存储每个 Stripe 计划,因为创建的每个计划(产品)都有不同的价格 ID,无论它是否是具有不同计费周期的相同计划(产品))。之后,您只需在数据库中的内容(当前可用的内容)之间切换订阅。
    • 现在有个大问题 - 如果用户切换到的计划是更少/更多的域,我该如何添加/恢复域?您必须按降序(从高到低)将用户的可用域存储在某处,这意味着如果用户的计划有 50 个域并且他使用其中 1 个域,则剩余可用域的当前值为 49。通过存储用户的当前可用域通过这种方式,您可以轻松地在订阅之间切换域,因为如果用户切换到 80 个域计划,他仍然有 49 个,直到下一个计费日期,他将被重置为 80 个域。
    • 如果降级到 30,您可以简单地将用户可用域的值修改为 30。
    • 太棒了,澄清了大多数事情,我完全理解我需要以某种方式跟踪域的数量,但是如果用户在订阅计划时添加了一堆域,当他们降级?当然,他们将无法添加任何其他内容,但我如何知道在订阅期间添加了哪些内容才能知道要禁用哪些内容?
    猜你喜欢
    • 2016-03-14
    • 2020-07-25
    • 2015-05-01
    • 2021-04-02
    • 2018-01-15
    • 1970-01-01
    • 2016-07-31
    • 2021-12-20
    • 2020-01-12
    相关资源
    最近更新 更多