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

时间:2024-01-10 18:38:08

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

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);
}

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

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

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