4

由于 PayPal 在过去几周内对其开发人员 API 进行了一些更改,我注意到开发人员中心的 IPN 模拟器不再像我预期的那样响应测试 IPN。现在,它正在吐出消息:

“IPN 传递失败:无法提取响应:找不到 Content-Type”

测试 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 请求转发到我的本地开发服务器,因为微软的开发测试服务器(非常愚蠢)只能在本地访问。我不知道这是否会影响结果,但在 PayPal 更改前一周左右,它确实运行良好。

提前谢谢了

4

1 回答 1

2

否 - 这看起来您的 IPN 处理程序本身在收到来自 PayPal 的 IPN 消息后没有返回正确的 HTTP 200 响应。这是顺序:

  1. PayPal 发送 IPN 消息
  2. 您的 IPN 处理程序接收 IPN 消息并返回 HTTP 200(无响应数据)
  3. 您的 IPN 处理程序向 PayPal 发送一条 POST 消息以进行验证。

看起来#2是失败的地方。我建议检查您的 IPN 脚本,以确保它在收到 IPN 消息后立即返回成功响应(甚至在发送 IPN 进行验证之前)。

于 2013-03-15T05:01:59.160 回答