在关注着与公众号产生消息交互后,公众号可以获取关注着的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号,同一用户的openid不同)
公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。
开发者可通过OpenID来获取用户基本信息。请使用https协议。
接口调用请求说明
http请求是以get方式:
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
参数说明

参数 是否必须 说明
access_token 调用接口凭证
openid 普通用户的标识,对当前公众号唯一
lang 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语

返回参数说明

参数 说明
subscribe 用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息
openid 用户的标识,对当前公众号唯一
nickname 用户的昵称
sex 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
city 用户所在城市
country 用户所在国家
province 用户所在省份
language 用户的语言,简体中文为zh_CN
headimgurl 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
subscribe_time 用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
unionid 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。详见:获取用户个人信息(UnionID机制)
remark 公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注
groupid 用户所在的分组ID

错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):
{“errcode”:40013,“errmsg”:“invalid appid”}

代码展示
用户基本信息类:

package com.sbksrm.springboot.wx.po;
public class WeixinUserInfo
{// 用户的标识private String openId;// 关注状态(1是关注,0是未关注),未关注时获取不到其余信息private int subscribe;// 用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间private String subscribeTime;// 昵称private String nickname;// 用户的性别(1是男性,2是女性,0是未知)private int sex;// 用户所在国家private String country;// 用户所在省份private String province;// 用户所在城市private String city;// 用户的语言,简体中文为zh_CNprivate String language;// 用户头像private String headImgUrl;public String getOpenId(){return openId;}public void setOpenId(String openId){this.openId = openId;}public int getSubscribe(){return subscribe;}public void setSubscribe(int subscribe){this.subscribe = subscribe;}public String getSubscribeTime(){return subscribeTime;}public void setSubscribeTime(String subscribeTime){this.subscribeTime = subscribeTime;}public String getNickname(){return nickname;}public void setNickname(String nickname){this.nickname = nickname;}public int getSex(){return sex;}public void setSex(int sex){this.sex = sex;}public String getCountry(){return country;}public void setCountry(String country){this.country = country;}public String getProvince(){return province;}public void setProvince(String province){this.province = province;}public String getCity(){return city;}public void setCity(String city){this.city = city;}public String getLanguage(){return language;}public void setLanguage(String language){this.language = language;}public String getHeadImgUrl(){return headImgUrl;}public void setHeadImgUrl(String headImgUrl){this.headImgUrl = headImgUrl;}
}

https请求信任管理:

public class MyX509TrustManager implements X509TrustManager {// 检查客户端证书public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}// 检查服务器端证书public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}// 返回受信任的X509证书数组public X509Certificate[] getAcceptedIssuers() {return null;}
}

公共方法:

