You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现PayPal IPN验证时沙箱返回Access Denied无法校验问题

PayPal IPN校验报错修复方案

你遇到的Access Denied报错以及始终进入else分支的问题,由以下几个代码缺陷导致,按优先级修复即可正常使用:

1. 补充原始POST数据获取逻辑

你代码中直接使用了未赋值的$raw_post_data变量,导致提交给PayPal的校验请求内容错误,触发接口权限拒绝。
在代码最开头添加原始输入获取逻辑:

$raw_post_data = file_get_contents('php://input');

2. 补充CURL必要请求头

PayPal IPN接口要求请求必须携带合法的Content-Type和User-Agent头,你当前仅配置了Connection头,会被判定为非法请求。
修改CURLOPT_HTTPHEADER配置项,补充两个头信息:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Connection: Close',
    'Content-Type: application/x-www-form-urlencoded',
    'User-Agent: PHP-IPN-Verification-Script'
));

3. 移除废弃的magic_quotes相关逻辑

get_magic_quotes_gpc函数在PHP 5.4及以上版本已经被完全移除,新版本PHP运行这段逻辑会导致参数拼接异常。
删除原有magic_quotes相关判断,直接处理参数编码即可:

// 替换原有magic_quotes判断段的全部代码
foreach ($myPost as $key => $value) {
    $value = urlencode($value);
    $req .= "&$key=$value";
}

4. 调试与环境适配

  • 若修复后仍有异常,可打开curl错误日志,定位具体问题:
if ( !($res = curl_exec($ch)) ) {
    error_log("IPN CURL错误: " . curl_error($ch));
    curl_close($ch);
    exit;
}
error_log("PayPal返回内容: " . $res);
  • 本地测试环境(如WAMP、XAMPP)可取消代码中CURLOPT_CAINFO配置项的注释,将根证书文件放到脚本同级目录,避免SSL校验失败。

完成以上修改后重新测试,即可正常得到VERIFIED的校验结果。

内容的提问来源于stack exchange,提问作者Eric212

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:57:01