java版 微信公众号获取微信用户基本信息
2017-11-17 17:36
417 查看
https请求方式 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": 1, "openid": "olOYjrPTlmet3sgFKkCwZc9ZQFK", "nickname": "小纸条", "sex": 1, "language": "zh_CN", "city": "邯郸", "province": "河北", "country": "中国", "headimgurl": "http://wx.qlogo.cn/mmopen/icE89lO9H8ibTnSOhQjvyLCM2pib7Ux7AUKunOjx8L1Ey13PC31kFSQZibg2ZSuFPYKcYURBldz2qCVl8Cicq2ATz46k6a42Jjuqia/0", "subscribe_time": 1510900026, "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL" "remark": "", "groupid": 0 }参数说明
参数 | 说明 |
---|---|
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 |
/** * 微信用户的基本信息 * @author * */ 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_CN private 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; } }
获取微信用户的基本信息 需要 一个token
token类
/** * 凭证 * @author * */ public class Token { // 接口访问凭证 private String accessToken; // 凭证有效期,单位:秒 private int expiresIn; public String getAccessToken() { return accessToken; } public void setAccessToken(String accessToken) { this.accessToken = accessToken; } public int getExpiresIn() { return expiresIn; } public void setExpiresIn(int expiresIn) { this.expiresIn = expiresIn; } }https请求需要信任管理器
/*** 信任管理器* @author**/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;}}
通用工具类
/*** 通用工具类* @author**/public class CommonUtil {private static Logger log = LoggerFactory.getLogger(CommonUtil.class);// 凭证获取(GET)public final static String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";/*** 发送https请求** @param requestUrl 请求地址* @param requestMethod 请求方式(GET、POST)* @param outputStr 提交的数据* @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)*/public 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;}/*** 获取接口访问凭证** @param appid 凭证* @param appsecret 密钥* @return*/public static Token getToken(String appid, String appsecret) {Token token = null;String requestUrl = token_url.replace("APPID", appid).replace("APPSECRET", appsecret);// 发起GET请求获取凭证JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);if (null != jsonObject) {try {token = new Token();token.setAccessToken(jsonObject.getString("access_token"));token.setExpiresIn(jsonObject.getInt("expires_in"));} catch (JSONException e) {token = null;// 获取token失败try {log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));} catch (JSONException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}return token;}/*** URL编码(utf-8)** @param source* @return*/public static String urlEncodeUTF8(String source) {String result = source;try {result = java.net.URLEncoder.encode(source, "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return result;}/*** 根据内容类型判断文件扩展名** @param contentType 内容类型* @return*/public static String getFileExt(String contentType) {String fileExt = "";if ("image/jpeg".equals(contentType))fileExt = ".jpg";else if ("audio/mpeg".equals(contentType))fileExt = ".mp3";else if ("audio/amr".equals(contentType))fileExt = ".amr";else if ("video/mp4".equals(contentType))fileExt = ".mp4";else if ("video/mpeg4".equals(contentType))fileExt = ".mp4";return fileExt;}/*** 获取用户信息** @param accessToken 接口访问凭证* @param openId 用户标识* @return WeixinUserInfo*/public static WeixinUserInfo getUserInfo(String accessToken, String openId) {WeixinUserInfo weixinUserInfo = null;// 拼接请求地址String requestUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID";requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken).replace("OPENID", 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;}}mian方法测试
/*** 获取用户信息* @author**/public class WeixinUserInfoList {public static void main(String args[]) {// 获取接口访问凭证String accessToken = CommonUtil.getToken("wxa0f724baad6599a8", "5a535951c669cc88fa2170b1f023440f").getAccessToken();/*** 获取用户信息*/WeixinUserInfo user = CommonUtil.getUserInfo(accessToken, "olOYB0tAK1Lr28iA4E7c9ZQFKkCw");System.out.println("OpenID:" + user.getOpenId());System.out.println("关注状态:" + user.getSubscribe());System.out.println("关注时间:" + user.getSubscribeTime());System.out.println("昵称:" + user.getNickname());System.out.println("性别:" + user.getSex());System.out.println("国家:" + user.getCountry());System.out.println("省份:" + user.getProvince());System.out.println("城市:" + user.getCity());System.out.println("语言:" + user.getLanguage());System.out.println("头像:" + user.getHeadImgUrl());}}控制台信息
OpenID:olOABDGHK1Lr63IA4E7c9OPFHkwC关注状态:1关注时间:1510900026昵称:小纸条性别:1国家:中国省份:北京城市:海淀语言:zh_CN头像:http://wx.qlogo.cn/mmopen/icE89lO9H8ibTnSOhQjvyLCM2pib7Ux7AUKunOjx8L1Ey13PC31kFSQZibg2ZSuFPYKcYURBldz2qCVl8Cicq2ATz46k6a42Jjuqia/0
相关文章推荐
- java微信公众号开发获取微信用户信息
- 微信公共号开发教程java版——获取用户基本信息(UnionID机制)(七)
- 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息
- Java微信公众号开发:网页授权获取用户基本信息
- 微信公众号的搭建-第六天-获取微信用户的基本信息
- 微信公众平台开发实战Java版之微信获取用户基本信息
- 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息
- 微信公众平台开发实战Java版之微信获取用户基本信息
- java 更具用户微信openId获取用户基本信息
- Java微信网页授权授权获取用户基本信息
- 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息
- 微信--网页授权获取用户基本信息
- 微信公众号PHP开发怎么获取用户的基本信息(姓名、性别、年龄等)
- 微信网页授权获取用户基本信息
- C#微信公众号开发之网页授权oauth2.0获取用户基本信息(一)
- 用c#开发微信(2)扫描二维码,用户授权后获取用户基本信息 (源码下载)
- 微信公众号获取未关注的用户基本信息信息(已关注或者未关注都可以)
- 微信公众号开发系列-网页授权获取用户基本信息
- C#微信公众号开发-高级接口-之网页授权oauth2.0获取用户基本信息(二)
- 微信公众平台开发—利用OAuth2.0获取微信用户基本信息