2

几天来,我们一直在研究使用 PAYPAL IPN 的网站功能。当我们在 developer.paypal IPN 模拟器中测试我们的 IPN 侦听器时,我们收到一条错误消息“IPN Delivery Failed:500 Internal Server Error”。同样在 sandbox.paypal 帐户的 IPN 历史记录中,我们获得了 500 的 HTTP 响应代码。但是,如果我们将这些代码行从沙箱更改为 paypal,我们将获得 200(已发送)的 HTTP 响应代码。

$header = "POST /cgi-bin/webscr HTTP/1.1\r\n";

//use www.paypal for a live site
//$header .= "Host: www.paypal.com\r\n"; 
$header .= "Host: www.sandbox.paypal.com\r\n";

$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n";
$header .= "Connection: close\r\n\r\n";
$errstr=$errno='';

$paypalurl='ssl://www.sandbox.paypal.com';
//$paypalurl='ssl://www.paypal.com';

$fp = fsockopen ($paypalurl, 443, $errno, $errstr, 30);

两个月前,我开发了一个类似的 IPN 监听器,当我在沙盒中进行测试时,它运行良好。我昨天尝试测试那个 IPN 监听器,它也给了我 500 HTTP 响应代码。我试图在错误日志中查找错误,但没有列出有关最近 HTTP 请求的错误。

4

1 回答 1

1
  1. 使用 curl 库。PayPal 不再推荐此代码。
  2. 如果可能,请在后台作业队列中执行此操作,以便在失败时重试。PayPal 有时会遇到糟糕的情况,它偶尔会在完全有效的请求中使用 ISE 500 做出响应。唯一为我们解决这个问题的是将 IPN 回调处理置于后台。
  3. 此外,有时 PayPal 会响应 200 OK 和一些垃圾。这就是为什么您的代码应该准备好处理三种情况的原因:响应为“已验证”-> 继续,响应为“无效”-> 记录并删除,其他所有内容-> 记录并将其放回队列以稍后重试。
于 2013-10-30T17:35:18.980 回答