我正在进行api调用,这似乎在抛出一些错误。所以basicall我的脚本正在使用cURL进行SOAP API post调用,它会抛出(60): SSL certificate problem: unable to get local issuer certificate
我试过了
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
但它不起作用。
我也尝试了以下内容:
$ch = curl_init(); // initialize curl handle
//curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, "GeoTrustGlobalCA.crt");
curl_setopt($ch, CURLOPT_URL, $ENDPOINT);
curl_setopt($ch, CURLOPT_FAILONERROR, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);
curl_setopt($ch, CURLOPT_TIMEOUT, 50);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
//curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
//curl_setopt($ch, CURLOPT_PORT, 80);
$data = curl_exec($ch);
$curl_errno = curl_errno($ch);
$curl_error = curl_error($ch);
if ($curl_errno > 0) {
echo "cURL Error ($curl_errno): $curl_error\n";
} else {
echo "Data received. To complete this transaction, enter your Bonga PIN on your handset. if you don't have one dial *126*5# for instructions\n";
echo $data;
}
curl_close($ch);
似乎没有任何效果。任何解决方法?顺便说一下$ENDPOINT
是https://safaricom.co.ke
答案 0 :(得分:2)
该网站有几个错误,例如名称不匹配(应该是www.safaricom.co.ke 不是safaricom.co.ke)还有一个不完整的证书链,另外还有一个非常不安全的设置。难怪验证失败了。有些浏览器在使用正确的名称时起作用,因为它们可以解决丢失的链证书。其他客户端(如curl)和大多数移动浏览器都无法正常工作,因为他们希望网站能够正确设置。
有关详细信息,请参阅SSLabs report。