Java实现的微信公众号获取微信用户信息示例

 更新时间:2019年10月25日 10:18:58   作者:游语  
这篇文章主要介绍了Java实现的微信公众号获取微信用户信息,结合实例形式分析了Java微信公众号获取微信用户信息相关原理、步骤与操作注意事项,需要的朋友可以参考下

本文实例讲述了Java实现的微信公众号获取微信用户信息。分享给大家供大家参考,具体如下:

注:  这里获取用户信息方式和网页授权获取用户信息方式不同。两个access_token不同,返回的结果也不同。

我们很多场景可能需要用户信息

微信公众号获取微信用户信息需要的条件:

1.获取用户openId。可以在用户绑定APP的时候用code换取,也可以在用户关注公众号的时候获取,或者小程序授权时获取。微信公众号code换取openId(详见附录)

2.获取该微信公众号 access_token。方法可见微信公众号获取access_token

3.通过openId和access_token请求微信服务器获取用户信息。

代码如下:(略去httpclientutil类,详见微信公众号获取access_token

public class WeChatUserInfoTest {
  public static void main(String[] args) {
    String accessToken = "";//测试accessToken写死 真实环境不应该写死
    String openId = "";//测试openId写死 真实环境不应该写死
    Map<String, String> params = new HashMap<>();
    params.put("access_token", accessToken);
    params.put("openid", openId);
    params.put("lang", "zh_CN");
    String url = "https://api.weixin.qq.com/cgi-bin/user/info";
    String response = HttpClientUtil.doGet(url, params);
    JSONObject object = JSONObject.parseObject(response);
    /**
     * 移动应用、网站应用和公众帐号关联到同一个微信开放平台帐号时,unionid是唯一的,
     * 如果需要打通移动应用、网站应用和公众帐号或者以后要打通,很有必要存储unionId
     */
    String unionId = object.getString("unionid");
    /**
     * nickName很可能是一些古怪的符号,因此实际场景需要对nickName做处理,可以使用emoji-java的工具类去处理
     */
    String nickName = object.getString("nickname");
    String avatarUrl = object.getString("headimgurl");
  }
}

附:微信公众号code换取openId

微信网页授权的时候,不管是静默授权还是显示的用户点击授权,我们都能够拿到用户的code,详见官方文档

拿到用户的code之后我们就可以根据我们的已有的appid和sercet拿到openId。

public class WeChatUserInfoTest {
  public static String getOpenId(String code, String appId, String appSecret) {
    Map<String, String> params = new HashMap<>();
    params.put("appid", appId);
    params.put("secret", appSecret);
    params.put("code", code);
    params.put("grant_type", "authorization_code");
    String url = "https://api.weixin.qq.com/sns/oauth2/access_token";
    String response = HttpClientUtil.doGet(url, params);
    JSONObject object = JSONObject.parseObject(response);
    String openId = object.getString("openid");
    return openId;
  }
  public static void main(String[] args) {
    String appId = "";//对应的appId
    String appSecret = "";//对应的appSecret
    String code = "";//前端获取到的用户code
    String openId = getOpenId(appId, appSecret, code);
    System.out.println(openId);
  }
}

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java字符与字符串操作技巧总结》、《Java数组操作技巧总结》、《Java数学运算技巧总结》、《Java编码操作技巧总结》和《Java数据结构与算法教程

希望本文所述对大家java程序设计有所帮助。

相关文章

  • Idea和Docker如何集成

    Idea和Docker如何集成

    今天就介绍下idea和Docker如何集成,要集成之前,需要我们本机能够访问docker服务,也就是我们的docker服务需要开启远程模式,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • springboot使用Validator校验方式

    springboot使用Validator校验方式

    这篇文章主要介绍了springboot使用Validator校验方式,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Retrofit+RxJava实现带进度下载文件

    Retrofit+RxJava实现带进度下载文件

    这篇文章主要为大家详细介绍了Retrofit+RxJava实现带进度下载文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Springboot详解线程池与多线程及阻塞队列的应用详解

    Springboot详解线程池与多线程及阻塞队列的应用详解

    本例应用线程池、多线程、阻塞队列处理一个流程任务。本例处理一个订单流程,主要包括生成订单、订单处理、订单入库,下面我们一起看看
    2022-06-06
  • java中random的用法小结

    java中random的用法小结

    这篇文章主要介绍了java中random的用法详解,主要包括java.lang.Math.random()方法的用法及java.util.Random类用法,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Java Agent (代理)探针技术详情

    Java Agent (代理)探针技术详情

    这篇文章主要介绍了Java Agent 探针技术详情,Java 中的 Agent 技术可以让我们无侵入性的去进行代理,最常用于程序调试、热部署、性能诊断分析等场景,下文更多相关资料,感兴趣的小伙伴可以参考一下
    2022-04-04
  • java实现坦克大战游戏

    java实现坦克大战游戏

    这篇文章主要为大家详细介绍了java实现坦克大战游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • VScode+Java配置与使用的详细步骤

    VScode+Java配置与使用的详细步骤

    这篇文章主要介绍了VS code+Java配置与使用的详细步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Java Swing实现坦克大战游戏

    Java Swing实现坦克大战游戏

    这篇文章主要介绍了Java Swing实现坦克大战游戏,文中有非常详细的代码示例,对正在学习java的小伙伴们有很大的帮助哟,需要的朋友可以参考下
    2021-05-05
  • 解决ObjectMapper序列换Map时候的坑

    解决ObjectMapper序列换Map时候的坑

    这篇文章主要介绍了解决ObjectMapper序列换Map时候的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08

最新评论