微信网页获取用户信息

微信网页授权获取用户信息,只需要在微信端配置一下授权域名,之后的操作都是在服务器端实现。

1. 微信后台配置授权域名

填写网页授权域名

2.服务器端实现获取用户信息

写一个测试页面,页面中有一个连接,

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx5dcb95b593046871&redirect_uri=https%3A%2F%2F你在微信端填写的域名%2F目录1%2F目录2&response_type=code&scope=snsapi_base&state=回调传回参数#wechat_redirect

注意几个点:

1.微信端的域名:第一步中填写的域名地址
2.目录1,2地址:可以是一级目录,也可以是多级的,这个没有影响,我这里是2级。【和支付是有区别的,支付的时候,需要配置支付的信任目录,所以固定死了级别。】
3. 回调传回参数:当用户点击这个链接时,会调起微信的授权页面,用户操作之后,微信会回调你填写的redirect_uri地址,并且传回参数state,所以可以让state传递一些特殊的参数。但是长度有限制,需要注意。

后端的代码:

    /**
     * 获取用户信息
     * @param request
     * @param model
     * @return
     */
    @RequestMapping("/getUserInfo")
    public String getUserInfo(HttpServletRequest request,Model model){
        //微信在回调时,会传回一个code参数,获取这个code,如果没有code,那么说明失败,注意返回错误页面。
        String code = request.getParameter("code");
        log.info("code:" + code);
        if (StringUtils.isBlank(code)) {
            return "/pages/notice";
        }
        // 如果在上方的连接地址中有填写state的值,那么微信会将state原样返回,这里获取一下。
        String state = request.getParameter("state");
        log.info("state:" + state);
        if (StringUtils.isBlank(state)) {
            log.info("没有返回state参数");
        }
        // 获取到了code之后,使用code,作为参数,调用微信的接口,换取access_token。
        //oauth2_url=https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
        String oauth2_url = WeChatConfig.oauth2_url.replace("APPID", BaseController.appid).replace("SECRET", BaseController.appsecret).replace("CODE", code);
        // 自己写一个工具类,调用接口,推荐使用okhttp。
        String auth_return = WeixinHttpUtils.post(oauth2_url, null);
        log.info("auth_return:" + auth_return);
        // 得到返回的json结构。
        JSONObject json = JSON.parseObject(auth_return);
        /**
         * 需要用到的access_token
         * {"access_token":"12_0g6UMlYeFtgCLT4TaGW5jS6bAt8MwxAoKYeyUmnHlqXMfICauOHMKs7k6HySOWTOhskV1BpLJ-syx3ZJbs922MWkVpuZqA_VpvL9CW7qLvs",
         * 有效时间
         * "expires_in":7200,
         * "refresh_token":"12_JRqTvJnPVX_7ePOIK15qEJg_1oYvSdi4sqLzWWHyeK77LitTz-6XX1OYQjNH0rO54u-tDA_TKZTUaJKVFNXxsI5MtKE9P7_c2P6DeLF0pPU",
         * 当前用户的openid
         * "openid":"odXbo1Oub7qVBeptNt_kdtInQfLI",
         * "scope":"snsapi_base"
         * }
         */
        Object errorCode = json.get("errcode");
        if (errorCode != null) {
            return "400";
        } else {
            String openId = json.getString("openid");
            String access_token = json.getString("access_token");
            // 使用access_token去交换用户的详细资料,头像,名称等信息。
            //userInfo_url=https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
            String userinfo_url = WeChatConfig.userInfo_url.replace("ACCESS_TOKEN", access_token).replace("OPENID", openId);
            String userinfoUrlReturn = WeixinHttpUtils.post(userinfo_url, null);
            /**
             * 最后返回的详细信息
             * 其中如果此公众号有绑定开放平台,就会返回unionid,如果没有绑定,此参数是么有的。
             * {
             * "sex":1,"nickname":"小饼干",
             * "unionid":"oTn_Ewte8QsnEIg9yWBSBzfCbBFE",
             * "privilege":[],"province":"广东",
             * "openid":"odXbo1Oub7qVBeptNt_kdtInQfLI",
             * "language":"zh_CN",
             * "headimgurl":"http://thirdwx.qlogo.cn/mmopen/vi_32/WtxCbgVS8HKibRlpByx3FKdB9aibIyiboric9icqzOzH3aW5Ys7kJcDiaKkVllYybM5kiaIskC8GqEL3dib4VRsL3mn5RQ/132",
             * "country":"中国","city":"广州"
             * }
             */
            JSONObject userObj = JSON.parseObject(userinfoUrlReturn);
            log.info(userObj.toJSONString());
            request.getSession().setAttribute("checkTicketMyselfUser", userObj);
            request.getSession().setMaxInactiveInterval(0);
        }
        return "userinfo";
    }

以上。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_21019419/article/details/82837208