求助:Stripe重复向WhatsApp Bot服务器发送支付回调请求
WhatsApp Bot + Stripe 重复回调问题排查方案
检查Webhook端点响应状态
Stripe重复发送回调的核心原因之一是端点未在10秒内返回200 OK,或返回了非2xx状态码。Stripe会对这类情况触发指数退避重试。- 先简化端点逻辑,仅返回
200 OK测试,若不再重复触发,说明原逻辑里的耗时操作(比如同步发送WhatsApp消息)导致超时,需改成异步处理。 - 确保服务器网络稳定,不会出现请求丢包或延迟过高的情况。
- 先简化端点逻辑,仅返回
实现事件幂等性校验
Stripe每个事件都有唯一的id,必须在服务端记录已处理的事件ID,避免重复执行业务逻辑:# 示例伪代码(可根据你的开发语言调整) def handle_stripe_webhook(event): # 从数据库/缓存中查询是否已处理该事件 if is_event_processed(event.id): return 200 # 执行支付成功后的逻辑(发送感谢消息等) send_thank_you_message(event.data.object.customer) # 标记事件为已处理 mark_event_as_processed(event.id) return 200- 把已处理的事件ID持久化到数据库(比如MySQL、Redis),避免服务器重启后丢失记录。
核对Stripe Webhook配置
- 登录Stripe测试后台,进入Webhook详情页,确认
invoice_successful和invoice_failed事件仅订阅一次,无重复订阅。 - 查看该端点的重试记录,若存在大量“失败重试”,说明端点响应存在问题,针对性修复即可。
- 登录Stripe测试后台,进入Webhook详情页,确认
排查业务逻辑是否重复生成事件
- 检查你的订单创建逻辑,是否存在重复调用Stripe API生成invoice的情况,导致Stripe多次触发
invoice_successful事件。 - 查看Stripe Dashboard的事件列表,确认重复回调的事件ID是否一致:若ID相同是重试问题,若ID不同则是业务端重复生成事件。
- 检查你的订单创建逻辑,是否存在重复调用Stripe API生成invoice的情况,导致Stripe多次触发
测试环境特殊场景验证
换用Stripe官方测试卡片(如4242 4242 4242 4242)重新发起支付,排除测试卡片或测试操作导致的异常重复事件。
内容的提问来源于stack exchange,提问作者Surabhi MS
相关产品推荐
相关产品推荐

