微信获取用户信息接入例子 java实现

微信公众平台开发文档

  1. 主要用到"微信网页授权"方面的api。
  2. 如果要使用静默方式获取微信用户信息可以在"微信网页授权"获取到用户openid后再使用"获取用户基本信息"api获取用户信息。

在这里插入图片描述
在这里插入图片描述

以下例子主要用到静默方式获取用户信息,即无需用户授权直接获取用户信息的方式

前台代码

  1. 引导用户打开微信端链接
  2. 由于这个项目是公众号开发,所以直接菜单引导用户打开微信端链接
  3. 下图"首页"菜单对应的链接:https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx87f4d5d049fbbcd6&redirect_uri=http%3A%2F%2Fy2182763o7.iok.la%2Fwx%2FcallBack&response_type=code&scope=snsapi_base&connect_redirect=1#wechat_redirect
  4. 链接所带参数根据个人项目而言

在这里插入图片描述

后台代码

  1. 以下controller里面的方法对应微信回调地址
  2. return “redirect:/index.html?userid=”+userid; 重定向到你项目里面要打开的页面
 @RequestMapping("/callBack")
    public String callBack(String code){
        System.out.println("code:"+code);
        String userid = "";
        CloseableHttpClient httpClient = HttpClients.createDefault();
        try {
            URIBuilder uriBuilder = new URIBuilder("https://api.weixin.qq.com/sns/oauth2/access_token");
            uriBuilder.addParameter("appid",APPID);
            uriBuilder.addParameter("secret",APPSECRET);
            uriBuilder.addParameter("code",code);
            uriBuilder.addParameter("grant_type","authorization_code");
            HttpGet get = new HttpGet(uriBuilder.build());
            //执行请求
            CloseableHttpResponse closeableHttpResponse = httpClient.execute(get);
            //取响应结果
            int statusCode = closeableHttpResponse.getStatusLine().getStatusCode();
            if (statusCode==200){
                HttpEntity entity = closeableHttpResponse.getEntity();
                try {
                    String jsonStr = EntityUtils.toString(entity,"utf-8");
                    ObjectMapper objectMapper = new ObjectMapper();
                    HashMap<String,Object> map = objectMapper.readValue(jsonStr,HashMap.class);
                    System.out.println("jsonStr:"+jsonStr);
                    if (null==map.get("errcode")){
                        String access_token = getAccessToken();
                        String openid = (String) map.get("openid");
                        JieqiUser userInfo = login(access_token,openid); //用户信息
                        userid = userInfo.getUserid();
                        closeableHttpResponse.close(); //关闭资源
                        httpClient.close(); //关闭资源
                    }
                } catch (Exception e) {
                    closeableHttpResponse.close();
                    httpClient.close();
                    return "redirect:/index.html?userid="+userid;
                }
            }
        } catch (Exception e) {
            return "redirect:/index.html?userid="+userid;
        }
        return "redirect:/index.html?userid="+userid;
    }

private JieqiUser login(String access_token,String openid){
        CloseableHttpClient httpClient = HttpClients.createDefault();
        try {
            URIBuilder uriBuilder = new URIBuilder("https://api.weixin.qq.com/cgi-bin/user/info");
            uriBuilder.addParameter("access_token",access_token);
            uriBuilder.addParameter("openid",openid);
            uriBuilder.addParameter("lang","zh_CN");
            HttpGet httpGet = new HttpGet(uriBuilder.build());
            CloseableHttpResponse response = httpClient.execute(httpGet);
            //获取响应码
            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode==200) {
                String jsonStr = EntityUtils.toString(response.getEntity(), "utf-8");
                System.out.println("微信用户信息:" + jsonStr);
                ObjectMapper objectMapper = new ObjectMapper();
                HashMap<String, Object> map = objectMapper.readValue(jsonStr, HashMap.class);
                if (null == map.get("errcode")) {
                    JieqiUser jieqiUser = new JieqiUser();
                    jieqiUser.setOpenid(openid);
                    if (0 == (int) map.get("subscribe")) { //用户没有关注该公众号
                        jieqiUser.setSubscribe(0);
                    } else if (1 == (int) map.get("subscribe")) { //用户关注了该公众号
                        jieqiUser.setSubscribe(1);
                        jieqiUser.setSex((Integer) map.get("sex"));
                        jieqiUser.setNickname((String) map.get("nickname"));
                        jieqiUser.setAvatar((String) map.get("headimgurl"));
                        jieqiUser.setUnionid((String) map.get("unionid"));
                        jieqiUser.setSubscribeTime(DateTimeUtil.stampToDate(String.valueOf((int) map.get("subscribe_time"))));
                        jieqiUser.setSubscribeScene((String) map.get("subscribe_scene"));
                    }
                    response.close();
                    httpClient.close();
                    return userService.createUser(jieqiUser);
                }
            }
        } catch (Exception e) {
//            e.printStackTrace();
            return null;
        }
        return null;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值