由于PayPal在过去几周内对其开发人员API进行了一些更改,我注意到开发人员中心的IPN模拟器不再像我预期的那样响应测试IPN.现在,它正在吐出消息:
“IPN传递失败:无法提取响应:未找到内容类型”
测试IPN本身似乎实际上执行得很好 – 我的IPN控制器(在ASP中)正在接收IPN,回复它,而PayPal正在响应“验证”,正如我所料.
这只是一个模拟器前端错误,还是我在这里遗漏了什么?我的代码是(据我所知)肯定发送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请求转发到我的本地开发服务器,因为Microsoft的开发测试服务器(非常愚蠢地)只能在本地访问.我不知道这是否会影响结果,但在PayPal发生变化之前大约一周前它确实运作良好.
提前谢谢了
最佳答案 不 – 看起来您的IPN处理程序本身在从PayPal接收到IPN消息后没有返回正确的HTTP 200响应.这是序列:
> PayPal发送IPN消息
>您的IPN处理程序接收IPN消息并返回HTTP 200(没有数据作为响应)
>您的IPN处理程序向PayPal发送POST消息以进行验证.
看起来#2就是失败的地方.我建议检查你的IPN脚本,以确保它在收到IPN消息后立即返回成功响应(甚至在发送IPN进行验证之前).