微信获取code,获取openid,获取用户昵称头像等信息

在公众号开发中避免不了获取微信用户头像,昵称等登录信息。这里我总结了一下微信开发中从网页授权到获取到用户openid,nickname,headimgurl等信息。

微信开发手册

首先要在微信公众平台中配置好网页授权域名,建议设置为项目域名即可。

这里写图片描述

thinkPHP5的话建议在入口文档定义AppID和APPSecret,因为这两个参数会多次用到,如果以后有变更方便修改,也可在配置文件中定义。

define('APPID', 'wx8fc535aaa112dfb3');
define('SECRET', '97f96488de4911994dfc86f0e287a969');

接下来获取code

public function index()
    {
        //获取code
        $redirect_uri = urlencode('http://www.XXX.com/index/index/getAccesstoken');
        header('Location:https://open.weixin.qq.com/connect/oauth2/authorize?appid='.APPID.'&redirect_uri='.$redirect_uri.'&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect');
        exit;

    }

使用**urlencode()**函数来对回调地址进行加密,回调地址的域名和网页授权域名一致就好,回调地址控制器方法应为接下来获取access_token和openID的控制器和方法。

public function getAccesstoken(){
        //得到openID
        $code = $_GET['code'];
        //获取access_token值
        $get_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.APPID.'&secret='.SECRET.'&code='.$code.'&grant_type=authorization_code'; 
        $data = json_decode(httpRequest($get_token_url),true); 
        // 得到用户信息
        $get_user_info = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$data["access_token"].'&openid='.$data["openid"].'&lang=zh_CN';
        $userinfo = json_decode(httpRequest($get_user_info),true); 
        var_dump($userinfo);
        // var_dump($data);
    }

通过回调链接,会将携带code的返回值返回到该方法中,发送获取access_token的请求,得到access_token,这里的access_token仅限于获取用户信息,具体建议查看手册。

拿到access_token和openID后发送获取用户信息的请求,得到的$userinfo就是包含用户昵称,性别,头像等信息的数组(通过json_decode将json格式转为数组,微信返回为json格式)。

这里的httpRequest()方法为发送curl请求的一个方法,如下:

function httpRequest($url, $postData=array()){
        // (1)初始化
        $ch = curl_init();
        // (2)设置选项
        // 设置请求的url
        curl_setopt($ch, CURLOPT_URL, $url);
        // 将curl_exec()获取的数据以字符串返回,而不是直接输出。
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        if(!empty($postData)){
            // 设置请求方式为post
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
        }
        //curl注意事项,如果发送的请求是https,必须要禁止服务器端校检SSL证书
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        // (3)执行
        $result = curl_exec($ch); 
        // (4)关闭
        curl_close($ch);
        return $result;
}
相关推荐
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页