创建一个有额外天数的 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 天后的日期会导致发票在之后立即重新开具账单试用结束日期 - 尽管计划的间隔是一年。
我有一个独特的用例,我需要在 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 天后的日期会导致发票在之后立即重新开具账单试用结束日期 - 尽管计划的间隔是一年。