• 微信公众号通过用户授权获取用户基本信息java版


      公司需要开发一个微信公众号,要求用户通过公众号登录公司网站时候自动获取用户的基本信息,在网上查资料发现大部分都是直接copy微信公众平台的开发文档,感觉还是介绍的不是太小白,所以为了方便大家也为了自己备用,这里就把如何通过用户授权获取用户基本信息的步骤记录下来。

      第一步:进入网站直接跳转到获取用户授权界面

      

    /**
         * 用户同意授权,获取code
         * 这是弹出授权页面,
         * 可通过openid拿到昵称、性别、所在地,
         * 即使在未关注的情况下,只要用户授权,也能获取其信息
         * @return 链接地址
         */
        public static String getUserInfoCodeUrl(){
            return  GET_CODE_URL.replace("APPID", APPID)
              .replace("REDIRECT_URI",url1+"/weixin/getUserInfo") .replace("SCOPE", SNSAPI_USERINFO) .replace("STATE", "wfcm"); }

      APPID是你自己公众号的APPID,REDIRECT_URI是用户授权后你要跳转的网址(可以是网页也可以是接口),SCOPE有两种一种是普通授权一种是用户授权,这里选择用户授权即SNSAPI_USERINFO,STATE是用户自定义这里可以随便填写。

      第二步:用户授权同意后跳转到你自己定义的网页或者接口中(这里我跳转的是接口),这一步已经由第一步获得了用户授权后返回的code,再通过用户返回的code获取用户的openid与网页授权的Access_token

      

    /**
         * 获取openID与网页版的access_token得到用户信息
         * @param req
         * @param resp
         * @return
         * @throws IOException
         */
        @RequestMapping(value="getUserInfo" ,method=RequestMethod.GET)
        public String getUserInfoCodeUrl(
                HttpServletRequest req,
                HttpServletResponse resp) throws IOException{
                        //1、用户授权得到code
                        String code =  req.getParameter("code");
                        String state = req.getParameter("state");
                        System.out.println("code:"+code);
                        log.info("获得到code值------得到用户openId与access_token"+code);
                        //2、通过code得到用户openId与access_token
                        JSONObject jsonObject1 = WeixinUtil.doGetStr(WeixinUtil.getOpenIdAndAccessTokenUrl(code));
                        String openId = jsonObject1.getString("openid");
                        String accessToken = jsonObject1.getString("access_token");
                        //3、通过用户openId与access_token得到用户信息
                        System.out.println("accessToken:"+accessToken);
                        System.out.println("openId:"+openId);//测试access_token是否过期
                        JSONObject jsonObject3 = WeixinUtil.doGetStr(WeixinUtil.checkAccessTokenUrl(accessToken, openId));
                        while(jsonObject3.getString("errcode").equals("40003")||Integer.valueOf(jsonObject3.getString("errcode"))==40003){
                                //再次通过code得到用户openId与access_token
                                JSONObject jsonObject4 = WeixinUtil.doGetStr(WeixinUtil.getOpenIdAndAccessTokenUrl(code));
                                openId = jsonObject4.getString("openid");
                                accessToken = jsonObject4.getString("access_token");
                                jsonObject3 = WeixinUtil.doGetStr(WeixinUtil.checkAccessTokenUrl(accessToken, openId));
                                if(!jsonObject3.getString("errcode").equals("40003")||Integer.valueOf(jsonObject3.getString("errcode"))!=40003){
                                    break;
                                }
                         }
                         //获得用户信息
                         JSONObject jsonObject2 = WeixinUtil.doGetStr(WeixinUtil.getUserInformationUrl(accessToken, openId));
                         System.out.println("JSON2-----"+jsonObject2.toString());
                         //至此就获得了用户的基本信息了,下面就是执行获得用户信息后做的操作

    }
  • 相关阅读:
    javascript命名空间的简单实现
    javascript变量的作用域
    Python单元测试框架
    opencv中遍历图片数据的两种方法
    hsv 与 hsi 颜色空间
    OpenCV资料
    Linux下查看文件和文件夹大小
    The run destination iPhone 5.0 Simulator is not valid for running the scheme 'MyApp'
    OpenCV函数学习之cvLUT
    Linux中find常见用法示例
  • 原文地址:https://www.cnblogs.com/zhangdiIT/p/6413224.html
Copyright © 2020-2023  润新知