You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地测试Stripe Webhook时HTTP_STRIPE_SIGNATURE Header为空问题

问题解决

核心问题1:请求头名称错误

你代码里使用的HTTP_STRIPE_SIGNATURE是WSGI规范中转后的头名称,但FastAPI/Starlette这类异步框架直接使用原始HTTP头名称。Stripe Webhook的签名头实际为Stripe-Signature,获取头的代码应修改为:

sig_header = request.headers.get("Stripe-Signature")

核心问题2:Payload处理错误

stripe.Webhook.construct_event要求传入原始请求体字节内容,而非解析后的JSON字典。你当前用await request.json()解析请求体,会丢失签名验证所需的原始字节信息,正确处理方式是先获取原始请求体,再按需解析:

# 先获取原始请求体
payload = await request.body()
# 按需解析为JSON结构
payload_json = await request.json()
# 使用原始payload完成签名验证
event = stripe.Webhook.construct_event(
    payload, sig_header, endpoint_secret
)

关于Stripe CLI本地测试的签名问题

Stripe CLI本地测试时会自动添加合法的Stripe-Signature头,前提是启动监听时指定了正确的端点密钥:

stripe listen --forward-to localhost:8000/your-webhook-path --secret whsec_xxx

若未指定密钥,CLI不会添加签名头,此时sig_header会返回None。另外,也可在Stripe Dashboard的Webhook设置中为本地端点配置密钥并关联到CLI。

额外排查点

  • 确认Stripe CLI已完成登录(执行stripe login),且监听命令中的端点路径与代码路由一致
  • 检查请求是否被反向代理(如Nginx)篡改,确保Stripe-Signature头被完整传递

内容的提问来源于stack exchange,提问作者Prakhar Rathi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:52:16