微信登录获取 openid 失败原因

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/iteye_380/article/details/82651088



 

 

今天再开发网站微信登录的时候,用 curl_init 无法获取 openid,代码如下

 

 $code = isset($_GET['code']) ? trim($_GET['code']) : '';
    $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.WX_APPID.'&secret='.WX_SECRET.'&code='.$code.'&grant_type=authorization_code';
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_HEADER, 0);// 显示返回的Header区域内容   
    curl_setopt ($ch, CURLOPT_TIMEOUT, 30);// 设置超时限制
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10);// 链接超时限制
    curl_setopt ($ch, CURLOPT_HTTPHEADER,array('Accept-Encoding: gzip, deflate'));//设置 http 头信息
    curl_setopt ($ch, CURLOPT_ENCODING, 'gzip,deflate');//添加 gzip 解码的选项,即使网页没启用 gzip 也没关系 
    $content = curl_exec($ch);

 

 

 

后来发现跟 https 有关,加上下面这两个选项就可以了

 

curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST,0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER,0); 

 

 

 

由于 CURLOPT_SSL_VERIFYPEER 的预设值为 TRUE 是要验证伺服器凭证的,所以当拜访 https 网站时,若未做任何 SSL 相关设定,会出现以下错误。

Error Number: 60

Error Message: SSL certificate problem, verify that the CA cert is OK. Details:

error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

如果只是要拜访 https 网站,但不会来回传递敏感信息,可以把 CURLOPT_SSL_VERIFYPEER 设定为 FALSE,代表可以盲目接受任何伺服器凭证。

 

而当 CURLOPT_SSL_VERIFYPEER 为 FALSE 时,其他诸如 CURLOPT_SSL_VERIFYHOST, CURLOPT_CAINFO, CURLOPT_CAPATH 等设定,都不具任何意义。

 

 

原文链接:http://woqilin.blogspot.com/2016/04/openid.html

展开阅读全文

没有更多推荐了,返回首页