如何在Flutter应用中实现Stripe订阅功能?
Flutter 实现 Stripe 定期订阅(3种套餐)
核心思路
用Stripe Checkout Session实现是最快捷的方案,无需自行搭建卡片收集UI,只需配合后端完成Session创建与Webhook验证,前端负责唤起支付流程并同步订阅状态。
步骤1:准备工作
- 在Stripe Dashboard创建3个订阅产品(如基础/进阶/高级),每个产品配置定期支付价格(月付/年付等,价格ID格式为
price_xxxx) - 给Flutter项目安装Stripe插件:
flutter pub add flutter_stripe
步骤2:后端实现(关键)
所有Stripe敏感操作必须在后端完成,前端仅做交互:
- 编写接口接收前端传来的价格ID
- 调用Stripe API创建Checkout Session,核心参数:
mode: 'subscription'(指定为订阅模式)line_items: 传入对应价格ID和固定数量1success_url/cancel_url: 用户支付完成/取消后跳转的地址(可设为App Deeplink或网页)
- 将生成的
sessionId返回给前端
步骤3:前端唤起支付流程
拿到后端返回的sessionId后,调用Stripe的Checkout跳转:
import 'package:flutter_stripe/flutter_stripe.dart'; // 从后端获取对应套餐的sessionId final sessionId = await _yourApiClient.getSubscriptionSession(priceId: 'price_xxxx'); // 唤起Stripe Checkout WebView final result = await Stripe.instance.redirectToCheckout( sessionId: sessionId, ); // 处理跳转结果 if (result.success) { // 支付成功,调用后端接口同步用户订阅状态 await _yourApiClient.fetchUserSubscriptionStatus(); } else { // 支付失败或取消,提示用户 print(result.error?.message); }
步骤4:处理订阅后续逻辑
- Webhook验证:后端监听Stripe的
checkout.session.completed事件,验证签名后将用户订阅信息(如订阅ID、到期时间、套餐类型)存入数据库 - 订阅状态同步:前端每次启动或进入订阅页面时,调用后端接口获取当前用户的订阅状态,更新UI
- 取消订阅:若支持用户取消,后端调用Stripe的
subscriptions.cancel接口,传入订阅ID即可
测试注意事项
用Stripe测试卡片完成支付验证:
- 卡号:
4242 4242 4242 4242 - 过期日期:任意未来月份/年份(如
12/30) - CVC:任意3位数字(如
123)
内容的提问来源于stack exchange,提问作者Francesco Zanoncelli
相关产品推荐
相关产品推荐

