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

Stripe技术咨询:如何将订阅限制为36次重复计费?

在Stripe中设置订阅满3年自动取消的方案

Stripe没有像PayPal那样直接提供“最大订阅次数”的可视化设置,但可以通过两种方式实现36次(3年)计费后自动取消订阅的需求:

方法一:创建订阅时指定自动取消时间

直接在创建订阅时通过cancel_at参数设置3年后的时间戳,到期后Stripe会自动取消订阅。适合对时间精度要求较高、无需严格卡36次计费的场景。

代码示例(Node.js)

const stripe = require('stripe')('你的API密钥');

// 计算36个30天周期后的时间戳(单位:秒)
const cancelTimestamp = Math.floor(Date.now() / 1000) + 36 * 30 * 24 * 60 * 60;

const subscription = await stripe.subscriptions.create({
  customer: 'cus_xxx', // 目标客户ID
  items: [{
    price: 'price_xxx', // 已配置30天周期的价格ID
  }],
  cancel_at: cancelTimestamp, // 设置自动取消时间
});

提示:如果要严格对应自然年的3年,也可以直接计算当前日期+3年的时间戳,避免因30天周期和自然月的差异导致时间偏差。

方法二:通过Webhook监听计费次数,达标后取消订阅

如果需要严格统计36次成功计费后再取消(规避时间计算的误差),可以监听invoice.paid事件,累计付费次数,达到阈值时主动取消订阅。

实现步骤

    1. 在Stripe后台配置invoice.paid事件的Webhook接收端点,并开启签名验证。
    1. 在Webhook处理逻辑中统计付费次数,达标则取消订阅:
const stripe = require('stripe')('你的API密钥');

// 处理Webhook请求
app.post('/stripe-webhook', async (req, res) => {
  const event = req.body;
  if (event.type === 'invoice.paid') {
    const subscriptionId = event.data.object.subscription;
    // 查询该订阅的所有成功付费记录
    const paidInvoices = await stripe.invoices.list({
      subscription: subscriptionId,
      status: 'paid',
      limit: 100
    });
    // 累计次数达到36次则取消订阅
    if (paidInvoices.data.length >= 36) {
      await stripe.subscriptions.del(subscriptionId);
    }
  }
  res.json({ received: true });
});

关键注意事项

  • 确保产品价格的计费周期设置为30天(在Stripe后台创建价格时选择「自定义周期」,输入30天),不要使用自然月周期。
  • 方法一中的cancel_at使用UTC时间戳,避免时区问题导致取消时间偏差。
  • Webhook必须配置签名验证,防止恶意伪造请求触发订阅取消操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 11:36:15