让我们继续深入探索这方面的技术,为了更好的应用起来,专心做好底层的技术开发。本篇继续上一篇的介绍,主要介绍分组管理方面的开发应用,这篇的内容和上一篇,作为一个完整的用户信息和分组信息管理的组合。
1、用户分组管理内容
用户分组的引入,主要是方便管理关注者列表,以及方便向不同的组别发送消息的操作的,一个公众账号,最多支持创建500个分组。
用户分组管理,包含下面几个方面的内容:
1 创建分组
2 查询所有分组
3 查询用户所在分组
4 修改分组名
5 移动用户分组
6.删除分组
微信对于创建分组的定义如下所示。
http请求方式: POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/groups/create?access_token=ACCESS_TOKEN POST数据格式:json POST数据例子:{"group":{"name":"test"}}
正常返回的结果如下所示。
{ "group": { "id": 107, "name": "test" } }
其他接口,也是类似的方式,通过POST一些参数进去URL里面,获取返回的Json数据。
前面随笔定义了GroupJson的实体类信息如下所示。
/// <summary> /// 分组类 /// </summary> public class GroupJson : BaseJsonResult { /// <summary> /// 分组id,由微信分配 /// </summary> public int id { get; set; } /// <summary> /// 分组名字,UTF8编码 /// </summary> public string name { get; set; } /// <summary> /// 分组人数 /// </summary> public string count { get; set; } }
根据以上几个接口的定义,我定义了几个接口,并把它们归纳到用户管理的API接口里面。
public interface IGroupApi { /// <summary> /// 查询所有分组 /// </summary> /// <param name="accessToken">调用接口凭证</param> /// <returns></returns> List<GroupJson> GetGroupList(string accessToken); /// <summary> /// 创建分组 /// </summary> /// <param name="accessToken">调用接口凭证</param> /// <param name="name">分组名称</param> /// <returns></returns> GroupJson CreateGroup(string accessToken, string name); /// <summary> /// 查询用户所在分组 /// </summary> /// <param name="accessToken">调用接口凭证</param> /// <param name="openid">用户的OpenID</param> /// <returns></returns> int GetUserGroupId(string accessToken, string openid); /// <summary> /// 修改分组名 /// </summary> /// <param name="accessToken">调用接口凭证</param> /// <param name="id">分组id,由微信分配</param> /// <param name="name">分组名字(30个字符以内)</param> /// <returns></returns> CommonResult UpdateGroupName(string accessToken, int id, string name); /// <summary> /// 移动用户分组 /// </summary> /// <param name="accessToken">调用接口凭证</param> /// <param name="openid">用户的OpenID</param> /// <param name="to_groupid">分组id</param> /// <returns></returns> CommonResult MoveUserToGroup(string accessToken, string openid, int to_groupid); /// <summary> /// 删除用户分组 /// </summary> /// <param name="accessToken">调用接口凭证</param> /// <returns></returns> CommonResult DeleteGroup(string accessToken, int groupid); }
2、用户分组管理接口的实现
2.1 创建用户分组
为了解析如何实现创建用户分组的POST数据操作,我们来一步步了解创建用户的具体过程。
首先需要创建一个动态定义的实体类信息,它包含几个需要提及的属性,如下所示。
string url = string.Format("https://api.weixin.qq.com/cgi-bin/groups/create?access_token={0}", accessToken); var data = new { group = new { name = name } }; string postData = JsonConvert.SerializeObject(data, Formatting.Indented);
准备好Post的数据后,我们就进一步看看获取数据并转换为合适格式的操作代码。
group = BasicAPI.ConvertJson<GroupJson>(url, postData); if (group != null && group.group != null) { return group; } return group;
这样,完整的创建用户分组的操作函数如下所示。
1 #region 创建分组 GroupJson CreateGroup(string accessToken, string name) 2 /// <summary> 3 /// 创建分组 4 /// </summary> 5 /// <param name="accessToken">调用接口凭证</param> 6 /// <param name="name">分组名称</param> 7 /// <returns></returns> 8 public GroupJson CreateGroup(string accessToken, string name) 9 { 10 string url = string.Format("https://api.weixin.qq.com/cgi-bin/groups/create?access_token={0}", accessToken); 11 12 var data = new 13 { 14 group = new 15 { 16 name = name 17 } 18 }; 19 string postData = JsonConvert.SerializeObject(data, Formatting.Indented); 20 21 GroupJson group = null; 22 23 group = BasicAPI.ConvertJson<GroupJson>(url, postData); 24 if (group != null && group.group != null) 25 { 26 return group; 27 } 28 return group; 29 30 } 31 #endregion
2.3 查询用户所在分组
每个用户都属于一个分组,默认在 未分组 这个分组里面,我们可以通过API获取用户的分组信息,也就是获取所在用户分组的ID。
1 #region 查询用户所在分组 int GetUserGroupId(string accessToken, string openid) 2 /// <summary> 3 /// 查询用户所在分组 4 /// </summary> 5 /// <param name="accessToken">调用接口凭证</param> 6 /// <param name="openid">用户的OpenID</param> 7 /// <returns></returns> 8 public int GetUserGroupId(string accessToken, string openid) 9 { 10 string url = string.Format("https://api.weixin.qq.com/cgi-bin/groups/getid?access_token={0}", accessToken); 11 var data = new 12 { 13 openid = openid 14 }; 15 string postData = JsonConvert.SerializeObject(data, Formatting.Indented); 16 17 int groupId = -1; 18 GroupIdJsonResult result = BasicAPI.ConvertJson<GroupIdJsonResult>(url, postData); ; 19 if (result != null) 20 { 21 groupId = result.groupid; 22 } 23 return groupId; 24 } 25 #endregion
2.4 修改分组名称
也可以在实际中,调整用户所在的分组,操作代码如下。
1 #region 修改分组名 CommonResult UpdateGroupName(string accessToken, int id, string name) 2 /// <summary> 3 /// 修改分组名 4 /// </summary> 5 /// <param name="accessToken">调用接口凭证</param> 6 /// <param name="id">分组id,由微信分配</param> 7 /// <param name="name">分组名字(30个字符以内)</param> 8 /// <returns></returns> 9 public CommonResult UpdateGroupName(string accessToken, int id, string name) 10 { 11 string url = string.Format("https://api.weixin.qq.com/cgi-bin/groups/update?access_token={0}", accessToken); 12 var data = new 13 { 14 group = new 15 { 16 id = id, 17 name = name 18 } 19 }; 20 string postData = JsonConvert.SerializeObject(data, Formatting.Indented); 21 22 return BasicAPI.RequestUrlPostDataResult(url, postData); 23 } 24 #endregion
2.5 移动用户到新的分组
移动用户到新的分组的操作和上面小节的差不多,具体看代码。
#region 移动用户分组 CommonResult MoveUserToGroup(string accessToken, string openid, int to_groupid) /// <summary> /// 移动用户分组 /// </summary> /// <param name="accessToken">调用接口凭证</param> /// <param name="openid">用户的OpenID</param> /// <param name="to_groupid">分组id</param> /// <returns></returns> public CommonResult MoveUserToGroup(string accessToken, string openid, int to_groupid) { string url = string.Format("https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token={0}", accessToken); var data = new { openid = openid, to_groupid = to_groupid }; string postData = JsonConvert.SerializeObject(data, Formatting.Indented); return BasicAPI.RequestUrlPostDataResult(url, postData); } #endregion
2.6 删除分组
删除分组操作更加简单,下面是具体的代码实现:
string url = string.Format("https://api.weixin.qq.com/cgi-bin/groups/delete?access_token={0}", accessToken); var data = new { group = new { id = groupid } }; string postData = JsonConvert.SerializeObject(data, Formatting.Indented); return BasicAPI.RequestUrlPostDataResult(url, postData);
3、用户分组接口的调用
上面小节,定义并实现了用户分组的各类接口,所有的用户相关的都已经毫无保留贴出代码,它的调用操作如下代码所示(测试代码)。
1 分组创建测试 2 GroupJson gj = groupApi.CreateGroup(BasicAPI.GetWeiXinAccessToken(this.UserInfo), "黑名单"); 3 4 分组获取测试 5 List<GroupJson> listGroup = groupApi.GetGroupList(BasicAPI.GetWeiXinAccessToken(this.UserInfo)); 6 foreach (var item in listGroup) 7 { 8 System.Console.WriteLine("ID:" + item.id + "name:" + item.name); 9 } 10 11 根据用户 获取所在分组 12 int groupId = groupApi.GetUserGroupId(BasicAPI.GetWeiXinAccessToken(this.UserInfo), "o1_M-weeq4zg8xd5VTwgnxTRZHhE"); 13 14 System.Console.WriteLine("用户所在分组ID:" + groupId); 15 16 修改分组名 17 CommonResult r = groupApi.UpdateGroupName(BasicAPI.GetWeiXinAccessToken(this.UserInfo), 100,"aaaaa"); 18 System.Console.WriteLine("是否成功:" + r.Success +" 原因:" + r.Errcode); 19 20 移动分组 21 CommonResult r = groupApi.MoveUserToGroup(BasicAPI.GetWeiXinAccessToken(this.UserInfo), "o1_M-weeq4zg8xd5VTwgnxTRZHhE", 2); 22 System.Console.WriteLine("是否成功:" + r.Success + " 原因:" + r.Errcode); 23 24 int groupId = groupApi.GetUserGroupId(BasicAPI.GetWeiXinAccessToken(this.UserInfo), "o1_M-weeq4zg8xd5VTwgnxTRZHhE"); 25 System.Console.WriteLine("用户所在分组ID:" + groupId); 26 删除分组 27 CommonResult r = groupApi.DeleteGroup(BasicAPI.GetWeiXinAccessToken(this.UserInfo), 102); 28 System.Console.WriteLine("是否成功:" + r.Success + " 原因:" + r.Errcode); 29 30 31 32 List<GroupJson> listGroup = groupApi.GetGroupList(BasicAPI.GetWeiXinAccessToken(this.UserInfo)); 33 foreach (var item in listGroup) 34 { 35 System.Console.WriteLine("ID:" + item.id + "name:" + item.name); 36 }
如果感兴趣或者体验相关的微信功能,可以关注我的微信了解下。具体效果关注测试账号扫描下面二维码进行关注了解。