Stripe支付成功处理及后续路由的正确实现方案问询
关于Stripe Checkout钱包充值的两个问题解答
1. 选择哪个Webhook确保100%支付成功以更新钱包余额
直接结论:优先使用checkout.session.completed,原因如下:
- 这个事件是Stripe为Checkout流程专门设计的,触发前提是用户完成Checkout流程且支付已成功(包含底层
payment_intent.succeeded的完成),完全覆盖「支付成功+流程走完」的业务需求。 payment_intent.succeeded是通用支付成功事件,可能在非Checkout场景下触发(比如直接调用Payment Intent API),如果你的业务完全基于Checkout流程,用这个事件会出现场景不匹配的问题——比如支付成功但用户没走完Checkout流程,导致业务逻辑触发时机错误。- 核心注意:无论选哪个Webhook,必须验证Stripe的Webhook签名,确保事件是官方发送的,避免伪造事件恶意篡改余额。
2. 安全获取Success URL的支付详情
把session id作为URL查询参数是常规方案,做好后端验证就能规避篡改风险,具体步骤:
- 前端跳转回应用时携带
session_id参数,后端接收到后调用Stripe的stripe.checkout.sessions.retrieve(session_id)接口,获取真实的会话数据。 - 验证两个核心点:
- 会话状态为
complete,确认支付确实完成; - 会话
metadata里的用户ID(创建Checkout Session时需将当前用户ID存入metadata)和当前登录用户ID一致,确保该会话属于当前用户,防止他人用其他用户的session id伪造支付记录。
- 会话状态为
- 只有验证通过后,再向用户展示支付详情或执行余额更新逻辑。
内容的提问来源于stack exchange,提问作者Moo33
相关产品推荐
相关产品推荐

