前言:html
微信公衆號提供了用戶和用戶組的管理,咱們能夠在微信公衆號官方里面進行操做,添加備註和標籤,以及移動用戶組別,同時,微信公衆號提供了相應的接口方便咱們調用,可方便的把用戶同步到本地,這樣咱們能夠本身爲用戶定義更多的信息,以及與本地的業務更好的對接起來。以方便作各類應用分析。因此本節內容主要是用戶和用戶組的管理。git
開始:github
1、用戶關注與退訂事件:數據庫
在以前的消息處理中,咱們在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; }
2、設計數據庫ide
根據微信公衆號開發文檔,用戶管理對應字段而創建,基本與官方提供的用戶信息是同樣的網站
創建用戶組管理表(WX_Group)和用戶表(WX_User)url
3、提交同步數據spa
接口的實現方式咱們使用了開源的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.參考官網示例源代碼