解决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); // 删除文件
——占位符
——————————————————————//////——欢迎光临,请多指教!可加QQ:349017128进行交流——//////——————————————————————
浙公网安备 33010602011771号