创建带有额外天数的 Stripe 订阅但立即计费?

Posted

技术标签:

【中文标题】创建带有额外天数的 Stripe 订阅但立即计费?【英文标题】:Create a Stripe subscription with extra days but bill immediately? 【发布时间】:2017-09-27 20:34:20 【问题描述】:

我有一个独特的用例,我需要在 Stripe 订阅计划的基础上再增加 14 天,但要立即向客户收费。所以如果计划是6个月的计划,我们真的想给用户6个月零14天。

我原本以为我可以利用 Stripe 的试用功能来解决这个问题,但发现试用功能会导致 14 天过后才开始计费,这不是我们想要的。

然后我尝试按天数创建计划(这不是很理想,但值得一试),但很快发现您无法按天创建超过 365 天的计划(一年的计划,我们的模型是 365 +14)。

我现在正在考虑创建一个 14 天 temp 计划,为用户订阅该计划,向他们收费,然后在 14 天后,将用户的计划切换到 real 6(或 12)个月计划.这只是感觉过于复杂,因为想要简单地增加额外的天数会产生很多开销。我在文档中没有看到任何解决此问题的内容。

我应该提到我打算在这个项目中使用 Laravel Cashier,并且我还需要为每个订阅提供多个计划。

更新:

我刚刚发现,您可以在使用试用版对订阅进行计费后更改计费周期。这意味着我应该能够创建一个包含多个计划的客户订阅,比如 6 个月,然后立即在该订阅上创建 14 天的试用期。如果我走这条路,看起来我需要将prorate 设置为 false,这可能会奏效。

我仍然需要知道这是否会达到预期的效果以及是否适用于收银员和多个计划。

【问题讨论】:

【参考方案1】:

我不确定为什么这被否决了,因为考虑到 Cashier 的局限性以及非常规用例,这是一个有效的问题。

对于在使用 Stripe & Laravel Cashier 时可能有更多自定义需求并遇到此问题的任何人:

此后我有时间对此进行探索,发现 Laravel Cashier 无法事后处理编辑订阅。那里没有更新功能。只有更改/取消计划的基本能力。这不符合我的需要。

我最终做的是使用 Cashier 创建发票以及创建订阅。在我能够直接使用 Stripe API 来编辑该订阅之后。通过添加trial_end 并将日期设置在此订阅的current_period_end 之后的 14 天,我可以将下一张发票的开票日期强制到我需要的位置。

因此,例如,当用户订阅 1 年计划时,我的更新代码如下所示:

    $current = Carbon::now();
    $BillCycleDate = $current->addDays(379)->timestamp; 

    $edit_subscription = \Stripe\Subscription::retrieve($subscription->stripe_id);
    $edit_subscription->trial_end = $BillCycleDate; 
    $edit_subscription->prorate = false;
    $edit_subscription->save();

此外,我不确定这是否是 Stripe API 中的错误,但只需在订阅更新的 14 天后指定 trial_end 日期,就会导致发票在试用结束日期之后立即重新计费 - 尽管计划的间隔为一年。

【讨论】:

根据文档,stripe 会在试用结束时自动向用户收费.. 如果订阅设置为自动收费,在大多数情况下是默认设置,所以是的,在您的情况下,用户将被收取两次费用

以上是关于创建带有额外天数的 Stripe 订阅但立即计费?的主要内容,如果未能解决你的问题,请参考以下文章

Stripe 优惠券期限和订阅计费间隔

更改信用卡信息(条纹)

Stripe - 年度“反向按比例”订阅

Stripe 定期/订阅计费最佳设计/实践?

在 Stripe 上设置自定义计费周期

订阅取消后 Stripe API 退款