@Component
public class CommonUtil
{private static Logger log = LoggerFactory.getLogger(CommonUtil.class);public static AccessToken accessToken = null;/*** 获取接口访问凭证** @return*/@Scheduled(fixedRate = 1000 * 7200)private static AccessToken getAccessToken(){String requestUrl = String.format(BasicSysCodeService.getAccessTokenUrl(),BasicSysCodeService.getAppId(),BasicSysCodeService.getSecret());// 发起GET请求获取凭证JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);if (null != jsonObject){try{accessToken = new AccessToken();accessToken.setAccessToken(jsonObject.getString("access_token"));accessToken.setExpiresIn(jsonObject.getInt("expires_in"));}catch (Exception e){accessToken = null;// 获取token失败log.error(e.getMessage());}}return accessToken;}/*** 获取用户信息** @param openId 用户标识* @return WeixinUserInfo*/public static WeixinUserInfo getUserInfo(String openId){WeixinUserInfo weixinUserInfo = null;// 拼接请求地址String requestUrl =String.format(BasicSysCodeService.getGetUserInfoUrl(), accessToken.getAccessToken(), openId);// 获取用户信息JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET", null);if (null != jsonObject){try{weixinUserInfo = new WeixinUserInfo();// 用户的标识weixinUserInfo.setOpenId(jsonObject.getString("openid"));// 关注状态(1是关注,0是未关注),未关注时获取不到其余信息weixinUserInfo.setSubscribe(jsonObject.getInt("subscribe"));// 用户关注时间weixinUserInfo.setSubscribeTime(jsonObject.getString("subscribe_time"));// 昵称weixinUserInfo.setNickname(jsonObject.getString("nickname"));// 用户的性别(1是男性,2是女性,0是未知)weixinUserInfo.setSex(jsonObject.getInt("sex"));// 用户所在国家weixinUserInfo.setCountry(jsonObject.getString("country"));// 用户所在省份weixinUserInfo.setProvince(jsonObject.getString("province"));// 用户所在城市weixinUserInfo.setCity(jsonObject.getString("city"));// 用户的语言,简体中文为zh_CNweixinUserInfo.setLanguage(jsonObject.getString("language"));// 用户头像weixinUserInfo.setHeadImgUrl(jsonObject.getString("headimgurl"));}catch (Exception e){if (0 == weixinUserInfo.getSubscribe()){log.error("用户{}已取消关注", weixinUserInfo.getOpenId());}else{int errorCode = jsonObject.getInt("errcode");String errorMsg = jsonObject.getString("errmsg");log.error("获取用户信息失败 errcode:{} errmsg:{}", errorCode, errorMsg);}}}return weixinUserInfo;}/*** 发送https请求** @param requestUrl 请求地址* @param requestMethod 请求方式(GET、POST)* @param outputStr 提交的数据* @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)*/private static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr){JSONObject jsonObject = null;try{// 创建SSLContext对象,并使用我们指定的信任管理器初始化TrustManager[] tm = {new MyX509TrustManager()};SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");sslContext.init(null, tm, new java.security.SecureRandom());// 从上述SSLContext对象中得到SSLSocketFactory对象SSLSocketFactory ssf = sslContext.getSocketFactory();URL url = new URL(requestUrl);HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();conn.setSSLSocketFactory(ssf);conn.setDoOutput(true);conn.setDoInput(true);conn.setUseCaches(false);// 设置请求方式(GET/POST)conn.setRequestMethod(requestMethod);// 当outputStr不为null时向输出流写数据if (null != outputStr){OutputStream outputStream = conn.getOutputStream();// 注意编码格式outputStream.write(outputStr.getBytes("UTF-8"));outputStream.close();}// 从输入流读取返回内容InputStream inputStream = conn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String str = null;StringBuffer buffer = new StringBuffer();while ((str = bufferedReader.readLine()) != null){buffer.append(str);}// 释放资源bufferedReader.close();inputStreamReader.close();inputStream.close();inputStream = null;conn.disconnect();jsonObject = JSONObject.fromObject(buffer.toString());}catch (ConnectException ce){log.error("连接超时:{}", ce);}catch (Exception e){log.error("https请求异常:{}", e);}return jsonObject;}public static void main(String[] strings){getUserInfo("ojewF1YFBNa9FCOg42PkANA79CEg");}}

java微信公共号——获取微信用户的基本信息相关推荐

  1. java根据手机号获取微信信息_Java实现的微信公众号获取微信用户信息示例

    本文实例讲述了Java实现的微信公众号获取微信用户信息.分享给大家供大家参考,具体如下: 注: 这里获取用户信息方式和网页授权获取用户信息方式不同.两个access_token不同,返回的结果也不同. ...

  2. springboot+h5页面+微信公众号获取微信用户信息

    springboot项目,h5页面通过微信公众号获取微信用户信息 最近本人有一个项目需求,微信公众号里点击一个菜单进入一个商城购物系统. 对于在微信公众号还是小白的我来说难度有点大,但是做完后发现也就 ...

  3. 关于开发微信公众号获取手机用户运动数据的功能实现思路

    一.前沿研究 微信公众号开发文档,浏览后没有任何关于获取微信运动数据的接口 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp144 ...

  4. 微信公众号获取微信用户共享收货地址

    wx.openAddress({ success: function (res) { var userName = res.userName; // 收货人姓名 var postalCode = re ...

  5. 微信公众号获取微信服务器IP地址

    如果公众号基于安全等考虑,需要获知微信服务器的IP地址列表,以便进行相关限制,可以通过该接口获得微信服务器IP地址列表或者IP网段信息. http请求方式: GEThttps://api.weixin ...

  6. 微信公众号获取微信授权,不弹授权页面

    用H5写的页面,手机端一直不弹出授权页面,但是能直接拿到用户信息,相对于走的静默授权的路子,但是我传的参数是scope=snsapi_userinfo非静默,是要弹窗的. 微信网页授权能力调整公告 | ...

  7. 微信公共号开发教程java版——获取用户基本信息(UnionID机制)(七)

    一:UnionID机制说明 官网详细介绍:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839 获取用户基本信息( ...

  8. Java微信公众号开发微信网页授权之前端传递code方式获取用户信息

    本片博客讲解的网页授权分为两步,前端先传递backUrl(回调地址)到后台网页授权接口,该接口拿到回调地址后组装授权连接,重定向到前端页面,前端页面截取Code,传入后端获取用户信息方法,获取用户信息 ...

  9. JAVA版微信公众号获取openId,微信用户信息

    一. 前端页面js 1.获取页面传来的数据 function GetQueryString(name) {var reg = new RegExp("(^|&)" + na ...

最新文章

  1. cocos2d-x 输出debug信息
  2. VS2013试用期结束后如何激活
  3. 轻松解决(,|)和(and,or)之间的区别
  4. Boost::context模块callcc的斐波那契测试程序
  5. 初一七年级计算机信息全册教案,新川教版七年级信息技术全册教案(全册)
  6. 爬虫项目(四)---采集从01月22日以来全国各省疫情数据
  7. ABNFBNF 巴克斯范式
  8. 顺序队列,循环队列,链队列
  9. 1.1什么是数据仓库
  10. 新手程序员必读的十本书
  11. 虎虎生威 | 年终盘点,好文合辑!
  12. 好用的数据建模工具,探索中完善
  13. 在国内怎么使用谷歌Chrome浏览器,为什么我的谷歌浏览器进去就加载失败
  14. 龙芯3A4000处理器简介
  15. svchost.exe不停下载
  16. matlab的ezplot绘图函数
  17. 用python画篮球场_如何使用 Python 创建一个 NBA 得分图
  18. S3C44B0 寄存器描述
  19. 事业单位计算机岗位考公基吗,2017长治市直事业单位综合类岗位考公基和...
  20. 大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载 HTML5期末大作业

热门文章

  1. 苹果处理器排行_手机AI性能排行榜:iPhone 11第三,vivo iQOO第五
  2. 利用python编写气泡提醒小程序
  3. 香港科大三位校友登上2020《福布斯》亚洲30岁以下精英榜
  4. 文献管理工具EndNote 20.5版本下载安装使用教程
  5. android判断某文件下是否you_android判断图片类型 判断文件是否为图片文件 - 电脑常识 - 服务器之家...
  6. HDU 5514 Frogs(欧拉函数+数论YY)
  7. ubuntu0.18.04 出现 thunderbird-locale-zh-hans: Depends: thunderbird 错误的解决方法
  8. 基于微信小程序的菜谱管理系统(小程序+Java后台实现)
  9. C++常见问题(三)——宏定义、const、static、sizeof的相关实例
  10. i512600K配什么主板 显卡