Laravel 设置锚定日期时收银员订阅不按比例收取首笔费用

Laravel Cashier Subscription noProrate first charge when setting anchor date

我正在使用 Laravel Cashier (Stripe) 创建订阅。我想对其进行设置,以便无论用户订阅的月份是哪一天,它都会立即向他们收取全额费用,然后将锚定日期设置为之后每三个月的第一天。

例如,在 3 月 8 日订阅的人将遵循以下付款间隔:

我试过了,但它仍然按比例分配第一笔费用:

$anchor = Carbon::now()->addMonths(3);
$anchor = $anchor->startOfMonth();

$subscription = $request->user()
    ->newSubscription('default', 'price_id')
    ->anchorBillingCycleOn($anchor->startOfDay())
    ->noProrate()
    ->create($request->paymentMethod);

感谢任何帮助!

您还需要在创建订阅的请求中将 backdate_start_date(参见 api ref)设置为当月的 1 号。需要注意的一件事是,使用它意味着您订阅的 start_datecreation_date 将不再相同 - start_date 将与您指定的回溯开始日期相同.

参考您已经给出的示例 - 如果您要在 3 月 8 日创建订阅,您需要将 billing_cycle_anchor 设置为 6 月 1 日(您的代码已经在做)并且 backdate_start_date 到3 月 1 日(您需要添加)。这将立即为 3 月 1 日至 6 月 1 日之间的时间创建一张发票,下一张发票将在 6 月 1 日创建。 Stripe 的文档对此进行了讨论 here.

以上信息对 Stripe 来说比 Laravel 收银员更通用。为了设置 billing_cycle_anchor 和 Laravel 收银员,您的请求应该如下所示:

$subscription = $request->user()
    ->newSubscription('default', 'price_id')
    ->anchorBillingCycleOn($anchor->startOfDay())
    ->noProrate()
    ->create($request->paymentMethod, [], ['backdate_start_date' => {{BACKDATED_START_DATE}},]);