在上個月的對C#開發(fā)微信門戶及應(yīng)用做了介紹,寫過了幾篇的隨筆進行分享,由於時間關(guān)係,間隔了一段時間沒有繼續(xù)寫這個系列的博客了,並不是對這個方面停止了研究,而是繼續(xù)深入探索這方面的技術(shù),為了更好的應(yīng)用起來,專心做好底層的技術(shù)開發(fā)。本篇繼續(xù)上一篇的介紹,主要介紹分組管理方面的開發(fā)應(yīng)用,這篇的內(nèi)容和上一篇,作為一個完整的使用者資訊和分組資訊管理的組合。
1、用戶分組管理內(nèi)容
用戶分組的引入,主要是方便管理追蹤者列表,以及方便向不同的組別發(fā)送訊息的操作的,一個公眾帳號,最多支援創(chuàng)建500個分組。
使用者分組管理,包含以下幾個面向的內(nèi)容:
1 建立分組
2 查詢所有分組
3 查詢使用者所在分組
4 修改分組名稱
5 行動用戶分組
微信對於建立分組的定義如下所定義示。
http請求方式:?POST(請使用https協(xié)議) https://api.weixin.qq.com/cgi-bin/groups/create?access_token=ACCESS_TOKENPOST數(shù)據(jù)格式:json POST數(shù)據(jù)例子:{"group":{"name":"test"}}
正?;貍鞯慕Y(jié)果如下圖所示。
{????"group":?{????????"id":?107,? ????????"name":?"test" ????} }
其他接口,也是類似的方式,透過POST一些參數(shù)進去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;?} ????}
根據(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、用戶分組管理介面的實作
2.1 創(chuàng)建用戶分組
2.1 創(chuàng)建用戶分組
創(chuàng)建了資料。 首先需要建立一個動態(tài)定義的實體類別訊息,它包含幾個需要提及的屬性,如下所示。????????????string?url?=?string.Format("http://ipnx.cn/{0}",?accessToken);????????????var?data?=?new ????????????{ ????????????????group?=?new ????????????????{ ????????????????????name?=?name ????????????????} ????????????};????????????string?postData?=?data.ToJson();其中我們把物件轉(zhuǎn)換為適當(dāng)?shù)腏son資料操作,放到了擴充方法ToJson裡面了,這個主要就是方便把動態(tài)定義的實體類別轉(zhuǎn)換Json內(nèi)容,主要就是呼叫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的資料後,我們就進一步看看取得資料並轉(zhuǎn)換為適當(dāng)格式的操作碼。
????????????GroupJson?group?=?null; ????????????CreateGroupResult?result?=?JsonHelper<CreateGroupResult>.ConvertJson(url,?postData);????????????if?(result?!=?null) ????????????{ ????????????????group?=?result.group; ????????????}其中POST資料並轉(zhuǎn)換為合適格式實體類別的操作,放在了ConvertJson方法裡面,這個方法的定義如下所示,裡面的HttpHelper是我公用類別庫的輔助類,主要就是調(diào)用底層的httpWebRequest物件方法,進行資料的提交,並取得回傳結(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; ????????}這樣,完整的建立使用者分組的操作函數(shù)如下所示。
????????///?????????///?創(chuàng)建分組????????///? ????????///?調(diào)用接口憑證 ????????///?分組名稱 ????????///?????????public?GroupJson?CreateGroup(string?accessToken,?string?name) ????????{????????????string?url?=?string.Format("http://ipnx.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 查詢所有分組
查詢所有分組,可以把伺服器上的分組全部取得下來,也就是每個分組的ID和名稱。
????????///?<summary> ????????///?查詢所有分組????????///?</summary> ????????///?<param name="accessToken">調(diào)用接口憑證</param> ????????///?<returns></returns> ????????public?List<GroupJson>?GetGroupList(string?accessToken) ????????{????????????string?url?=?string.Format("http://ipnx.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 查詢使用者所在分組
每個使用者都屬於一個分組,預(yù)設(shè)在未分組
這個分組裡面,我們可以透過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("http://ipnx.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 修改分組名稱
也可以在實際中,調(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("http://ipnx.cn/{0}",?accessToken);????????????var?data?=?new ????????????{ ????????????????group?=?new ????????????????{ ????????????????????id?=?id, ????????????????????name?=?name ????????????????} ????????????};????????????string?postData?=?data.ToJson();????????????return?Helper.GetExecuteResult(url,?postData); ????????}這裡的回傳值CommonResult是,一個實體類,包含了bool的成功與否的標(biāo)誌,以及String類型的錯誤訊息(如果有的話)。 對於這個GetExecuteResult函數(shù)體,裡面主要就是提交數(shù)據(jù),然後取得結(jié)果,並根據(jù)結(jié)果進行處理的函數(shù)。
????????///?<summary> ????????///?通用的操作結(jié)果????????///?</summary> ????????///?<param name="url">網(wǎng)頁地址</param> ????????///?<param name="postData">提交的數(shù)據(jù)內(nèi)容</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; ????????}?? ????}上面紅色部分的意思,就是轉(zhuǎn)換為實體類的時候,如果錯誤是微信裡面定義的,那麼記錄錯誤訊息,其他異常我不處理(也就是拋出去)。
2.5 行動用戶到新的分組
行動用戶到新的分組的操作和上面小節(jié)的差不多,具體看代碼。????????///?<summary>
????????///?移動用戶分組????????///?</summary>
????????///?<param name="accessToken">調(diào)用接口憑證</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://ipnx.cn/{0}",?accessToken);????????????var?data?=?new
????????????{
????????????????openid?=?openid,
????????????????to_groupid?=?to_groupid
????????????};????????????string?postData?=?data.ToJson();????????????return?Helper.GetExecuteResult(url,?postData);
????????}
?3、用戶分組接口的調(diào)用上面小節(jié),定義並實現(xiàn)了用戶分組的各類接口,所有的用戶相關(guān)的都已經(jīng)毫無保留貼出代碼,它的調(diào)用操作如下程式碼所示(測試程式碼)。
????????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,?"創(chuàng)建測試分組");????????????if?(info?!=?null) ????????????{????????????????string?tips?=?string.Format("GroupId:{0}?GroupName:{1}",?info.id,?info.name); ????????????????Console.WriteLine(tips);????????????????string?newName?=?"創(chuàng)建測試修改"; ????????????????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?=?"創(chuàng)建測試修改"; ????????????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)); ????????????} ????????}????了解了上面的程式碼和呼叫規(guī)則,我們就能透過API進行使用者分組資訊的管理了。透過在應(yīng)用程式中整合相關(guān)的介面程式碼,我們就能夠很好的控制我們的關(guān)注用戶列表和用戶分組資訊。從而為我們下一步用戶的訊息推送打好基礎(chǔ)。 ????更多C#開發(fā)微信入口網(wǎng)站及應(yīng)用(5)--使用者分組資訊管理?相關(guān)文章請關(guān)注PHP中文網(wǎng)! ??

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)