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

本地测试Stripe Webhook时出现Invalid Signature错误求助

解决Stripe Webhook本地测试签名无效问题

以下是排查和解决invalid signature错误的具体步骤:

1. 确认端点密钥(endpoint_secret)正确

Stripe CLI启动时会输出专属的本地测试密钥,格式类似whsec_xxxxxxxxxxxx,你必须使用这个密钥,而非Stripe Dashboard里配置的生产/测试webhook密钥。

  • 重新运行./stripe listen --forward-to http://localhost/cb/stripe,复制终端输出的webhook signing secret值,替换代码中$endpoint_secret = 'whsec...';的省略部分。

2. 确保请求体未被修改

若服务器或框架自动解析POST请求体,会导致php://input无法获取原始payload,进而签名验证失败:

  • 检查代码中是否多次读取php://input(比如同时用$_POST和file_get_contents),确保仅读取一次并直接传入constructEvent方法。
  • 若使用PHP框架(如Laravel、Symfony),关闭自动解析请求体的中间件,或使用框架提供的原始请求体获取方式(例如Laravel的$request->getContent())。
  • 检查服务器是否开启gzip压缩,这会修改原始payload内容导致签名不匹配,需关闭针对该webhook端点的压缩设置。

3. 验证签名头的获取是否正确

确认服务器环境能正确获取Stripe-Signature请求头:

  • 在代码中添加日志打印$_SERVER['HTTP_STRIPE_SIGNATURE']的值,确保其存在且不为空。部分服务器会将请求头的横线转为下划线,但Stripe-Signature对应的$_SERVER键就是HTTP_STRIPE_SIGNATURE,若不存在,需检查服务器配置是否拦截了该请求头。

4. 检查代码逻辑与依赖

  • 确保Stripe PHP SDK为最新版本,旧版本可能存在签名验证bug,运行composer update stripe/stripe-php完成更新。
  • 确认write_log函数不会在签名验证前输出内容,避免干扰HTTP响应流程。

额外测试步骤

  1. 停止当前stripe listen进程,重新启动以生成新的签名密钥,替换到代码中。
  2. 运行stripe trigger payment_intent.succeeded时,观察终端输出,确认请求已正确转发到本地端点。

内容的提问来源于stack exchange,提问作者The Hawk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:42:17