后端岗位面试题更新 2026-08-05

请描述在 AI 爆款文章创作器项目中,集成 Stripe 支付的整体流程,并重点说明在 Webhook 处理中如何保证幂等性?

后端开发风险判断系统设计方案权衡

考察说明

考查候选人对第三方支付集成的完整流程理解,以及处理异步回调时保证幂等性的工程能力。

回答思路

  1. 【回答框架 1】支付流程通常包括:前端创建支付会话(PaymentIntent),传入金额、币种、元数据(用户ID、订单ID),后端创建会话后返回客户端密钥,前端确认支付;Stripe 异步发送 webhook,后端需处理 payment_intent.succeeded 等事件,更新订单状态并触发后续业务。
  2. 【回答框架 2】Webhook 幂等性主要通过唯一标识和去重机制保证:每个 webhook 事件有唯一 id(evt_xxx),可基于该 id 加缓存(如 Redis)或数据库唯一约束实现已处理事件去重;对于业务动作,还应在订单表增加支付状态字段,并利用数据库唯一键或状态机防止重复入账。
  3. 【回答框架 3】此外,建议在 webhook 处理中采用事务:先检查事件是否已处理(如查 event_id 记录),未处理则更新订单状态并写入事件处理记录,保证原子性。对于网络重试,Stripe 会重试失败事件,处理逻辑必须幂等,不能重复发放内容或重复修改订单。
  4. 【回答框架 4】安全性方面,需验证 webhook 签名,使用 Stripe 提供的签名头,计算 HMAC 并比对,防止伪造请求;同时设置 secret 管理,避免硬编码。
  5. 【回答框架 5】测试与监控:使用 Stripe CLI 本地测试 webhook,生产环境可记录事件处理日志,监控失败重试和延迟,并设置告警。
  6. 【关键点 1】Webhook 通过事件唯一 ID(evt_xxx)结合存储(Redis/DB)实现去重。
  7. 【关键点 2】业务幂等还需关联订单状态,使用唯一约束或状态机。
  8. 【关键点 3】处理流程必须使用事务,确保事件标记与业务更新原子性。
  9. 【关键点 4】验证 webhook 签名防止伪造请求。
  10. 【关键点 5】网络重试必须幂等,不能导致重复发放或重复扣款。
  11. 【易错点 1】仅依赖事件 ID 去重可能漏掉同订单多次成功事件,需结合订单状态再判断。
  12. 【易错点 2】未验证签名就处理 webhook 有安全风险。
  13. 【易错点 3】不使用事务可能因部分失败导致状态不一致。