我正在使用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中。用户通过链接进入PayPal(实时和沙箱工作相同),支付并成功返回我的&#34;谢谢&#34;页。收到付款,但IPN失败。
提前致谢!
答案 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如果上述修复不起作用,但它确实适用于我。