微信网页授权获取用户信息

微信网页授权获取用户信息一共四个步骤在微信里面写得很详细:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
首先配置我们的授权回调页面在微信接口权限表里:
找到网页授权获取用户基本信息 点击修改
微信网页授权获取用户信息_第1张图片
记下这两个信息 appID和appsecret

接下来上代码第一步写一个WX工具类(此代码可以直接用)
微信网页授权获取用户信息_第2张图片
接着在controller写一个获取用户code的代码
微信网页授权获取用户信息_第3张图片
以下方法是用户同意后拉取用户信息


```java
 @GetMapping("/getWxUserInfo")
    public R getWxUserInfo(HttpServletRequest request,HttpServletResponse response,String code) throws Exception {
        //2用户同意后获取code
        //String code = request.getParameter("code");
        //String state = request.getParameter("state");
        //System.out.println(code);
        //System.out.println(state);
        //3用户同意获取网页授权access_token
        String url ="https://api.weixin.qq.com/sns/oauth2/access_token?"
                + "appid="+WxOauth.APPID
                + "&secret="+WxOauth.APPSECRET
                + "&code="+code
                + "&grant_type=authorization_code";
        //认证服务器带着code发送请求,得到access_token
       System.out.println(url);
       JSONObject jsonObject = WxOauth.doGetJson(url);
        /**
         * 数据正确返回格式
         * {
         "access_token":"ACCESS_TOKEN",
         "expires_in":7200,
         "refresh_token":"REFRESH_TOKEN",
         "openid":"OPENID",
         "scope":"SCOPE"
         }
         */
        String openid = jsonObject.getString("openid");
       String access_token = jsonObject.getString("access_token");
        String refresh_token = jsonObject.getString("refresh_token");
        //第四步根据access_token openid 获取用户信息
       String urlUserInfo="https://api.weixin.qq.com/sns/userinfo?" +
               "access_token="+access_token
                + "&openid="+openid
                + "&lang=zh_CN";
        System.out.println("infoUrl:" + urlUserInfo);
        JSONObject userInfo = WxOauth.doGetJson(urlUserInfo);
        
        if (userInfo!=null){
        	String nikeName = userInfo.getString("nickname");
        	String sex = userInfo.getString("sex");
        	String openId = userInfo.getString("openid");
        	String headImages = userInfo.getString("headimgurl");
            System.out.println("json=======:"+userInfo.toString());
            System.out.println("昵称========:"+nikeName);
            System.out.println("性别========:"+sex);
            System.out.println("openId=======:"+openId);
            System.out.println("头像===========:"+headImages);
            //将保存用户数据进我们自己的数据库进行其它任务上的操做
            //获取openId判断此微信用户是否已经存入我们数据库
            WechatUserInfoVo exit = WechatUserInfoService.isExit(openid);
            if (exit==null) {
        		//将此微信用户添加进我自己的数据库
    			WechatUserInfoVo vo = new WechatUserInfoVo();
    			vo.setHeadImgUrl(headImages);
    			vo.setOpenId(openId);
    			vo.setSex(Integer.parseInt(sex));
    			vo.setNickName(nikeName);
    			WechatUserInfoService.addWechatUserInfo(vo);
    		}else {
    		 	//更新数据
    			exit.setHeadImgUrl(headImages);
    			exit.setOpenId(openId);
    			exit.setSex(Integer.parseInt(sex));
    			exit.setNickName(nikeName);
    			WechatUserInfoService.updateWechatUserInfo(exit);
    		}
        }	
        		//response.sendRedirect("http://t299o07770.zicp.vip/#/userManager/userInfo");
        		//response.setHeader("headImages", userInfo.getString("headimgurl"));
        		return R.ok(userInfo);
    }
切记我们在获取用户信息授权的时候,分两步完成第一步获取code,第二步再根据code让前端传code跟你去拉取用户信息
如果我们后端一步完成所有授权信息,前端在调我们接口的时候会出现跨域,所以分两步完成,
以上代码都可以直接放在项目中使用,只需要根据改一下appid和appsecret就行了,其它都不用改!
第一次开发这个功能,如有不足请大家指点!







你可能感兴趣的:(笔记)