Flutter中如何通过Stripe实现月付/季付等定期自动续费功能?
问题解答
是否必须接入后端
是,无法仅靠前端实现订阅自动扣费,原因如下:
- Stripe自动扣费的核心逻辑依赖服务端交互:订阅管理、自动扣费触发、支付状态同步都需要调用Stripe的保密接口,这类接口需要使用你的Stripe账户密钥(
sk_开头),该密钥绝对不能暴露在前端,否则会导致账户资金风险。 - 你当前用的
payment_intents接口本身就是为单次支付设计的,不支持自动续期扣费逻辑,订阅场景需要使用Stripe的Products、Prices、Subscriptions体系相关接口,这类接口不允许前端直接调用。
是否需要更换依赖包
不需要,flutter_stripe已经完整支持订阅场景的前端支付流程,无需引入其他第三方包。
具体实现建议
第一步:Stripe后台预配置
先登录你的Stripe账户后台,创建3个对应套餐的产品和价格:
- 月度、季度套餐:价格类型设置为recurring(周期性),分别设置对应扣费周期
- 终身套餐:价格类型设置为one_time(一次性),沿用你之前的单次支付逻辑即可
第二步:后端核心逻辑开发
你需要搭建一个简易后端实现以下能力:
- 提供接口接收前端传递的用户选择的套餐ID,对应创建Stripe Customer对象,如果是周期性套餐则创建Stripe Subscription对象,如果是终身套餐则创建Payment Intent对象,将生成的
client_secret返回给前端 - 配置Stripe Webhook,监听以下核心事件更新你的用户权益数据:
invoice.paid:扣费成功,延长用户订阅有效期invoice.payment_failed:扣费失败,触发用户通知、暂停订阅权益等逻辑
- 自动扣费无需你手动写定时任务,Stripe会按照你设置的套餐周期自动发起扣费,你只需要通过webhook同步状态即可
第三步:前端流程调整
原有flutter_stripe的支付流程基本不需要大改,只需要将原来请求payment_intents获取client_secret的步骤,替换为请求你自己的后端接口获取client_secret,之后依然调用presentPaymentSheet方法完成支付即可。
注意:所有涉及Stripe密钥的操作必须全部放在后端执行,禁止在Flutter端硬编码、存储任何Stripe密钥信息,即使是Release版本也存在被反编译泄露的风险。
内容的提问来源于stack exchange,提问作者TahaKZed
相关产品推荐
相关产品推荐

