Laravel 收银员调换立即生效

Laravel cashier swapping taking immediate effect

根据文档 swap() 方法,在下一个计费日期将当前订阅与新订阅交换,这意味着在当前计划结束之后。并且swapAndInvoice()将立即生效,无需等待当前计划结束。

但是 swap() 方法并没有像描述的那样工作。即日起生效。

$subscription_result = $user->subscription('primary')->swap('new_price_id');

这是我用来交换订阅的。

example

,

Plan A :- 3 days ()
Plan B :- 7 days ()

用户在 3 月 25 日 订阅了 计划 A,下一个结算周期在 3 月 28 日 ]. 用户于 3 月 25 日 更改订阅 B 计划,它应于 28 日 (using swap() method) 生效。但它立即生效并显示下一个计费周期是 4 月 1 日

我试过使用 swapAndInvoice() 而不是 swap(),但这两种方法都给出相同的输出,没有区别。

此行为的原因与具体的 swap() 方法无关,而是与 Subscription upgrades and downgrades 的行为方式有关。当您更新订阅的价格间隔与之前的价格不同时(例如您的示例是 3 天间隔与 7 天间隔),则 billing_cycle_anchor 将立即重置并生成新发票. swapAndInvoice() 方法将在订阅更新时切割一个新发票,无论价格更新的间隔是否保持不变。而在两个价格的间隔相同的情况下仅使用 swap() 将导致在下一个自然计费周期之前不会创建发票。

Stripe API 完成 use-case 的方法是利用 Subscription Schedules。但是,Cashier 可能不直接支持此功能。