Last month I introduced the development of WeChat portals and applications in C#, and wrote several essays to share. Due to time constraints, I have not continued writing this series of blogs for a while. It is not a review of this series. We stopped researching, but continued to explore the technology in this area in depth. In order to better apply it, we concentrated on the development of the underlying technology. This article continues the introduction of the previous article, mainly introducing the development and application of group management. The content of this article and the previous article serve as a complete combination of user information and group information management.
The introduction of user groups is mainly to facilitate the management of follower lists and the operation of sending messages to different groups. One public account supports up to Create 500 groups.
User group management includes the following aspects:
1 Create a group
2 Query all groups
3 Query the group the user belongs to
4 Modify the group name
5 Mobile User Groups
WeChat’s definition of creating groups is as follows.
http请求方式: POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/groups/create?access_token=ACCESS_TOKENPOST数据格式:json POST数据例子:{"group":{"name":"test"}}
The normally returned results are as follows.
{ "group": { "id": 107, "name": "test" } }
Other interfaces work in a similar way, by POSTing some parameters into the URL to obtain the returned Json data.
The entity class information of GroupJson defined in the previous essay is as follows.
/// <summary> /// 分组信息 /// </summary> public class GroupJson : BaseJsonResult { /// <summary> /// 分组id,由微信分配 /// </summary> public int id { get; set; } /// <summary> /// 分组名字,UTF8编码 /// </summary> public string name { get; set; } }
Based on the definitions of the above interfaces, I defined several interfaces and summarized them into the user management API interface.
/// <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);
2.1 Create user group
In order to analyze how to implement the POST data operation of creating user groups, let’s understand the specific process of creating users step by step.
First you need to create a dynamically defined entity class information, which contains several attributes that need to be mentioned, as shown below.
string url = string.Format("http://www.php.cn/{0}", accessToken); var data = new { group = new { name = name } }; string postData = data.ToJson();
We convert the object into a suitable Json data operation and put it in the extension method ToJson. This is mainly to facilitate the conversion of dynamically defined entity classes. Json content is mainly to call the serial number operation of Json.NET.
/// <summary> /// 把对象为json字符串 /// </summary> /// <param name="obj">待序列号对象</param> /// <returns></returns> public static string ToJson(this object obj) { return JsonConvert.SerializeObject(obj, Formatting.Indented); }
After preparing the Post data, we will further look at the operation code to obtain the data and convert it into a suitable format.
GroupJson group = null; CreateGroupResult result = JsonHelper<CreateGroupResult>.ConvertJson(url, postData); if (result != null) { group = result.group; }
The operation of POST data and converting it into a suitable format entity class is placed in the ConvertJson method. The definition of this method is as follows, and the HttpHelper inside It is an auxiliary class of my public class library. It mainly calls the underlying httpWebRequest object method to submit data and obtain the return result.
/// <summary> /// 转换Json字符串到具体的对象 /// </summary> /// <param name="url">返回Json数据的链接地址</param> /// <param name="postData">POST提交的数据</param> /// <returns></returns> public static T ConvertJson(string url, string postData) { HttpHelper helper = new HttpHelper(); string content = helper.GetHtml(url, postData, true); VerifyErrorCode(content); T result = JsonConvert.DeserializeObject<T>(content); return result; }
In this way, the complete operation function for creating user groups is as follows.
////// 创建分组 /// /// 调用接口凭证 /// 分组名称 ///public GroupJson CreateGroup(string accessToken, string name) { string url = string.Format("http://www.php.cn/{0}", accessToken); var data = new { group = new { name = name } }; string postData = data.ToJson(); GroupJson group = null; CreateGroupResult result = JsonHelper<CreateGroupResult>.ConvertJson(url, postData); if (result != null) { group = result.group; } return group; }
2.2 Query all groups
Query all groups, you can get all the groups on the server, also It is the ID and name of each group.
/// <summary> /// 查询所有分组 /// </summary> /// <param name="accessToken">调用接口凭证</param> /// <returns></returns> public List<GroupJson> GetGroupList(string accessToken) { string url = string.Format("http://www.php.cn/{0}", accessToken); List<GroupJson> list = new List<GroupJson>(); GroupListJsonResult result = JsonHelper<GroupListJsonResult>.ConvertJson(url); if (result != null && result.groups != null) { list.AddRange(result.groups); } return list; }
2.3 Query the group the user belongs to
Each user belongs to a group, the default is Group In this group, we can obtain the user's group information through the API, that is, obtain the ID of the user group.
/// <summary> /// 查询用户所在分组 /// </summary> /// <param name="accessToken">调用接口凭证</param> /// <param name="openid">用户的OpenID</param> /// <returns></returns> public int GetUserGroupId(string accessToken, string openid) { string url = string.Format("http://www.php.cn/{0}", accessToken); var data = new { openid = openid }; string postData = data.ToJson(); int groupId = -1; GroupIdJsonResult result = JsonHelper<GroupIdJsonResult>.ConvertJson(url, postData); if (result != null) { groupId = result.groupid; } return groupId; }
2.4 Modify the group name
You can also adjust the group the user is in in practice. The operation code is as follows .
/// <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("http://www.php.cn/{0}", accessToken); var data = new { group = new { id = id, name = name } }; string postData = data.ToJson(); return Helper.GetExecuteResult(url, postData); }
The return value CommonResult here is an entity class that contains a bool flag of success or failure, and an error message of String type (if any talk).
For the GetExecuteResult function body, it is mainly a function that submits data, then obtains the results, and processes them based on the results.
/// <summary> /// 通用的操作结果 /// </summary> /// <param name="url">网页地址</param> /// <param name="postData">提交的数据内容</param> /// <returns></returns> public static CommonResult GetExecuteResult(string url, string postData = null) { CommonResult success = new CommonResult(); try { ErrorJsonResult result; if (postData != null) { result = JsonHelper<ErrorJsonResult>.ConvertJson(url, postData); } else { result = JsonHelper<ErrorJsonResult>.ConvertJson(url); } if (result != null) { success.Success = (result.errcode == ReturnCode.请求成功); success.ErrorMessage = result.errmsg; } } catch (WeixinException ex) { success.ErrorMessage = ex.Message; } return success; } }
The meaning of the red part above is that when converting to an entity class, if the error is defined in WeChat, then the error message will be recorded. I will not record other exceptions. Process (i.e. throw out).
2.5 Move the user to a new group
The operation of moving the user to a new group is similar to the above section, please see the code for details.
/// <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("http://www.php.cn/{0}", accessToken); var data = new { openid = openid, to_groupid = to_groupid }; string postData = data.ToJson(); return Helper.GetExecuteResult(url, postData); }
The above section defines and implements various types of user grouping Interface, all user-related code has been posted without reservation, and its calling operation is shown in the following code (test code).
private void btnGetGroupList_Click(object sender, EventArgs e) { IUserApi userBLL = new UserApi(); List<GroupJson> list = userBLL.GetGroupList(token); foreach (GroupJson info in list) { string tips = string.Format("{0}:{1}", info.name, info.id); Console.WriteLine(tips); } } private void btnFindUserGroup_Click(object sender, EventArgs e) { IUserApi userBLL = new UserApi(); int groupId = userBLL.GetUserGroupId(token, openId); string tips = string.Format("GroupId:{0}", groupId); Console.WriteLine(tips); } private void btnCreateGroup_Click(object sender, EventArgs e) { IUserApi userBLL = new UserApi(); GroupJson info = userBLL.CreateGroup(token, "创建测试分组"); if (info != null) { string tips = string.Format("GroupId:{0} GroupName:{1}", info.id, info.name); Console.WriteLine(tips); string newName = "创建测试修改"; CommonResult result = userBLL.UpdateGroupName(token, info.id, newName); Console.WriteLine("修改分组名称:" + (result.Success ? "成功" : "失败:" + result.ErrorMessage)); } } private void btnUpdateGroup_Click(object sender, EventArgs e) { int groupId = 111; string newName = "创建测试修改"; IUserApi userBLL = new UserApi(); CommonResult result = userBLL.UpdateGroupName(token, groupId, newName); Console.WriteLine("修改分组名称:" + (result.Success ? "成功" : "失败:" + result.ErrorMessage)); } private void btnMoveToGroup_Click(object sender, EventArgs e) { int togroup_id = 111;//输入分组ID if (togroup_id > 0) { IUserApi userBLL = new UserApi(); CommonResult result = userBLL.MoveUserToGroup(token, openId, togroup_id); Console.WriteLine("移动用户分组名称:" + (result.Success ? "成功" : "失败:" + result.ErrorMessage)); } }
After understanding the above code and calling rules, we can manage user group information through the API. By integrating relevant interface code in the application, we can have good control over our following user list and user group information. This will lay a solid foundation for our next push of user information.
For more C# development of WeChat portals and applications (5)--User group information management, please pay attention to the PHP Chinese website for related articles!