由于PayPal在过去几周内对其开发人员api进行了一些更改,我注意到开发人员中心的IPN模拟器不再像我期望的那样响应测试IPN。现在,它输出消息:
"IPN Delivery Failed:Cannot extract response: no Content-Type found"
测试IPN本身似乎实际上执行得很好-我的IPN控制器(在ASP中)正在接收IPN,并将其回显,PayPal响应为"已验证",正如我所期望的。
这只是一个模拟器前端bug,还是我在这里错过了什么?我的代码(据我所知)肯定是发送ContentType头,就像它一直是:
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded"; <-- ## HEADER IS PRESENT ##
byte[] param = Request.BinaryRead(HttpContext.Request.ContentLength);
string strRequest = Encoding.ASCII.GetString(param);
strRequest += "&cmd=_notify-validate";
req.ContentLength = strRequest.Length;
值得注意的是,我使用nginx作为代理将IPN请求转发到本地开发服务器,因为微软的开发测试服务器(非常愚蠢)只能在本地访问。我不知道这是否会影响结果,但它工作良好,就在一个星期前PayPal的变化。
提前致谢
不-这看起来像你的IPN处理程序本身没有返回一个正确的HTTP 200响应从PayPal收到IPN消息后。顺序如下:
- PayPal发送IPN消息
- 你的IPN处理器接收到IPN消息并返回HTTP 200(无数据响应)
- 您的IPN处理器发送POST消息给PayPal进行验证。
看起来#2是它失败的地方。我建议检查您的IPN脚本,以确保它在收到IPN消息后立即返回成功的响应(甚至在发送IPN进行验证之前)。