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

使用Stripe CLI测试dj-stripe webhook时返回400错误如何解决?

问题排查与解决步骤
  • 配置DJSTRIPE_WEBHOOK_SECRET参数
    dj-stripe的webhook签名验证强依赖该配置,你需要把Stripe CLI启动stripe listen后输出的whsec_开头的webhook签名密钥,添加到settings.py中:
# settings.py
DJSTRIPE_WEBHOOK_SECRET = "whsec_flxws0UD9fzx16CMB5krTZdzy5LI63SE"

注意Stripe CLI本地测试时生成的是临时密钥,每次重启stripe listen都会变化,需要同步更新配置,不要直接用Stripe后台生成的生产环境密钥测试本地CLI请求。

  • 检查反向代理的请求头透传配置
    从你贴的日志来看请求经过了Nginx转发,dj-stripe首先会校验request.META中是否存在HTTP_STRIPE_SIGNATURE字段,不存在直接返回400。你可以先绕开Nginx,直接把stripe listen的转发地址指向Django服务的原生端口(比如默认的8000)测试:
    stripe listen --forward-to localhost:8000/stripe/my_product_webhook/
    如果直接访问Django端口返回正常,就需要修改Nginx配置,确保不会丢弃Stripe-Signature自定义头,添加以下配置即可:
# nginx配置的server段内
underscores_in_headers on;
proxy_pass_request_headers on;
  • URL显示空格无需处理
    你看到的DEBUG输出里的URL空格是Django调试页面的展示格式,不是实际URL的组成部分,不会影响请求匹配,无需额外调整。
  • 临时关闭验证辅助排查(仅测试用,禁止生产环境配置)
    如果上述步骤都未排查出问题,可以在settings.py中临时关闭webhook签名验证:
# settings.py 仅本地测试用,生产必须删除
DJSTRIPE_WEBHOOK_VALIDATION = "skip"

如果调整后请求返回200,就可以确定问题出在签名验证环节,再回头核对密钥配置、API版本匹配即可。

内容的提问来源于stack exchange,提问作者Scott Skiles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:06:03