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

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;

这样,完整的创建用户分组的操作函数如下所示。

 #region 创建分组 GroupJson CreateGroup(string accessToken, string name)
/// <summary>
/// 创建分组
/// </summary>
/// <param name="accessToken">调用接口凭证</param>
/// <param name="name">分组名称</param>
/// <returns></returns>
public GroupJson CreateGroup(string accessToken, string name)
{
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); GroupJson group = null; group = BasicAPI.ConvertJson<GroupJson>(url, postData);
if (group != null && group.group != null)
{
return group;
}
return group; }
#endregion

2.3 查询用户所在分组

每个用户都属于一个分组,默认在 未分组 这个分组里面,我们可以通过API获取用户的分组信息,也就是获取所在用户分组的ID。

  #region 查询用户所在分组 int GetUserGroupId(string accessToken, string openid)
/// <summary>
/// 查询用户所在分组
/// </summary>
/// <param name="accessToken">调用接口凭证</param>
/// <param name="openid">用户的OpenID</param>
/// <returns></returns>
public int GetUserGroupId(string accessToken, string openid)
{
string url = string.Format("https://api.weixin.qq.com/cgi-bin/groups/getid?access_token={0}", accessToken);
var data = new
{
openid = openid
};
string postData = JsonConvert.SerializeObject(data, Formatting.Indented); int groupId = -;
GroupIdJsonResult result = BasicAPI.ConvertJson<GroupIdJsonResult>(url, postData); ;
if (result != null)
{
groupId = result.groupid;
}
return groupId;
}
#endregion

2.4 修改分组名称

也可以在实际中,调整用户所在的分组,操作代码如下。

 #region 修改分组名 CommonResult UpdateGroupName(string accessToken, int id, string name)
/// <summary>
/// 修改分组名
/// </summary>
/// <param name="accessToken">调用接口凭证</param>
/// <param name="id">分组id,由微信分配</param>
/// <param name="name">分组名字(30个字符以内)</param>
/// <returns></returns>
public CommonResult UpdateGroupName(string accessToken, int id, string name)
{
string url = string.Format("https://api.weixin.qq.com/cgi-bin/groups/update?access_token={0}", accessToken);
var data = new
{
group = new
{
id = id,
name = name
}
};
string postData = JsonConvert.SerializeObject(data, Formatting.Indented); return BasicAPI.RequestUrlPostDataResult(url, postData);
}
#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、用户分组接口的调用

上面小节,定义并实现了用户分组的各类接口,所有的用户相关的都已经毫无保留贴出代码,它的调用操作如下代码所示(测试代码)。

             分组创建测试
GroupJson gj = groupApi.CreateGroup(BasicAPI.GetWeiXinAccessToken(this.UserInfo), "黑名单"); 分组获取测试
List<GroupJson> listGroup = groupApi.GetGroupList(BasicAPI.GetWeiXinAccessToken(this.UserInfo));
foreach (var item in listGroup)
{
System.Console.WriteLine("ID:" + item.id + "name:" + item.name);
} 根据用户 获取所在分组
int groupId = groupApi.GetUserGroupId(BasicAPI.GetWeiXinAccessToken(this.UserInfo), "o1_M-weeq4zg8xd5VTwgnxTRZHhE"); System.Console.WriteLine("用户所在分组ID:" + groupId); 修改分组名
CommonResult r = groupApi.UpdateGroupName(BasicAPI.GetWeiXinAccessToken(this.UserInfo), ,"aaaaa");
System.Console.WriteLine("是否成功:" + r.Success +" 原因:" + r.Errcode); 移动分组
CommonResult r = groupApi.MoveUserToGroup(BasicAPI.GetWeiXinAccessToken(this.UserInfo), "o1_M-weeq4zg8xd5VTwgnxTRZHhE", );
System.Console.WriteLine("是否成功:" + r.Success + " 原因:" + r.Errcode); int groupId = groupApi.GetUserGroupId(BasicAPI.GetWeiXinAccessToken(this.UserInfo), "o1_M-weeq4zg8xd5VTwgnxTRZHhE");
System.Console.WriteLine("用户所在分组ID:" + groupId);
删除分组
CommonResult r = groupApi.DeleteGroup(BasicAPI.GetWeiXinAccessToken(this.UserInfo), );
System.Console.WriteLine("是否成功:" + r.Success + " 原因:" + r.Errcode); List<GroupJson> listGroup = groupApi.GetGroupList(BasicAPI.GetWeiXinAccessToken(this.UserInfo));
foreach (var item in listGroup)
{
System.Console.WriteLine("ID:" + item.id + "name:" + item.name);
}

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

作者: 王春天 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)--开始使用微信接口

