创建一个有额外天数的 Stripe 订阅但立即收费?

Create a Stripe subscription with extra days but bill immediately?

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

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

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

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

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

更新:

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

我仍然需要知道这是否会达到预期的效果以及同时使用 cashier 和 multiple plan。

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

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

我有时间研究这个,发现 Laravel 收银员 不能 在事实。那里没有更新功能。仅change/cancel计划的基本能力。这不符合我的需要。

我最后做的是使用 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 中的错误,但简单地指定 trial_end 订阅更新 14 天后的日期会导致发票在之后立即重新开具账单试用结束日期 - 尽管计划的间隔是一年。