ExpressCheckout IPN无效响应状态403


ExpressCheckout IPN Invalid response status 403

我使用的PayPal IPN Listener类几个月来一直运行良好,但最近(没有任何代码更改)我收到了一个奇怪的问题。

验证即时支付通知的以下代码引发异常:无效响应状态:403

$listener = new IpnListener();
$listener->use_sandbox = PAYPAL_SANDBOX;
try {
    $listener->requirePostMethod();
    $verified = $listener->processIpn();
} catch (Exception $e) {
    error_log('Process IPN failed: ' . $e->getMessage() . " [".$_SERVER['REMOTE_ADDR']."] 'n" . $listener->getResponse());
    exit(0);
}

getResponse()方法提供以下信息:

HTTP/1.1 403 Forbidden
Server: AkamaiGHost
Mime-Version: 1.0
Content-Type: text/html
Content-Length: 284
Expires: Fri, 19 Sep 2014 08:06:58 GMT
Date: Fri, 19 Sep 2014 08:06:58 GMT
Connection: close
Strict-Transport-Security: max-age=63072000
<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD><BODY>
<H1>Access Denied</H1>
You don't have permission to access "http://www.paypal.com/cgi-bin/webscr" on this server.<P>
Reference #18.682d1402.1411114018.180f58
</BODY>
</HTML>

我用Angelleye库设置了PayPal ExpressCheckout API调用。这不是最新的版本,但到目前为止运行得还不错。

我正在生成Express Checkout付款的链接,并将其放置在HTML中。用户通过链接前往PayPal(直播和沙盒工作相同),付款并成功返回我的"谢谢"页面。已收到付款,但IPN出现故障。

提前感谢!

在与PayPal技术支持人员交谈后,终于找到了解决方案。这是一个他们已经改变并正在努力解决的问题,但要让它再次工作,你只需要发送一个带有Curl请求的"用户代理"HTTP头,所以类似于:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close', 'User-Agent: company-name'));

至于"用户代理"应该设置为什么,它只需要至少5个字符,可能是您的公司名称,如示例所示,但它不必是。

技术支持代理还向我指出:https://ppmts.custhelp.com/app/answers/detail/a_id/92如果上面的修复不起作用,但它为我做了。

Paypal IPN验证拒绝访问