玩玩微信公众号Java版之五:获取关注用户信息
| 参数 | 是否必须 | 说明 |
| access_token | 是 | 调用接口凭证 |
| openid | 是 | 普通用户的标识,对当前公众号唯一 |
| lang | 否 | 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语 |
| 参数 | 是否必须 | 说明 |
| openid | 是 | 用户的标识,对当前公众号唯一 |
| lang | 否 | 国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语,默认为zh-CN |
| 参数 | 是否必须 | 说明 |
| access_token | 是 | 调用接口凭证 |
| next_openid | 是 | 第一个拉取的OPENID,不填默认从头开始拉取 |
| 参数 | 说明 |
| total | 关注该公众账号的总用户数 |
| count | 拉取的OPENID个数,最大值为10000 |
| data | 列表数据,OPENID的列表 |
| next_openid | 拉取列表的最后一个用户的OPENID |
/**
* 微信用户信息类
* @author Damon
*/
public class UserInfo
{ // 用户的标识
private String openId; // 关注状态(1是关注,0是未关注),未关注时获取不到其余信息
private int subscribe; // 用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
private int 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; private String remark; private int groupid; 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 int getSubscribetime()
{
return subscribetime;
} public void setSubscribetime(int 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;
} public String getRemark()
{
return remark;
} public void setRemark(String remark)
{
this.remark = remark;
} public int getGroupid()
{
return groupid;
} public void setGroupid(int groupid)
{
this.groupid = groupid;
} }


/**
* 获取公众号关注的用户openid
* @return
*/
public List<String> getUserOpenId(String access_token, String nextOpenid)
{
String path = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID";
path = path.replace("ACCESS_TOKEN", access_token).replace("NEXT_OPENID", nextOpenid);
System.out.println("path:" + path); List<String> result = null;
try
{
String strResp = WeChatUtil.doHttpsGet(path, "");
System.out.println(strResp); Map map = WeChatUtil.jsonToMap(strResp);
Map tmapMap = (Map) map.get("data"); result = (List<String>) tmapMap.get("openid"); System.out.println(result.toString()); }
catch (HttpException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} return result;
}
获取到openi的信息后,也可以先存储起来(具体看项目需要了),或再等详细信息后才存储,
/**
* 通过用户openid 获取用户信息
* @param userOpenids
* @return
*/
public List<UserInfo> getUserInfo(List<String> userOpenids)
{
// 1、获取access_token
// 使用测试 wx9015ccbcccf8d2f5 02e3a6877fa5fdeadd78d0f6f3048245
WeChatTokenService tWeChatTokenService = new WeChatTokenService();
String tAccess_Token = tWeChatTokenService.getToken("wx9015ccbcccf8d2f5", "02e3a6877fa5fdeadd78d0f6f3048245").getToken(); // 2、封装请求数据
List user_list = new ArrayList<Map>();
for (int i = 0; i < userOpenids.size(); i++)
{
String openid = userOpenids.get(i);
Map tUserMap = new HashMap<String, String>();
tUserMap.put("openid", openid);
tUserMap.put("lang", "zh_CN");
user_list.add(tUserMap);
}
System.out.println(user_list.toString());
Map requestMap = new HashMap<String, List>();
requestMap.put("user_list", user_list);
String tUserJSON = JSONObject.fromObject(requestMap).toString(); // 3、请求调用
String result = getUserInfobyHttps(tAccess_Token, tUserJSON);
System.out.println(result); // 4、解析返回将结果
return parseUserInfo(result);
}
其中详细方法实现如下:
/**
* 解析返回用户信息数据
* @param userInfoJSON
* @return
*/
private List<UserInfo> parseUserInfo(String userInfoJSON)
{
List user_info_list = new ArrayList<UserInfo>(); Map tMapData = WeChatUtil.jsonToMap(userInfoJSON); List<Map> tUserMaps = (List<Map>) tMapData.get("user_info_list"); for (int i = 0; i < tUserMaps.size(); i++)
{
UserInfo tUserInfo = new UserInfo();
tUserInfo.setSubscribe((Integer) tUserMaps.get(i).get("subscribe"));
tUserInfo.setSex((Integer) tUserMaps.get(i).get("sex"));
tUserInfo.setOpenId((String) tUserMaps.get(i).get("openid"));
tUserInfo.setNickname((String) tUserMaps.get(i).get("nickname"));
tUserInfo.setLanguage((String) tUserMaps.get(i).get("language"));
tUserInfo.setCity((String) tUserMaps.get(i).get("city"));
tUserInfo.setProvince((String) tUserMaps.get(i).get("province"));
tUserInfo.setCountry((String) tUserMaps.get(i).get("country"));
tUserInfo.setHeadimgurl((String) tUserMaps.get(i).get("headimgurl"));
tUserInfo.setSubscribetime((Integer) tUserMaps.get(i).get("subscribe_time"));
tUserInfo.setRemark((String) tUserMaps.get(i).get("remark"));
tUserInfo.setGroupid((Integer) tUserMaps.get(i).get("groupid"));
user_info_list.add(tUserInfo);
} return user_info_list;
} /**
* 调用HTTPS接口,获取用户详细信息
* @param access_token
* @param requestData
* @return
*/
private String getUserInfobyHttps(String access_token, String requestData)
{
// 返回报文
String strResp = "";
String path = "https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=ACCESS_TOKEN";
path = path.replace("ACCESS_TOKEN", access_token); try
{
strResp = WeChatUtil.doHttpsPost(path, requestData);
}
catch (HttpException e)
{
// 发生致命的异常,可能是协议不对或者返回的内容有问题
System.out.println("Please check your provided http address!" + e);
e.printStackTrace();
}
catch (IOException e)
{
// 发生网络异常
}
catch (Exception e)
{
System.out.println(e);
}
finally
{}
return strResp;
}
测试方法如下:
public static void main(String[] args)
{
WeChatUserService tChatUserService = new WeChatUserService();
tChatUserService.getUserInfo(tChatUserService.getUserOpenId(new WeChatTokenService().getToken("appid", "appSceret").getToken(), ""));
}

可用把最终过去的用户信息存到数据库,后面的就由大家去发挥啦!
玩玩微信公众号Java版之五:获取关注用户信息的更多相关文章
- 玩玩微信公众号Java版之七:自定义微信分享
前面已经学会了微信网页授权,现在微信网页的功能也可以开展起来啦! 首先,我们先来学习一下分享,如何在自己的页面获取分享接口及让小伙伴来分享呢? 今天的主人公: 微信 JS-SDK, 对应官方链接为:微 ...
- 玩玩微信公众号Java版之六:微信网页授权
我们经常会访问一些网站,用微信登录的时候需要用到授权,那么微信网页授权是怎么一回事呢,一起来看看吧! 参考官方文档:https://mp.weixin.qq.com/wiki?t=resource ...
- 玩玩微信公众号Java版之四:自定义公众号菜单
序: 微信公众号基本的菜单很难满足个性化及多功能的实现,那么微信能否实现自定菜单呢,具体的功能又如何去实现么?下面就来学习一下微信自定义公众号菜单吧! 自定义菜单接口可实现多种类型按钮,如下: 1.c ...
- 玩玩微信公众号Java版之一:配置微信公众平台服务器信息
在进行微信公众平台开发前,前先做好准备工作,好了以后,我们可以开始啦! 第一.准备好服务端接口 定义一个http服务接口,主要分为如下几步: 1.创建一个servlet类,用来接收请求: ...
- 玩玩微信公众号Java版之准备
微信自2013年流行起来,现在的发展已经超过了我们的想象,那么对应的公众平台,小程序等都是让人眼前一亮的东西,这里来学习一下微信工作号的对接,实现为Java,希望大家一起学习! 这里大概描述一下所 ...
- 玩玩微信公众号Java版之三:access_token及存储access_token
微信官方参考文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183 基本说明: access_token是 ...
- 玩玩微信公众号Java版之二:接收、处理及返回微信消息
前面已经配置了微信服务器,那么先开始最简单的接收微信消息吧~ 可以用我们的微信号来直接进行测试,下面先看测试效果图: 这是最基本的文本消息的接收.处理及返回,来看看是怎么实现的吧! 首先可 ...
- 微信公众号Java接入demo
微信公众号Java接入demo 前不久买了一台服务,本来是用来当梯子用的,后来买了一个域名搭了一个博客网站,后来不怎么在上面写博客一直闲着,最近申请了一个微信公众号就想着弄点什么玩玩.周末没事就鼓捣了 ...
- java 扫描微信公众号二维码,关注并登录逻辑
场景:户扫描微信公众号的二维码,关注后自动登录网站,若已关注则直接登录. 逻辑: 系统生成带参数的临时二维码:参数 scene_str 自定义为唯一值(可以是uuid),临时二维码的生成方式参照官方接 ...
随机推荐
- 数据库MySQL安装和校验
1.安装MySQL 双击已经下载的安装包: Typical:典型安装,第一次安装建议选择该类安装 Custom:自定义安装,在对数据库熟悉后,知道自己需要哪些组件时,可以选择该类安装(这里选择的是自定 ...
- 关于XAMPP环境配置
关于XAMPP软件 * Apache - 软件服务器(运行PHP) * 启动失败 * 原因 - 端口号被占用 * 错误信息 - Error: Apache shutdown unexpectedly ...
- java基础(九章)
一.理解查询的机制 客户端应用程序(c/s.b/s)向后台服务器的DB发送一条select语句进行查询操作,会将结果集(虚拟表)返回到客户端应用程序 二.select语句 1.查询表中的全部列和行 s ...
- win7下 mysql安装(mysql-5.7.18-winx64.zip)
cmd到mysql/bin目录下 应该是先mysqld --initialize然后mysqld -install最后net start mysql
- 【基础】C#异常处理的总结
一.异常处理的理解? 异常处理是指程序在运行过程中,发生错误会导致程序退出,这种错误,就叫做异常. 因此处理这种错误,就称为异常处理. 二.异常处理如何操作? C# 异常处理时建立在四个关键词之上的: ...
- 第45篇 js操作打开本地程序
原文地址:http://blog.laofu.online/2017/06/10/how-js-controlApp/ 背景 假设有这样一个产品,一个web和一个winform客户端,在客户在web的 ...
- 一篇文章介绍GItHub的基础使用
最近复习了一下Git的使用,简单总结了一些.以供以后查阅和同行参考. 一,安装 首先是Linux下: 打开shell ,输入 sudo apt-get install git-core 之后回车输入密 ...
- Swift 了解(1)
Apple取消了oc的指针以及其他不安全的访问的使用,舍弃的smalltalk语法,全面改为点语法,提供了类似java的命名空间 范型 重载: 首先我们了解一下Swift这门语言.Swift就像C语言 ...
- 用户权限模块之spring security
准备工作:数据库采用mysql(5.6及以上) CREATE TABLE `auth_system` ( `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'I ...
- maven插件打包可执行jar
pom文件加 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</grou ...