我试图用Stripe发送一个API请求,但得到错误消息:
cURL错误60:SSL证书问题:无法获得本地颁发者证书
这是我正在运行的代码:
public function chargeStripe()
{
$stripe = new Stripe;
$stripe = Stripe::make(env('STRIPE_PUBLIC_KEY'));
$charge = $stripe->charges()->create([
'amount' => 2900,
'customer' => Input::get('stripeEmail'),
'currency' => 'EUR',
]);
return Redirect::route('step1');
}
我在谷歌上搜索了很多,很多人建议我下载这个文件:cacert。Pem,把它放在某处,并在我的php.ini中引用它。这是我的php.ini中的部分:
curl.cainfo = "C:\Windows\cacert.pem"
然而,即使在重新启动服务器几次并更改路径之后,我仍然得到相同的错误消息。
我在Apache中启用了ssl_module,在我的php.ini中启用了php_curl。
我还尝试了这个修复:如何修复PHP CURL错误60 SSL
这表明我将这些行添加到我的cURL选项:
curl_setopt($process, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, true);
我在哪里添加选项到我的cURL?显然不是通过命令行,因为我的CLI没有找到命令“curl_setopt”
如果你在Guzzle中使用PHP 5.6, Guzzle已经切换到使用PHP库自动检测证书,而不是它的进程(参考)。PHP在这里概述了这些变化。
找出PHP/Guzzle在哪里寻找证书
你可以使用下面的PHP命令转储PHP正在寻找的地方:
var_dump(openssl_get_cert_locations());
获取证书包
对于OS X测试,可以先使用homebrew安装openssl,再使用openssl.cafile=/usr/local/etc/openssl/cert。在您的php.ini或Zend服务器设置(在OpenSSL下)中的pem。
证书包也可以从curl/Mozilla的curl网站上获得:https://curl.haxx.se/docs/caextract.html
告诉PHP证书在哪里
一旦你有了一个bundle,要么把它放在PHP已经在寻找的地方(上面你已经发现了),要么更新openssl。php.ini中的Cafile。(一般在Unix上是/etc/php.ini或/etc/php/7.0/cli/php.ini或/etc/php/php.ini)
如果你在Guzzle中使用PHP 5.6, Guzzle已经切换到使用PHP库自动检测证书,而不是它的进程(参考)。PHP在这里概述了这些变化。
找出PHP/Guzzle在哪里寻找证书
你可以使用下面的PHP命令转储PHP正在寻找的地方:
var_dump(openssl_get_cert_locations());
获取证书包
对于OS X测试,可以先使用homebrew安装openssl,再使用openssl.cafile=/usr/local/etc/openssl/cert。在您的php.ini或Zend服务器设置(在OpenSSL下)中的pem。
证书包也可以从curl/Mozilla的curl网站上获得:https://curl.haxx.se/docs/caextract.html
告诉PHP证书在哪里
一旦你有了一个bundle,要么把它放在PHP已经在寻找的地方(上面你已经发现了),要么更新openssl。php.ini中的Cafile。(一般在Unix上是/etc/php.ini或/etc/php/7.0/cli/php.ini或/etc/php/php.ini)