400-499 或 500-599 范围内的 HTTP 状态码来自您的服务器,表示您的系统已收到请求,但无法处理该请求。请尝试以下操作:
在管理平台中,查看来自您的服务器的响应以获取更多信息:响应中可能没有任何其他信息;这取决于您的服务器配置方式以及您的代码设计的是如何应对错误
检查您的服务器日志是否指示错误或警告:这些错误应该会指出错误响应的原因(可能是您的 Webhook 处理代码或服务器上的配置存在问题)
确认收到的事件具有您的代码能够处理的 API 版本:API 版本定义事件中包含的对象的结构;传入事件和您的处理代码之间的 API 版本不匹配可能会导致意外错误
下面详细介绍导致 4xx 和 5xx 状态码的一些常见错误及其解决方法。
此错误或类似错误(措辞可能因库而异)表示 Webhook 签名验证过程失败。此错误通常是由以下某种原因引起的:
在签名验证过程中使用了错误的 Webhook 签名密码 (whsec_
)
确保您使用的 Webhook 签名密码与传送事件的 Webhook 端点相匹配,您可以在选择特定的 Webhook 端点后在管理平台中找到该端点
如果您使用的是 Stripe CLI,它将生成并显示一个 Webhook 签名密码,供您在运行 stripe listen
命令时使用
请求主体在进行 Webhook 签名验证之前被修改
Webhook 签名验证过程需要来自 Stripe 的传入请求未经修改的原始主体才能正常运行
如果您的代码在签名验证之前解析、格式化或以其他方式修改请求的主体,您将看到类似这样的错误
调整或删除代码,包括可能正在修改传入请求的原始主体的中间件,然后重试
注意:Node.js 中间件经常修改传入请求的主体;请尝试在任何其他中间件运行之前提取原始主体
此错误或类似的错误(措辞可能因库而异)意味着收到的事件太旧而无法成功验证。Webhook 签名有一个时间组件,必须在收到事件后随即进行验证。
请尝试以下操作:
确认服务器上的时间和日期设置正确
确保一收到事件便立即验证传入的 Webhook 签名,没有延迟
这些错误通常是由代码引发异常、解析错误或某种重大更改引起的。
大多数情况下,此类错误是由负责接受和处理 Webhook 的服务器或基础设施上的某种更改引起的。新的或更改后的代码、服务器更新或配置更改可能会引入新的故障模式或不兼容性。
当您遇到此错误时,请检查服务器的错误日志以获取更多信息。根据配置、操作系统、Web 服务器、使用的编程语言和其他因素,错误日志的位置因服务器而异,因此我们无法提供具体说明。 建议您检查日志和错误日志配置,了解您可能用于接收 Webhook 的以下任何要素:
您的编程语言(Ruby、Python、PHP、Java、Node.js、Go、.NET 等)
您的 Web 服务器(Nginx、Apache、Microsoft IIS 等)
您的云或服务器提供商(Amazon Web Services、Google Cloud Computing、Cloudflare 等)