Iva*_*kov 2 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);
}
Run Code Online (Sandbox Code Playgroud)
该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>
Run Code Online (Sandbox Code Playgroud)
我使用Angelleye库设置了PayPal ExpressCheckout API调用.它不是最新版本,但它到目前为止工作得很好.
我正在为Express Checkout付款生成链接并将其放在HTML中.用户通过链接进入PayPal(实时和沙箱工作相同),支付并成功返回"谢谢"页面.收到付款,但IPN失败.
提前致谢!
小智 14
在与PayPal技术支持部门交谈后,终于找到了解决方法.这是一个问题,他们已经改变并正在努力修复,但要让它再次工作,你只需要发送一个带有Curl请求的"User-Agent"HTTP头,如下所示:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close', 'User-Agent: company-name'));
Run Code Online (Sandbox Code Playgroud)
至于应该将"用户代理"设置为什么,它只需要至少5个字符,可能是您的公司名称,如示例所示,但不一定如此.
技术支持代理还指出:https://ppmts.custhelp.com/app/answers/detail/a_id/92如果上述修复不起作用,但它确实适用于我.