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

Stripe API(Node.js):如何实现订阅升级至当前计费周期结束后再计费?

实现订阅方案延迟切换计费的方法

完全可行,你可以通过配置Stripe订阅的**待处理更新(pending_update)**来实现需求,让新订阅方案在当前计费周期结束后再生效并扣费。

修改后的代码示例:

router.post('/update_payment_schedule', async function (req, res) {
    try {
        const { subscription, priceKey } = req.body;

        const newSubscription = await stripe.subscriptions.update(subscription.id, {
            cancel_at_period_end: false,
            // 设置待处理更新,指定在当前周期结束时应用新价格
            pending_update: {
                items: [{
                    id: subscription.items.data[0].id,
                    price: stripePriceKeys[priceKey]
                }],
                proration_behavior: 'none', // 周期结束后切换无需计算 prorate 费用
                effective_date: 'current_period_end' // 生效时间设为当前周期结束日
            }
        });

        console.log('订阅更新计划已设置');
        return res.status(200).json({ newSubscription });
    } catch (err) {
        Sentry.captureException(err);
        console.log('err: ', err);
        return res.status(500).json({ statusCode: 500, message: err.message });
    }
});

关键逻辑说明:

  • pending_update:该参数会让订阅变更延迟到指定时间执行,而非立即生效。
  • effective_date: 'current_period_end':明确要求新方案在当前订阅周期的最后一天生效,此时Stripe会自动按新方案扣费并开启新计费周期。
  • proration_behavior: 'none':因为是周期结束后完整切换,无需计算当前周期的部分费用,避免产生额外扣费。

你也可以选择另一种替代方案:将当前订阅设置为cancel_at_period_end: true(到期自动取消),同时创建一个新订阅,把新订阅的start_date设为当前订阅的current_period_end。这种方式适合需要完全分离新旧订阅记录的场景,但pending_update的方式更简洁,能保留原订阅的完整历史。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:47:14