微信公眾號開發:用戶管理


前言

  微信公眾號提供了用戶和用戶組的管理,我們可以在微信公眾號官方里面進行操作,添加備注和標簽,以及移動用戶組別,同時,微信公眾號提供了相應的接口方便我們調用,可方便的把用戶同步到本地,這樣我們可以自己為用戶定義更多的信息,以及與本地的業務更好的對接起來。以方便做各種應用分析。所以本節內容主要是用戶和用戶組的管理。

開始

一、用戶關注與退訂事件

  在之前的消息處理中,我們在UserMessageHandler.cs,需要繼承Senparc.Weixin.MP.MessageHandlers<TC>這個抽象類,並重寫所有方法,在這里面,我們可以添加2個事件,一個是用戶關注時候觸發事件,一個是退訂時候觸發事件

        public override IResponseMessageBase OnEvent_ScanRequest(RequestMessageEvent_Scan requestMessage)
        {
            //通過掃描關注
            var responseMessage = CreateResponseMessage<ResponseMessageText>();
            responseMessage.Content = responseMessage.Content ?? string.Format("通過掃描二維碼進入,場景值:{0}", requestMessage.EventKey);
            return responseMessage;
        }

        /// <summary>
        /// 訂閱(關注)事件
        /// </summary>
        /// <returns></returns>
        public override IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage)
        {
            var responseMessage = base.CreateResponseMessage<ResponseMessageText>();
            responseMessage.Content = "歡迎關注";
            return responseMessage;
        }

        /// <summary>
        /// 退訂
        /// 實際上用戶無法收到非訂閱賬號的消息,所以這里可以隨便寫。
        /// unsubscribe事件的意義在於及時刪除網站應用中已經記錄的OpenID綁定,消除冗余數據。並且關注用戶流失的情況。
        /// </summary>
        /// <returns></returns>
        public override IResponseMessageBase OnEvent_UnsubscribeRequest(RequestMessageEvent_Unsubscribe requestMessage)
        {
            var responseMessage = base.CreateResponseMessage<ResponseMessageText>();
            responseMessage.Content = "有空再來";
            return responseMessage;
        }

二、設計數據庫

  根據微信公眾號開發文檔,用戶管理對應字段而建立,基本與官方提供的用戶信息是一樣的

  建立用戶組管理表(WX_Group)和用戶表(WX_User)

      

 

三、提交同步數據

  接口的實現方式我們使用了開源的Senparc.Weixin提供的專業的微信操作SDK來快速完成操作,在Senparc WX SDK下的Senparc.Weixin.MP.AdvancedAPIs ,通過OpenID到公眾號同步到數據,再將本地數據修改。

        /// <summary>
        /// 同步數據
        /// </summary>
        /// <param name="id">用戶id</param>
        /// <param name="officeId">對應的公眾號id</param>
        /// <returns></returns>
        [HttpPost]
        [SupportFilter]
        public JsonResult SyncUser(string id,string officeId)
        {
            if (!string.IsNullOrWhiteSpace(id))
            {
                //填充數據
                string[] arrs = id.Split(',');
                List<BatchGetUserInfoData> list = new List<BatchGetUserInfoData>();
                foreach (var m in arrs)
                {
                    list.Add(new BatchGetUserInfoData() {
                        openid = m,
                        lang = "zh-CN",
                        LangEnum = Senparc.Weixin.Language.zh_CN
                    });
                }

                //批量同步數據
                WC_OfficalAccountsModel accountModel =  account_BLL.GetById(officeId);
                var batchList =  Senparc.Weixin.MP.AdvancedAPIs.UserApi.BatchGetUserInfo(accountModel.AccessToken, list);
                foreach (var info in batchList.user_info_list)
                {
                    WC_UserModel userModel = m_BLL.GetById(info.openid);
                    if (userModel != null)
                    {
                        userModel.City = info.city;
                        userModel.OpenId = info.openid;
                        userModel.Id = info.openid;
                        userModel.HeadImgUrl = info.headimgurl;
                        userModel.Language = info.language;
                        userModel.NickName = info.nickname;
                        userModel.Province = info.province;
                        userModel.Sex = info.sex;
                        m_BLL.Edit(ref errors, userModel);
                    }
                }

                LogHandler.WriteServiceLog(GetUserId(), "Ids:" + id, "成功", "刪除", "WX_User");
                return Json(JsonHandler.CreateMessage(1, Resource.SaveSucceed));
            }
            else
            {
                return Json(JsonHandler.CreateMessage(0, Resource.SaveFail));
            }
        }

  通過以上方式,將用戶和分組的方式同步提交,實現用戶的分組。

總結

  1.實現用戶的分組,能更好的對關注者進行管理和分析業務應用

  2.使用了開源的Senparc.Weixin,可以快速的實現分組和同步數據

  3.參考官網示例源代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM