Laravel Cashier Paddle试用期调用swap无法切换订阅计划问题
问题产生原因
- 版本匹配偏差:你参考的Laravel 8.x版本Cashier Paddle文档说明仅适用于v0.1.x及更早的包版本。从v1.0版本开始,Cashier Paddle调整了订阅交互逻辑,默认禁止试用期内直接调用
swap方法切换计划,因此会抛出LogicException: Cannot swap plans while on trial异常。 - 底层规则调整:该限制是为了适配Paddle官方API对试用期订阅的变更规则,避免直接切换计划导致计费周期、试用时长计算出现逻辑冲突,因此包作者新增了强制校验拦截不符合规范的调用。
解决方案
- 方案1:调用
swapAndInvoice方法(保留试用期场景)
如果你需要在切换计划的同时保留原有试用期,可直接使用官方提供的swapAndInvoice方法替代swap,该方法会跳过试用期校验,触发Paddle重新计算差价,同时按规则保留原试用时长:$user->subscription('default')->swapAndInvoice($planId); - 方案2:提前结束试用期再切换(无需保留试用期场景)
如果业务逻辑不需要保留原有试用期,可先结束试用再调用swap方法:
该操作会直接终止当前试用期,立即按新订阅计划规则生效计费。$subscription = $user->subscription('default'); $subscription->skipTrial()->swap($planId); - 方案3:降级包版本(不推荐)
如果你完全需要对齐8.x文档的原有行为,可将Cashier Paddle版本降级到v0.1.x系列,但该版本已停止维护,存在安全风险,不建议生产环境使用。
内容的提问来源于stack exchange,提问作者Norbert Jurga
相关产品推荐
相关产品推荐