C#-MVC开发微信应用(6)--用户分组信息管理的更多相关文章

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

    在前面几篇文章中,逐步从原有微信的API封装的基础上过渡到微信应用平台管理系统里面,逐步介绍管理系统中的微信数据的界面设计,以及相关的处理操作过程的逻辑和代码.希望从一个更高的层次介绍微信的开发. 在 ...

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

    之前讲解了微信后台管理页面的操作来管理菜单,下面我们在简单的来看一下,代码是如何实现的. 我们要实现获取微信的菜单.创建菜单.删除菜单等操作. 01.首先定义菜单操作的接口: /// <summ ...

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

    微信应用使用场景和商机很多,所以这也是一个技术的方向,因此,有空研究下.学习下微信的相关开发,也就成为SNF完善的必要条件了.本系列文章希望从一个循序渐进的角度上,全面介绍微信的相关开发过程和相关经验 ...

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

    前几篇已经介绍菜单和有回复信息操作,下面我们就结合snf微信端管理页面,看一下什么才是自动应答系统. 定制的服务 对于微信服务号来说,最主要的功能是提供更好的服务.用户更方便的操作,以及更快的反馈响应 ...

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

    最近咨询微信的人很多,感觉这块也是一块商机,也为了演示SNF快速开发平台的优势,就用SNF快速开发平台开发出一套微信应用程序.使用<SNF.CodeGenerator>代码生成工具可以节省 ...

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

    最近对微信接口进行深入的研究,通过把底层接口一步步进行封装后,逐步升级到自动化配置.自动化应答,以及后台处理界面的优化和完善上,力求搭建一个较为完善.适用的微信门户应用管理系统. 在微信门户系统里面, ...

  7. C#开发微信门户及应用(5)--用户分组信息管理

    在上个月的对C#开发微信门户及应用做了介绍,写过了几篇的随笔进行分享,由于时间关系,间隔了一段时间没有继续写这个系列的博客了,并不是对这个方面停止了研究,而是继续深入探索这方面的技术,为了更好的应用起 ...

  8. asp.net微信开发第五篇----用户分组管理

    上一篇已讲解到新建用户分组,移动用户到分组的功能,这一章主要讲解修改分组名称和删除分组 开发者可以使用接口,对公众平台的分组进行查询.创建.修改.删除等操作,也可以使用接口在需要时移动用户到某个分组. ...

  9. (转)C#开发微信门户及应用(5)--用户分组信息管理

    http://www.cnblogs.com/wuhuacong/p/3695351.html 在上个月的对C#开发微信门户及应用做了介绍,写过了几篇的随笔进行分享,由于时间关系,间隔了一段时间没有继 ...

随机推荐

  1. python学习之python安装

    1.下载python源码包 wget https://www.python.org/ftp/python/3.5.5/Python-3.5.5.tar.xz 2.下载  xz yum -y insta ...

  2. Codeforces Round #395 (Div. 2)

    今天自己模拟了一套题,只写出两道来,第三道时间到了过了几分钟才写出来,啊,太菜了. A. Taymyr is calling you 水题,问你在z范围内  两个序列  n,2*n,3*n...... ...

  3. 解决winscp中普通用户无法上传、删除、移动文件

    上一篇博客中提到了winscp这个软件,这个软件可以利用sftp协议对linux服务器就行连接,然后方便我们对文件进行操作,但是如果是利用普通用户进行登陆的话,在对文件进行相关操作的时候会出现一些pe ...

  4. lintcode 最大子数组III

    题目描述 给定一个整数数组和一个整数 k,找出 k 个不重叠子数组使得它们的和最大.每个子数组的数字在数组中的位置应该是连续的. 返回最大的和. 注意事项 子数组最少包含一个数 样例 给出数组 [-1 ...

  5. BZOJ 3994: [SDOI2015]约数个数和3994: [SDOI2015]约数个数和 莫比乌斯反演

    https://www.lydsy.com/JudgeOnline/problem.php?id=3994 https://blog.csdn.net/qq_36808030/article/deta ...

  6. Python图形编程探索系列-07-程序登录界面设计

    设计任务 初步设计程序登录界面,详细分析设计步骤. 程序详细分析 基本框架设计 import tkinter as tk import tkinter.messagebox root = tk.Tk( ...

  7. [USACO08DEC]Secret Message

    OJ题号: 洛谷2922 思路: 字典树,每个结点记录经过该节点的字符串数cnt和以该结点结尾的字符串数量val. 每次询问时累加经过节点的val值和结尾结点的cnt值. #include<cs ...

  8. 【模板】倍增LCA

    题号:洛谷3379 %:pragma GCC optimize ("Ofast") #include<cstdio> #include<vector> #i ...

  9. Android日志工具的使用

    一.使用Android的日志工具Log 1.Android中的日志工具类是Log,这个类中提供了如下5个方法来供我们打印日志. log.v():用于打印哪些最为繁琐.意义最小的日志信息.对应级别ver ...

  10. Content-type详解

    HttpHeader里的Content-Type 之前一直分不清楚post请求里Content-Type方式,如application/x-www-form-urlencoded.multipart/ ...