阅读原文:如何集成 Stripe 等收费系统
一、本章核心学习目标
+- 理解最小可行的支付系统的核心架构,掌握收费链路的完整逻辑
+- 掌握 Stripe 快速接入的完整流程,从后台配置到前后端实现
+- 学会用提示词让 AI 自动完成支付系统的接入和本地联调
+- 了解不同地区的支付方案选型,根据用户地区选择合适的收费工具
二、支付系统的三大核心原则
这是支付系统最核心的边界,只要边界没错,换任何支付工具架构都不变:
+- 价格必须由后端决定 ,不能相信前端传来的金额,防止篡改
+- 真正让权限生效的是 Webhook ,不是前端的 success 页面
+- 你自己的数据库必须保存支付状态,不能只依赖支付平台的后台
三、前后端的正确分工
很多新手会想让前端直接连 Stripe 跳过后端,但真收钱的时候这会出问题:
3.1 前端直连的风险
+- 价格容易被改 :用户可以修改前端的请求,把 100 元的商品改成 1 元
+- 敏感信息暴露 :密钥、定价逻辑这些敏感内容不该放在前端
+- 无法可靠确认支付 :前端跳转成功不代表数据库已经同步
+- 数据库状态混乱:用户说付了钱,但系统里没有记录
3.2 正确的分工
+- 前端负责 :展示按钮、发起购买请求、跳转支付页面
+- 后端负责:决定价格、创建支付会话、接收 Webhook、更新数据库
一句话总结:前端可以负责跳转,后端必须负责定价和确认。
四、什么时候适合先用 Stripe
Stripe 最适合这些场景:
+- 面向海外用户的 SaaS 产品
+- 订阅制会员产品
+- 数字产品、模板、AI 积分包
+- 想快速验证商业化,不想一开始处理太多本地支付细节
如果你的主要用户在中国大陆,通常不会优先选 Stripe,具体选型看附录。
五、最小可行支付链路
最小的支付链路只要跑通这几步,就有了完整的骨架:
-
用户点击购买按钮
-
前端向后端请求支付链接
-
后端用 Stripe 密钥创建支付会话
-
用户跳转到 Stripe 页面完成付款
-
Stripe 通过 Webhook 通知后端付款成功
-
后端更新数据库的用户状态
5.1 标准时序图
Stripe Checkout 后端 API 前端页面 Stripe Checkout 后端 API 前端页面 前端传 plan / userId / email\n不传最终收费金额 用户 点击"升级"或"购买" 1 POST /api/billing/create-checkout-session 2 校验套餐并映射 priceId 3 创建 Checkout Session 4 返回 session.url 5 返回支付链接 6 跳转到 Stripe 支付页 7 完成付款``` 8 用户
六、Stripe 快速接入 5 步法
6.1 第一步:在 Stripe 后台创建商品和价格
Stripe 里有两个核心概念:
+- Product :你卖的是什么,比如 Pro 会员
+- Price :这个东西卖多少钱、按什么周期收费,比如 月付 9.9 美元
这一步是把你的定价信息在 Stripe 里定义清楚,后端之后会用 price_id 来创建支付链接,而不是直接传金额。
操作建议:
-
先在 Test mode(测试模式) 下操作,不要一开始用正式环境
-
创建一个 Product,比如
Pro Plan -
在这个 Product 下创建 Price,比如月付、年付两个价格
-
记录下每个 Price 对应的
price_id,这是后端要用到的关键信息
6.2 第二步:准备环境变量
你需要准备这些环境变量,敏感变量必须放在后端 :
+- STRIPE_SECRET_KEY:Stripe 的后端 API 密钥
+- STRIPE_WEBHOOK_SECRET:Webhook 验签密钥
+- STRIPE_PRICE_PRO_MONTHLY:月付套餐的 price_id
+- STRIPE_PRICE_PRO_YEARLY:年付套餐的 price_id
+- APP_URL:你的应用域名,用于回调
+- 数据库相关的密钥,比如 Supabase 的服务密钥
6.3 第三步:后端创建 Checkout Session
这一步不用自己写,直接让 AI 参考官方文档帮你实现,核心是:
-
后端根据用户选的套餐,拿到对应的 price_id
-
调用 Stripe API 创建 Checkout Session
-
返回支付链接给前端
6.4 第四步:前端跳转到支付页
前端只需要:
-
点击购买按钮后,调用后端的接口获取支付链接
-
跳转到 Stripe 的支付页面,让用户完成付款
6.5 第五步:Webhook 更新数据库状态
这是最关键的一步:
-
用户跳转到 success 页面不代表支付成功
-
真正的成功是 Stripe 通过 Webhook 通知你,然后后端更新数据库的用户会员状态
七、让 AI 帮你快速接入的技巧
7.1 一键接入的提示词模板
你可以直接把这个提示词贴给 AI IDE,让它自动帮你完成整个接入:
Plain
请你帮我把当前项目接上 Stripe 支付,我希望做一个最简单能跑起来的会员收费功能。
我的要求:
1. 我是零基础,请你先自己看项目,再决定代码应该改哪里。
2. 不要让我自己判断目录结构、路由结构、数据库结构。
3. 我只想先做最简单版本:月付和年付两个套餐。
4. 用户点击购买后,能跳到 Stripe 付款页面。
5. 付款成功后,我数据库里的会员状态能变成已开通。
6. 不要一开始加太多复杂功能,比如优惠券、升级降级、复杂发票。
输出要求:
1. 先给我一个改动计划。
2. 然后直接修改代码。
3. 最后告诉我怎么一步一步本地测试。
4. 如果有哪个步骤还需要我去 Stripe 后台操作,请直接把链接和要点告诉我。
7.2 本地联调的提示词
如果想让 AI 帮你完成本地联调,可以用这个:
Plain
请继续帮我把 Stripe 支付真正跑通,我想一步一步照着做,不想自己猜。
请参考官方文档:
- https://docs.stripe.com/webhooks
- https://docs.stripe.com/stripe-cli
- https://docs.stripe.com/stripe-cli/use-cli
我的目标:
1. 告诉我先打开哪些 Stripe 页面。
2. 告诉我如何拿到 STRIPE_WEBHOOK_SECRET。
3. 告诉我如何使用 stripe login 和 stripe listen。
4. 告诉我怎样验证 checkout.session.completed 已经成功打到本地 webhook。
5. 如果当前项目需要先启动前端和后端,也请顺带告诉我具体命令。
6. 不要只讲原理,请按实际操作步骤输出。
7. 如果我某一步做错了,也请告诉我最常见的报错会长什么样。
八、最容易踩坑的 4 件事
-
把
success页面当成支付成功:真正决定状态的是 Webhook,不是前端跳转 -
让前端传金额:这会带来严重的价格篡改风险,价格必须后端决定
-
Webhook 路由被
express.json()提前处理:Stripe 验签需要原始请求体,不能提前解析 JSON -
没有做幂等处理:Webhook 可能会重试,如果每次都重复加会员 / 积分,就会出问题
九、支付方案选型建议
不要一开始就想把全球支付方式一次接完,先按主要用户地区选一个主链路:
| 你的主要用户 | 最先尝试的方案 |
|---|---|
| 海外 SaaS / 国际用户 | Stripe |
| 中国大陆用户 | 支付宝 / 微信支付 |
| 香港或跨境团队 | Stripe + 本地钱包 / FPS 聚合方案 |
更实际的顺序:先跑通最小可行支付,再根据真实用户来源补其他支付方式。
附录
附录 A:Stripe 里最常见的几个对象
| 对象 | 作用 | 通俗理解 |
|---|---|---|
Product |
描述卖的是什么 | 商品或会员套餐 |
Price |
描述卖多少钱、周期怎么收费 | 月付、年付、买断 |
Checkout Session |
Stripe 托管的支付流程 | 付款页 |
Subscription |
周期订阅关系 | 自动续费会员 |
Customer |
付款用户 | Stripe 中的客户档案 |
Webhook |
异步通知 | Stripe 告诉你 "这笔款怎么样了" |
附录 B:为什么 success 页面不等于支付成功
这是最容易踩的坑,用户跳转到成功页,不代表支付真的完成了,因为:
-
用户可能付款后网络断了,没跳转到成功页
-
前端的跳转是不可靠的,真正的支付状态必须由后端通过 Webhook 确认
-
完整的流程必须是:Stripe 通知后端→后端更新数据库→前端刷新后读取新状态
附录 C:不同地区的支付方案对比
| 地区 | 推荐方案 | 特点 |
|---|---|---|
| 中国大陆 | 支付宝 / 微信支付 | 国内用户覆盖最广,符合本地习惯 |
| 香港 | Stripe + 聚合支付 | 支持跨境收款,兼容本地钱包 |
| 海外 / 国际 | Stripe | 海外 SaaS 首选,订阅制支持好 |
| PayPal | 覆盖更广,适合电商零售 | |
| Paddle | 合规性更好,适合做全球 SaaS | |
| Lemon Squeezy | 更简单的一站式方案,适合小团队 | |
| 企业级 | Airwallex(空中云汇) | 跨境收款、多币种兑换 |
| Adyen | 大型企业的全球支付解决方案 |
本章总结
到这里,你就掌握了完整的支付接入逻辑:
-
核心原则:后端定价、Webhook 确认、本地数据库存状态
-
完整链路:前端发起→后端创建会话→用户支付→Webhook 通知→更新数据库
-
用 AI 可以快速完成整个接入流程,不用自己啃复杂的文档
-
根据用户地区选择合适的支付方案,先跑通最小链路再扩展
掌握了支付,你就完成了从原型到商业化产品的最后一步,真正能把你的产品变成可以赚钱的生意了。