解决SSL证书内容存入数据库,无法发送 CURL 请求的问题。

 

背景:

微信支付的时候,需要使用证书。但是如果做 saas 平台,要存很多的证书,会很麻烦,就想把证书内容存入数据库。

 

问题:

curl 发送请求的时候,需要设置:curl_setopt($ch, CURLOPT_SSLCERT,'证书路径'),该参数只支持路径,不支持字符串。所以数据库取出来的证书内容不能直接用。

 

解决方法:

通过建立临时文件,将证书内容写入。再将该文件路径设置在 curl 的参数里即可。

请求完之后,就可以进行删除文件了。

 

 

注意点:

1、创建永久临时文件,完成后删除即可。不要创建自己会消失的,不然执行完就消失,curl读不到。

2、存在数据库的 pem 证书文件内容正常拷贝即可,不需要去掉换行、空格啥的。

 

代码:创建临时文件并返回路径

// 获取临时文件的路径
    public function getTmpPathByContent($content)
    {
        $myfileUri = tempnam('','cert_');  // 临时文件路径

        $needle = fopen($myfileUri,'r+');  // 打开文件
        fwrite($needle,$content);  // 写入内容

        return $myfileUri;  // 返回路径
    }

 

代码 - 部分:将内容写入并将路径设置给 curl

// 定义pem 证书的路径
$sslCertUri = $this->getTmpPathByContent($merchant['pay_ssl_cert']);
$sslKeyUri = $this->getTmpPathByContent($merchant['pay_ssl_key']);

// 请求
$res = curl_post_ssl($refundUri, $refundDataXml, $sslCertUri, $sslKeyUri, '',[]);
//halt($res);
unlink($sslCertUri);    // 删除文件
unlink($sslKeyUri);    // 删除文件

 

 

 

 

 

 

 

——占位符

 

posted @ 2020-03-05 12:27  小寒1206  阅读(694)  评论(0)    收藏  举报