Codeigniter CI 商家 SSL 证书验证失败
Posted
技术标签:
【中文标题】Codeigniter CI 商家 SSL 证书验证失败【英文标题】:Codeigniter CI Merchant SSL certificate verify failed 【发布时间】:2013-10-15 07:52:32 【问题描述】:我在 Codeigniter 中使用 CI Merchant 库,下面是我在 $response 上的 var_dump 之后得到的错误消息
protected '_status' => string 'failed' (length=6)
protected '_message' => string 'SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed' (length=146)
下面是我的代码
$this->merchant->load('paypal_express');
$settings = array(
'username' => 'testaccount',
'password' => 'accountpassword',
'signature' => 'storename',
'test_mode' => true
);
$this->merchant->initialize($settings);
//redirect to success/failure of transaction
$params = array(
'amount' => $amount,
'currency' => $currency,
'return_url' => site_url('membership/complete/'.$memberid),
'cancel_url' => site_url('membership/fail')
); /**/
$response = $this->merchant->purchase_return($params);
可能出了什么问题? 提前谢谢你
【问题讨论】:
【参考方案1】:我不推荐@stormdrain 的解决方案,因为它会降低服务器的安全性。真正的问题是 php 在您的 Web 服务器上找不到正确的根 CA 证书。通常,这是与您的网络托管服务商交谈并让他们解决问题的情况。
或者,您可以升级到 Omnipay,它是 CI-Merchant 的替代品,并且在内部它使用与根 CA 证书捆绑在一起的 Guzzle。因此这个问题就会消失。
【讨论】:
Bbb但是我们不知道他们是否正在尝试连接到他们自己没有证书的服务器。虽然最好的办法是得到一个并按照建议使用omnipay(我不知道ci商人被弃用),但关闭那些curl opts是一种解决方法:) 我确实禁用了 curl 选项并收到另一个错误“安全标头无效”。 @Adrian 你能在codeigniter中发布一个简单的paypal_express实现omnipay吗:-| @smalliestonefifty ***.com/q/1712685/183254 ***.com/a/3051629/183254 “安全标头无效”表示您的 paypal 凭据错误,或者您尝试使用测试凭据而不设置测试模式,反之亦然。【参考方案2】:可能出了什么问题?证书已过期。证书是自签名的。证书被吊销。只能猜测,不知道您要连接的 URL 是什么。
一种可能的解决方法是修改您正在使用的库以忽略错误:
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
【讨论】:
或者一个好的解决方法是使用 Ominipay,因为不再支持 ci-merchant。【参考方案3】:我猜你已经解决了你的问题,但其他人可能遇到了同样的问题。
确保您已将 ci-mercant 库附带的 cacert.pem 签名放入您的 config/
目录中。目前在github上here
有相同的响应和完全相同的代码 sn-p。这解决了我的问题。
【讨论】:
以上是关于Codeigniter CI 商家 SSL 证书验证失败的主要内容,如果未能解决你的问题,请参考以下文章
如何为 HTTPS (SSL) 配置 Codeigniter?