You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Cashier集成Stripe:订阅数量变更后无需价格调整的实现

Laravel Cashier + Stripe:修改订阅数量不立即调价,下次账单按新数量计费

要实现修改订阅数量后不产生即时价格调整,仅在下次账单周期按「新数量×单价」计费,你可以通过以下方式处理:

正确实现代码

你当前使用的noProrate()方法已经是正确方向,也可以更明确地指定参数确保效果:

// 方式1:Cashier封装的快捷链式调用
$subscription->noProrate()->updateQuantity($quantity);

// 方式2:直接指定Stripe参数(更直观,适合需额外配置的场景)
$subscription->update([
    'quantity' => $quantity,
], [
    'proration_behavior' => 'none',
    'payment_behavior' => 'default_incomplete', // 可选:避免立即触发收费操作
]);

关键逻辑说明

  • noProrate()是Laravel Cashier封装的快捷方法,本质是给Stripe API传递proration_behavior => 'none'参数,明确告知Stripe不要生成任何按剩余周期比例分摊的费用调整。
  • 修改后的订阅数量会立即生效,但新数量对应的费用只会在下一个账单周期生成的正式账单中计算,不会产生即时的调价发票。

排查问题(若仍出现即时调价)

如果调用上述代码后仍有即时价格调整,检查以下两点:

  1. 订阅计费周期:若订阅是按小时/分钟等短周期计费,Stripe默认逻辑可能有差异,此时需额外指定proration_date为下一个账单日期:
    $subscription->update([
        'quantity' => $quantity,
    ], [
        'proration_behavior' => 'none',
        'proration_date' => $subscription->current_period_end->getTimestamp(),
    ]);
    
  2. Stripe后台配置:登录Stripe Dashboard查看该订阅的历史记录,确认是否存在其他自动调价触发因素(如绑定的优惠券、订阅层级变更等)。

验证效果

修改数量后,在Stripe Dashboard的「订阅」详情页查看发票记录,应不会出现即时生成的调整型发票,只有下一个账单周期的发票会显示新数量对应的费用总额。

内容的提问来源于stack exchange,提问作者Mahmud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 05:50:13