搜尋
首頁微信小程式微信開發C#開發微信入口網站及應用程式(5)--使用者分組資訊管理

在上個月的對C#開發微信門戶及應用做了介紹,寫過了幾篇的隨筆進行分享,由於時間關係,間隔了一段時間沒有繼續寫這個系列的博客了,並不是對這個方面停止了研究,而是繼續深入探索這方面的技術,為了更好的應用起來,專心做好底層的技術開發。本篇繼續上一篇的介紹,主要介紹分組管理方面的開發應用,這篇的內容和上一篇,作為一個完整的使用者資訊和分組資訊管理的組合。

1、用戶分組管理內容

用戶分組的引入,主要是方便管理追蹤者列表,以及方便向不同的組別發送訊息的操作的,一個公眾帳號,最多支援創建500個分組。

使用者分組管理,包含以下幾個面向的內容:

1 建立分組
2 查詢所有分組
3 查詢使用者所在分組
4 修改分組名稱
5 行動用戶分組

微信對於建立分組的定義如下所定義示。

http请求方式: POST(请使用https协议)
https://api.weixin.qq.com/cgi-bin/groups/create?access_token=ACCESS_TOKENPOST数据格式: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; }
    }

根據以上幾個接口的定義,我定義了幾個接口,並把它們歸納到用戶管理的API接口裡面。

        /// <summary>
        /// 查询所有分组        /// </summary>
        /// <param>调用接口凭证
        /// <returns></returns>
        List<groupjson> GetGroupList(string accessToken);                       
        /// <summary>
        /// 创建分组        /// </summary>
        /// <param>调用接口凭证
        /// <param>分组名称
        /// <returns></returns>
        GroupJson CreateGroup(string accessToken, string name);                        
        /// <summary>
        /// 查询用户所在分组        /// </summary>
        /// <param>调用接口凭证
        /// <param>用户的OpenID
        /// <returns></returns>
        int GetUserGroupId(string accessToken, string openid);        
        /// <summary>
        /// 修改分组名        /// </summary>
        /// <param>调用接口凭证
        /// <param>分组id,由微信分配
        /// <param>分组名字(30个字符以内)
        /// <returns></returns>
        CommonResult UpdateGroupName(string accessToken, int id, string name);                       
        /// <summary>
        /// 移动用户分组        /// </summary>
        /// <param>调用接口凭证
        /// <param>用户的OpenID
        /// <param>分组id
        /// <returns></returns>
        CommonResult MoveUserToGroup(string accessToken, string openid, int to_groupid);</groupjson>

 

2、用戶分組管理介面的實作

2.1 創建用戶分組

2.1 創建用戶分組

創建了資料。

首先需要建立一個動態定義的實體類別訊息,它包含幾個需要提及的屬性,如下所示。

            string url = string.Format("http://www.php.cn/{0}", accessToken);            var data = new
            {
                group = new
                {
                    name = name
                }
            };            string postData = data.ToJson();

其中我們把物件轉換為適當的Json資料操作,放到了擴充方法ToJson裡面了,這個主要就是方便把動態定義的實體類別轉換Json內容,主要就是呼叫Json.NET的序號操作。

        /// <summary>
        /// 把对象为json字符串        /// </summary>
        /// <param>待序列号对象
        /// <returns></returns>
        public static string ToJson(this object obj)
        {            return JsonConvert.SerializeObject(obj, Formatting.Indented);
        }

準備好Post的資料後,我們就進一步看看取得資料並轉換為適當格式的操作碼。

            GroupJson group = null;
            CreateGroupResult result = JsonHelper<creategroupresult>.ConvertJson(url, postData);            if (result != null)
            {
                group = result.group;
            }</creategroupresult>

其中POST資料並轉換為合適格式實體類別的操作,放在了ConvertJson方法裡面,這個方法的定義如下所示,裡面的HttpHelper是我公用類別庫的輔助類,主要就是調用底層的httpWebRequest物件方法,進行資料的提交,並取得回傳結果。

        /// <summary>
        /// 转换Json字符串到具体的对象        /// </summary>
        /// <param>返回Json数据的链接地址
        /// <param>POST提交的数据
        /// <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;
        }</t>

這樣,完整的建立使用者分組的操作函數如下所示。

        /// 
        /// 创建分组        /// 
        /// 调用接口凭证
        /// 分组名称
        /// 
        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.ConvertJson(url, postData);            if (result != null)
            {
                group = result.group;
            }            return group;
        }

2.2 查詢所有分組

查詢所有分組,可以把伺服器上的分組全部取得下來,也就是每個分組的ID和名稱。

        /// <summary>
        /// 查询所有分组        /// </summary>
        /// <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;
        }</grouplistjsonresult></groupjson></groupjson></groupjson>

2.3 查詢使用者所在分組

每個使用者都屬於一個分組,預設在

未分組

這個分組裡面,我們可以透過API取得使用者的分組資訊,也就是取得使用者分組的ID。

        /// <summary>
        /// 查询用户所在分组        /// </summary>
        /// <param>调用接口凭证
        /// <param>用户的OpenID
        /// <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;
        }</groupidjsonresult>

2.4 修改分組名稱

也可以在實際中,調整使用者所在的分組,操作代碼如下。

        /// <summary>
        /// 修改分组名        /// </summary>
        /// <param>调用接口凭证
        /// <param>分组id,由微信分配
        /// <param>分组名字(30个字符以内)
        /// <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);
        }

這裡的回傳值CommonResult是,一個實體類,包含了bool的成功與否的標誌,以及String類型的錯誤訊息(如果有的話)。

對於這個GetExecuteResult函數體,裡面主要就是提交數據,然後取得結果,並根據結果進行處理的函數。

        /// <summary>
        /// 通用的操作结果        /// </summary>
        /// <param>网页地址
        /// <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;
        }  
    }</errorjsonresult></errorjsonresult>
上面紅色部分的意思,就是轉換為實體類的時候,如果錯誤是微信裡面定義的,那麼記錄錯誤訊息,其他異常我不處理(也就是拋出去)。

2.5 行動用戶到新的分組

行動用戶到新的分組的操作和上面小節的差不多,具體看代碼。

        /// <summary>
        /// 移动用户分组        /// </summary>
        /// <param>调用接口凭证
        /// <param>用户的OpenID
        /// <param>分组id
        /// <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);
        }

 

3、用戶分組接口的調用

上面小節,定義並實現了用戶分組的各類接口,所有的用戶相關的都已經毫無保留貼出代碼,它的調用操作如下程式碼所示(測試程式碼)。

        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));
            }
        }</groupjson>
🎜🎜了解了上面的程式碼和呼叫規則,我們就能透過API進行使用者分組資訊的管理了。透過在應用程式中整合相關的介面程式碼,我們就能夠很好的控制我們的關注用戶列表和用戶分組資訊。從而為我們下一步用戶的訊息推送打好基礎。 🎜🎜更多C#開發微信入口網站及應用(5)--使用者分組資訊管理 相關文章請關注PHP中文網! 🎜
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境