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

如何基于使用限额通过Stripe实现订阅套餐自动续费?

实现Stripe额度包自动续购方案

核心逻辑

你的场景属于预付费额度包自动续购:用户订阅固定用量的套餐,当使用量耗尽时,自动从用户绑定的支付方式扣款,重新发放对应额度。结合你已完成的Stripe集成、套餐配置和使用追踪系统,通过「业务触发+Stripe API调用+Webhook回调」即可实现。

具体实现步骤

1. 确保用户已保存可离线扣款的支付方式

用户首次订阅时,必须让支付方式标记为可用于后续离线扣款,这是自动续购的前提:

  • 创建订阅时的关键参数(以Python为例):
stripe.Subscription.create(
  customer="cus_XXX", # 你的用户对应的Stripe Customer ID
  items=[{"price": "price_XXX"}], # 对应abcd套餐的定价ID
  payment_behavior="default_incomplete",
  expand=["latest_invoice.payment_intent"],
  setup_future_usage="off_session" # 核心:标记支付方式可用于无用户交互的离线扣款
)
  • 若用户未保存支付方式,需先通过Stripe Elements收集支付信息,将其保存为PaymentMethod并关联到对应Customer对象。

2. 使用量触发生成自动续购请求

当你的系统检测到用户使用量达到限额时,执行以下操作:

方式一:重复创建同一定价的订阅(适合需要保留订阅关系的场景)

new_sub = stripe.Subscription.create(
  customer="cus_XXX",
  items=[{"price": "price_XXX"}],
  off_session=True, # 明确为离线无交互模式
  payment_settings={
    "save_payment_method": True # 确保后续续购仍可使用该支付方式
  }
)

方式二:创建一次性Payment Intent扣款(适合无需订阅周期的单次额度购买)

intent = stripe.PaymentIntent.create(
  amount=1000, # 套餐金额,单位为分(示例为10美元)
  currency="usd",
  customer="cus_XXX",
  payment_method="pm_XXX", # 用户已保存的支付方式ID
  off_session=True,
  confirm=True, # 自动尝试扣款
)

3. 通过Webhook处理续购结果

必须配置Stripe Webhook监听支付事件,完成业务闭环:

  • 监听payment_intent.succeeded:扣款成功后,在你的数据库中重置用户的使用额度,标记续购完成。
  • 监听payment_intent.payment_failed:扣款失败时,记录失败原因,限制用户继续使用服务,并触发通知(如邮件提醒用户更新支付方式)。

4. 异常情况处理

  • 支付方式失效:若用户信用卡过期、余额不足,Stripe会返回支付失败。需提供页面让用户通过Stripe Elements重新绑定支付方式,并更新关联的Customer对象。
  • 额度准确性:每次扣款成功后,务必准确重置用户使用量计数器,避免重复扣钱或额度发放错误。

关键注意事项

  • 所有离线扣款操作必须标记off_session: True,符合Stripe合规要求。
  • 开启Stripe Webhook并验证签名,确保事件来源真实可靠。
  • 用户首次订阅时,需明确告知“使用额度耗尽将自动扣款续购”,符合隐私和支付合规规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:52:16