Paypal Webhook事件始终处于Pending状态,返回200仍未解决
针对你遇到的PayPal Webhook事件先Pending后转为Failure的问题,核心原因大概率是PayPal未认可你的响应,以下是具体排查和解决点:
确保返回无内容的200响应
PayPal要求Webhook接收端点必须返回纯200 OK状态码且无任何响应体——哪怕是空JSON({})或空白HTML都会被判定为无效响应。很多框架的Ok()方法会默认附带空响应体,比如ASP.NET Core的return Ok()会输出{},这会触发PayPal的重试逻辑。需改为返回空结果,示例:// ASP.NET Core 示例 return new EmptyResult();其他语言同理,确保响应体长度为0,且状态码严格为200。
控制响应超时在15秒内
PayPal会在15秒内等待你的响应,若超过时限即使后续返回200,也会被判定为超时并触发重试。如果事件处理逻辑耗时较长(如写库、调用第三方API),需将这些操作异步化——比如放入消息队列,先快速返回200,再后台处理业务逻辑。检查服务器TLS配置
生产环境PayPal强制要求TLS 1.2或更高版本,且使用兼容加密套件(如TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)。若服务器使用TLS 1.1及以下版本,可能导致PayPal无法正确接收响应,进而引发状态异常。确认响应头正确性
避免设置多余的响应头字段:若无需响应体,不要设置Content-Type;若必须设置,需确保Content-Length为0,防止PayPal等待更多内容。查看Webhook重试日志
在PayPal控制台的Webhook事件详情中,查看重试记录的响应状态码和返回内容。若显示“Invalid Response”,可直接定位到响应体或状态码的问题。
内容的提问来源于stack exchange,提问作者gg0000

