php提交post链接json串返回false并报错CURL:SSL certificate problem: unable to get local issuer certificate

现象:
微信公众号开发或者其他项目当中,要求提交post连接,网上有很标准的post提交方法,但是使用过后总是报错。
后来调试一下才发现是post默认使用ssl连接问题。

方法1 在函数中加入如下代码关闭ssl即可。

// 关闭SSL验证
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

综合tp6中调用函数:

    /**
     * PHP发送Json对象数据
     *
     * @param $url 请求url
     * @param $jsonStr 发送的json字符串
     * @return array
     */
    public static function send_post_json($url, $jsonStr)
    {
    
    
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        // 关闭SSL验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                'Content-Type: application/json; charset=utf-8',
                'Content-Length: ' . strlen($jsonStr)
            )
        );
        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        return array($httpCode, $response);
    }

复制后直接使用即可,无脑解决问题。


方法2 配置HTTPS

另外的一种解决办法,就是配置上HTTPS,找到证书:

http://curl.haxx.se/ca/cacert.pem
下载pem文件。

移动pem文件到一个目录(如d:\phpstudy)

在PHP配置文件(php.ini)里配置PEM文件目录位置。

curl.cainfo = "d:\phpstudy\cacert.pem"

基础参考资料:
基本语法:
https://blog.csdn.net/lengyuezuixue/article/details/86696111
解决方案描述:
https://blog.csdn.net/lilongsy/article/details/85012503

猜你喜欢

转载自blog.csdn.net/wwppp987/article/details/108206395