在上個月的對C#開發(fā)微信門戶及應(yīng)用做了介紹,寫過了幾篇的隨筆進行分享,由于時間關(guān)系,間隔了一段時間沒有繼續(xù)寫這個系列的博客了,并不是對這個方面停止了研究,而是繼續(xù)深入探索這方面的技術(shù),為了更好的應(yīng)用起來,專心做好底層的技術(shù)開發(fā)。本篇繼續(xù)上一篇的介紹,主要介紹分組管理方面的開發(fā)應(yīng)用,這篇的內(nèi)容和上一篇,作為一個完整的用戶信息和分組信息管理的組合。
用戶分組的引入,主要是方便管理關(guān)注者列表,以及方便向不同的組別發(fā)送消息的操作的,一個公眾賬號,最多支持創(chuàng)建500個分組。
用戶分組管理,包含下面幾個方面的內(nèi)容:
1 創(chuàng)建分組2 查詢所有分組3 查詢用戶所在分組4 修改分組名5 移動用戶分組
微信對于創(chuàng)建分組的定義如下所示。
http請求方式: POST(請使用https協(xié)議)https://api.weixin.QQ.com/cgi-bin/groups/create?access_token=ACCESS_TOKENPOST數(shù)據(jù)格式:jsonPOST數(shù)據(jù)例子:{"group":{"name":"test"}}
正常返回的結(jié)果如下所示。
{ "group": { "id": 107, "name": "test" }}其他接口,也是類似的方式,通過POST一些參數(shù)進去URL里面,獲取返回的Json數(shù)據(jù)。
前面隨筆定義了GroupJson的實體類信息如下所示。
/// <summary> /// 分組信息 /// </summary> public class GroupJson : BaseJsonResult { /// <summary> /// 分組id,由微信分配 /// </summary> public int id { get; set; } /// <summary> /// 分組名字,UTF8編碼 /// </summary> public string name { get; set; } }根據(jù)以上幾個接口的定義,我定義了幾個接口,并把它們歸納到用戶管理的API接口里面。
/// <summary> /// 查詢所有分組 /// </summary> /// <param name="accessToken">調(diào)用接口憑證</param> /// <returns></returns> List<GroupJson> GetGroupList(string accessToken); /// <summary> /// 創(chuàng)建分組 /// </summary> /// <param name="accessToken">調(diào)用接口憑證</param> /// <param name="name">分組名稱</param> /// <returns></returns> GroupJson CreateGroup(string accessToken, string name); /// <summary> /// 查詢用戶所在分組 /// </summary> /// <param name="accessToken">調(diào)用接口憑證</param> /// <param name="openid">用戶的OpenID</param> /// <returns></returns> int GetUserGroupId(string accessToken, string openid); /// <summary> /// 修改分組名 /// </summary> /// <param name="accessToken">調(diào)用接口憑證</param> /// <param name="id">分組id,由微信分配</param> /// <param name="name">分組名字(30個字符以內(nèi))</param> /// <returns></returns> CommonResult UpdateGroupName(string accessToken, int id, string name); /// <summary> /// 移動用戶分組 /// </summary> /// <param name="accessToken">調(diào)用接口憑證</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 創(chuàng)建用戶分組
為了解析如何實現(xiàn)創(chuàng)建用戶分組的POST數(shù)據(jù)操作,我們來一步步了解創(chuàng)建用戶的具體過程。
首先需要創(chuàng)建一個動態(tài)定義的實體類信息,它包含幾個需要提及的屬性,如下所示。
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 = data.ToJson();其中我們把對象轉(zhuǎn)換為合適的Json數(shù)據(jù)操作,放到了擴展方法ToJson里面了,這個主要就是方便把動態(tài)定義的實體類轉(zhuǎn)換Json內(nèi)容,主要就是調(diào)用Json.NET的序列號操作。
/// <summary> /// 把對象為json字符串 /// </summary> /// <param name="obj">待序列號對象</param> /// <returns></returns> public static string ToJson(this object obj) { return JsonConvert.SerializeObject(obj, Formatting.Indented); } 準(zhǔn)備好Post的數(shù)據(jù)后,我們就進一步看看獲取數(shù)據(jù)并轉(zhuǎn)換為合適格式的操作代碼。
GroupJson group = null; CreateGrouPResult result = JsonHelper<CreateGroupResult>.ConvertJson(url, postData); if (result != null) { group = result.group; }
其中POST數(shù)據(jù)并轉(zhuǎn)換為合適格式實體類的操作,放在了ConvertJson方法里面,這個方法的定義如下所示,里面的HttpHelper是我公用類庫的輔助類,主要就是調(diào)用底層的httpWebRequest對象方法,進行數(shù)據(jù)的提交,并獲取返回結(jié)果。
/// <summary> /// 轉(zhuǎn)換Json字符串到具體的對象 /// </summary> /// <param name="url">返回Json數(shù)據(jù)的鏈接地址</param> /// <param name="postData">POST提交的數(shù)據(jù)</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; }這樣,完整的創(chuàng)建用戶分組的操作函數(shù)如下所示。
/// <summary> /// 創(chuàng)建分組 /// </summary> /// <param name="accessToken">調(diào)用接口憑證</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 = data.ToJson(); GroupJson group = null; CreateGroupResult result = JsonHelper<CreateGroupResult>.ConvertJson(url, postData); if (result != null) { group = result.group; } return group; }2.2 查詢所有分組
查詢所有分組,可以把服務(wù)器上的分組全部獲取下來,也就是每個分組的ID和名稱。
/// <summary> /// 查詢所有分組 /// </summary> /// <param name="accessToken">調(diào)用接口憑證</param> /// <returns></returns> public List<GroupJson> GetGroupList(string accessToken) { string url = string.Format("https://api.weixin.qq.com/cgi-bin/groups/get?access_token={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 查詢用戶所在分組
每個用戶都屬于一個分組,默認(rèn)在 未分組 這個分組里面,我們可以通過API獲取用戶的分組信息,也就是獲取所在用戶分組的ID。
/// <summary> /// 查詢用戶所在分組 /// </summary> /// <param name="accessToken">調(diào)用接口憑證</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 = data.ToJson(); int groupId = -1; GroupIdJsonResult result = JsonHelper<GroupIdJsonResult>.ConvertJson(url, postData); if (result != null) { groupId = result.groupid; } return groupId; }2.4 修改分組名稱
也可以在實際中,調(diào)整用戶所在的分組,操作代碼如下。
/// <summary> /// 修改分組名 /// </summary> /// <param name="accessToken">調(diào)用接口憑證</param> /// <param name="id">分組id,由微信分配</param> /// <param name="name">分組名字(30個字符以內(nèi))</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 } };
新聞熱點
疑難解答