* 详细说明请参考前两篇文章。
*本文分为五部分:
* 工具类MyHttpUtils的封装
* 用户分组管理文档的简单阅读解析
* 分组bean的构建以及各种分组管理的实现源码
* 用户管理的应用场景
* 测试的微信号二维码
* 本文只分析用户管理的用户分组管理部分,其它都大同小异,不再分析处理。如需要,请留言。
* 以后原理分析会越来越简洁,具体原理分析请查看以前文章。
* 下一篇文章会对于用户普通消息、自定义菜单消息、自动完成用户分组等进行分析处理。
* 然后的文章是关于微信网页开发部分的分析。
MyHttpUtils.java
package com.gist.utils;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
/**
* @author 高远</n>
* 编写日期 2016-4-17下午12:45:37</n>
* 邮箱 [email protected]</n>
* 博客 http://blog.csdn.net/wgyscsf</n>
* TODO</n>
*/
/*
* 该工具封装一些请求http的一些常用方法。
*/
public class MyHttpUtils {
static String TAG = "MyHttpUtils";// 确定我们打印的数据属于哪个方法
/*
* 我们封装一个http请求方法,该方法需要传递一个请求的url和一个json数据。返回值是一个json字符串。
*/
public static String getReturnJson(String url, String osrJson) {
String reslut = "";// 返回的结果json
try {
// 创建一个url
URL reqURL = new URL(url);
// 拿取链接
HttpsURLConnection httpsConn = (HttpsURLConnection) reqURL
.openConnection();
// 当需要参数传递时,才执行该方法
if (osrJson != null) {
httpsConn.setDoOutput(true);
// 取得该连接的输出流,以读取响应内容
OutputStreamWriter osr = new OutputStreamWriter(
httpsConn.getOutputStream());
osr.write(osrJson);// 写请求数据
osr.close();
}
// 返回结果
InputStreamReader isr = new InputStreamReader(
httpsConn.getInputStream());
char[] chars = new char[1024];
int len;
while ((len = isr.read(chars)) != -1) {
reslut += new String(chars, 0, len);
}
isr.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return reslut;
}
}
关于创建分组(其它用户分组管理类似,不再给出),官网文档给出这样解释:
接口调用请求说明
http请求方式: POST(请使用https协议)
https://api.weixin.qq.com/cgi-bin/groups/create?access_token=ACCESS_TOKEN
POST数据格式:json
POST数据例子:{"group":{"name":"test"}}
返回说明 正常时的返回JSON数据包示例:
{
"group": {
"id": 107,
"name": "test"
}
}
理解:
分组bean的构建
/*
* 分组所需要的各种信息
*/
public class Group {
private int id;
private String name;
private int count;
private String openid;
private String to_groupid;
private String groupid;
//Setter、Getter...
}
/*
* 有时候返回是一个list类型;或者是一个类似这样格式的信息:{
* 'group':{'name':'组名'}},请注意这个json的“group”。常规的bean,转化为json是{'name':'组名'}这样的格式。
* 我们需要这样一个类进行处理,我们称之为Group联合体。
*/
public class GroupUnit {
private Group group;
private List<Group> groups;
//Setter、Getter...
}
各种分组操作的实现源码
package com.gist.demo_offline;
import java.util.List;
import org.junit.Test;
import com.gist.bean.Group;
import com.gist.bean.GroupUnit;
import com.gist.utils.AccessTokenUtils;
import com.gist.utils.MyHttpUtils;
import com.google.gson.Gson;
/**
* @author 高远</n> 编写日期 2016-4-17下午12:31:32</n> 邮箱 [email protected]</n> 博客
* http://blog.csdn.net/wgyscsf</n> TODO</n>
*/
/*
* 该类主要测试用户分组管理
*/
public class GroupManager {
private static final String TAG = "GroupManager";
/*
* 测试创建分组
*/
@Test
public void createGroup() {
String ACCESS_TOKEN = AccessTokenUtils.getSavedAccess_token();// 获取我们保存且实时更新的ACCESS_TOKEN,实现原理参看第三篇文章
String url = "https://api.weixin.qq.com/cgi-bin/groups/create?access_token="
+ ACCESS_TOKEN;// 请求路径
// String osrJson = "{'group':{'name':'组名'}}";// 简单测试,不再封装对应bean
// 创建分组群组
GroupUnit groupUnit = new GroupUnit();
// 创建分组对象
Group group = new Group();
group.setName("测试组名");// 设置新建组名
groupUnit.setGroup(group);
Gson gson = new Gson();
String osrJson = gson.toJson(groupUnit);
System.out.println(osrJson);
String returnJson = MyHttpUtils.getReturnJson(url, osrJson);// 我们封装的http工具类
System.out.println(TAG + "返回结果:" + returnJson);
}
/*
* 测试查询所有分组
*/
@Test
public void showAllGroup() {
String ACCESS_TOKEN = AccessTokenUtils.getSavedAccess_token();// 获取我们保存且实时更新的ACCESS_TOKEN,实现原理参看第三篇文章
String url = "https://api.weixin.qq.com/cgi-bin/groups/get?access_token="
+ ACCESS_TOKEN;// 请求路径
String returnJson = MyHttpUtils.getReturnJson(url, null);// 我们封装的http工具类
System.out.println(TAG + "返回结果:" + returnJson);
/*
* 我们对返回的数据进行封装
*/
GroupUnit groupUnit = new GroupUnit();
Gson gson = new Gson();
groupUnit = gson.fromJson(returnJson, groupUnit.getClass());
List<Group> groups = groupUnit.getGroups();
for (Group group : groups) {
System.out.println(TAG + ":组名" + group.getName());
}
}
/*
* 该方法测试得到用户所在的分组id,需要传递过来一个用户openid
*/
public static String getGroup(String openid) {
String ACCESS_TOKEN = AccessTokenUtils.getSavedAccess_token();// 获取我们保存且实时更新的ACCESS_TOKEN,实现原理参看第三篇文章
String url = "https://api.weixin.qq.com/cgi-bin/groups/getid?access_token="
+ ACCESS_TOKEN;// 请求路径
String osrJson = "{\"openid\":\"" + openid + "\"}";// 简单json,不再封装
System.out.println(osrJson);
String returnJson = MyHttpUtils.getReturnJson(url, osrJson);// 我们封装的http工具类
System.out.println(TAG + "返回结果:" + returnJson);
/*
* 封装返回结果
*/
Group goup = new Group();
Gson gson = new Gson();
goup = gson.fromJson(returnJson, goup.getClass());
return goup.getGroupid();
}
/*
* 该方法测试将用户移动到指定分组
*/
public static String updateGroup(String openid, String to_groupid) {
String ACCESS_TOKEN = AccessTokenUtils.getSavedAccess_token();// 获取我们保存且实时更新的ACCESS_TOKEN,实现原理参看第三篇文章
String url = "https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token="
+ ACCESS_TOKEN;// 请求路径
// 封装请求数据
Group group = new Group();
group.setOpenid(openid);
group.setTo_groupid(to_groupid);
Gson gson = new Gson();
String osrJson = gson.toJson(group);
System.out.println(TAG + osrJson);
String returnJson = MyHttpUtils.getReturnJson(url, osrJson);// 我们封装的http工具类
System.out.println(TAG + "返回结果:" + returnJson);
return returnJson;
}
/**
* TODO
*/
public static void main(String[] args) {
// 移动分组
String msg = updateGroup("obM1Qt2oWq3K1FD6MIM1ImCm5ZZE", 101 + "");
System.out.println(msg);
// 获取用户分组id
String id = getGroup("obM1Qt2oWq3K1FD6MIM1ImCm5ZZE");
System.out.println(id);
}
}
测试号二维码
个人技术学习公众号,欢迎关注