PayPal IPN:无法获取本地颁发者证书。

7
我正在使用curl验证PayPal IPN,但它抛出错误:SSL证书问题:无法获取本地颁发者证书。相同的代码在开发服务器上运行良好,但当我将其移动到客户端服务器时,则无法正常工作。
我是否需要购买SSL证书以通过PayPal快速结账进行付款?还是我的编码部分需要进行任何更改?或者需要在服务器上进行任何设置?Curl已在服务器上启用。任何帮助将不胜感激。
下面是我的代码,这是一个简化的测试页面:
$req = HAVING PARAMETERS FROM PAYPAL;

$ch = curl_init("https://www.sandbox.paypal.com/cgi-bin/webscr");
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));

curl_exec($ch);
if(curl_errno($ch))
{
    echo 'Curl error: ' . curl_error($ch);
}

2个回答

11
您正在告诉cURL验证SSL连接,但您没有告诉它要验证什么;
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);

请确保添加指向最新的CA信任列表:

curl_setopt($ch, CURLOPT_CAPATH, "./cacert.pem");

如果您没有最新的cacert列表,我建议下载由cURL维护者提供的列表:cacert.pem

5
您需要使用CURLOPT_CAINFO(指向PEM文件)而不是CURLOPT_CAPATH(它指向包含PEM文件的目录)。
curl_setopt($ch, CURLOPT_CAINFO, "./cacert.pem");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接