微信获取用户信息接入例子 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;
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值