ExpressCheckout IPN响应状态无效403

时间:2014-09-19 13:16:54

标签: php paypal paypal-ipn

我正在使用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 library设置了PayPal ExpressCheckout API调用。它不是最新版本,但到目前为止工作得很好。

我正在为Express Checkout付款生成链接并将其放在HTML中。用户通过链接进入Pay​​Pal(实时和沙箱工作相同),支付并成功返回我的&#34;谢谢&#34;页。收到付款,但IPN失败。

提前致谢!

1 个答案:

答案 0 :(得分:14)

在与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如果上述修复不起作用,但它确实适用于我。

Access Denied on Paypal IPN verification