6.8.1 查询分组

通过查询分组接口能够获取到公众账号的分组列表,列表中包含了每个分组的id、名称和分组内的用户数。

1.接口描述

查询分组接口的请求地址如下:

  1. https://api.weixin.qq.com/cgi-bin/groups/get?access_token=ACCESS_TOKEN

通过发送HTTPS GET请求调用该接口,正确时返回的JSON结果如下:

  1. {
  2. "groups": [
  3. {
  4. "id": 0,
  5. "name": "未分组",
  6. "count": 72596
  7. },
  8. {
  9. "id": 1,
  10. "name": "黑名单",
  11. "count": 0
  12. },
  13. {
  14. "id": 2,
  15. "name": "星标组",
  16. "count": 8
  17. },
  18. {
  19. "id": 104,
  20. "name": "公司内部",
  21. "count": 50
  22. }
  23. ]
  24. }

上述JSON结果中的参数说明如表6-10所示。

表6-10 查询分组接口返回参数说明

6.8.1 查询分组 - 图1

接口调用错误时,返回的JSON结果示例如下:

  1. {"errcode":40013,"errmsg":"invalid appid"}

2.方法封装

笔者将查询分组的操作封装成getGroups()方法,该方法的实现如下:

  1. /**
  2. * 查询分组
  3. *
  4. * @param accessToken 调用接口凭证
  5. */
  6. @SuppressWarnings( { "unchecked", "deprecation" })
  7. public static List<WeixinGroup> getGroups(String accessToken) {
  8. List<WeixinGroup> weixinGroupList = null;
  9. // 拼接请求地址
  10. String requestUrl = "https://api.weixin.qq.com/cgi-bin/
  11. groups/get?access_token=ACCESS_TOKEN";
  12. requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken);
  13. // 查询分组
  14. JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET", null);
  15.  
  16. if (null != jsonObject) {
  17. try {
  18. weixinGroupList = JSONArray.toList
  19. (jsonObject.getJSONArray("groups"), WeixinGroup.class);
  20. } catch (JSONException e) {
  21. weixinGroupList = null;
  22. int errorCode = jsonObject.getInt("errcode");
  23. String errorMsg = jsonObject.getString("errmsg");
  24. log.error("查询分组失败 errcode:{} errmsg:{}", errorCode, errorMsg);
  25. }
  26. }
  27. return weixinGroupList;
  28. }

getGroups()方法的返回值是一个WeixinGroup列表,WeixinGroup封装了获取查询分组接口返回的所有参数,该类的代码如下:

  1. package org.liufeng.course.pojo;
  2.  
  3. /**
  4. * 公众账号分组信息
  5. *
  6. * @author liufeng
  7. * @date 2013-11-09
  8. */
  9. public class WeixinGroup {
  10. // 分组id
  11. private int id;
  12. // 分组名称
  13. private String name;
  14. // 分组内的用户数
  15. private int count;
  16.  
  17. public int getId() {
  18. return id;
  19. }
  20.  
  21. public void setId(int id) {
  22. this.id = id;
  23. }
  24.  
  25. public String getName() {
  26. return name;
  27. }
  28.  
  29. public void setName(String name) {
  30. this.name = name;
  31. }
  32.  
  33. public int getCount() {
  34. return count;
  35. }
  36.  
  37. public void setCount(int count) {
  38. this.count = count;
  39. }
  40. }

3.案例:获取公众账号分组列表

下面是调用getGroups()方法获取公众账号分组列表的案例。

  1. public static void main(String args[]) {
  2. // 获取接口访问凭证
  3. String accessToken = CommonUtil.getToken("APPID", "APPSECRET").getAccessToken();
  4. // 获取分组列表
  5. List<WeixinGroup> groupList = getGroups(accessToken);
  6. // 循环输出各分组信息
  7. for (WeixinGroup group : groupList) {
  8. System.out.println(String.format("ID:%d 名称:%s 用户数:%d", group.getId(),
  9. group.getName(), group.getCount()));
  10. }
  11. }

笔者测试使用的公众账号没有新建分组,只有默认的3个分组:未分组、黑名单和星标组。因此,上述示例代码的运行结果如图6-10所示。

6.8.1 查询分组 - 图2

图6-10 查询分组示例的运行结果