IPN 传递失败:500 内部服务器错误(沙盒)

Posted

技术标签:

【中文标题】IPN 传递失败:500 内部服务器错误(沙盒)【英文标题】:IPN Delivery Failed:500 Internal Server Error (sandbox) 【发布时间】:2013-11-01 04:08:44 【问题描述】:

几天来,我们一直在研究使用 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 请求的错误。

【问题讨论】:

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

【讨论】:

以上是关于IPN 传递失败:500 内部服务器错误(沙盒)的主要内容,如果未能解决你的问题,请参考以下文章

PayPal IPN:已完成 500 内部服务器 JSON::GeneratorError(源序列非法/格式错误的 utf-8):

贝宝沙盒帐户创建 500 内部服务器错误

贝宝沙盒 IPN 总是失败

Perl PayPal IPN 侦听器返回“500 SSL 握手失败”消息

贝宝沙盒内部服务错误

大规模支付沙盒 (IPN) 响应