C#-MVC开发微信应用(6)--用户分组信息管理

让我们继续深入探索这方面的技术,为了更好的应用起来,专心做好底层的技术开发。本篇继续上一篇的介绍,主要介绍分组管理方面的开发应用,这篇的内容和上一篇,作为一个完整的用户信息和分组信息管理的组合。

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             }

如果感兴趣或者体验相关的微信功能,可以关注我的微信了解下。具体效果关注测试账号扫描下面二维码进行关注了解。

作者: 王春天 2016-01-10
作者Blog:http://www.cnblogs.com/spring_wang 出处: http://www.cnblogs.com/spring_wang/p/5074867.html

  如果觉得还不错,欢迎转载。

本系列文章列表如下:

基于SNF-快速开发平台框架的系列文章:

C#-MVC开发微信应用(8)--菜单管理的实现

C#-MVC开发微信应用(7)--在管理系统中同步微信用户分组信息

C#-MVC开发微信应用(6)--用户分组信息管理

C#-MVC开发微信应用(5)--自动应答系统-自动回复机器人

C#-MVC开发微信应用(4)--微信门户菜单的管理操作

C#-MVC开发微信应用(3)--文本消息和图文消息的应答

C#-MVC开发微信应用(2)--微信消息的处理和应答 

C#-MVC开发微信应用(1)--开始使用微信接口

原文地址:https://www.cnblogs.com/spring_wang/p/5074867.html