zoukankan      html  css  js  c++  java
  • 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)--开始使用微信接口

  • 相关阅读:
    Django进阶之CSRF
    Django进阶之session
    simple_tag,filte,分页以及cookie和装饰器
    Django 中url补充以及模板继承
    Django补充及初识Ajax
    2016年12月20日感想
    Docker的镜像
    继续Django
    jS正则和WEB框架Django的入门
    Docker的容器
  • 原文地址:https://www.cnblogs.com/spring_wang/p/5074867.html
Copyright © 2011-2022 走看看