微信公众号开发:用户管理
程序员文章站
2022-06-19 16:44:39
前言: 微信公众号提供了用户和用户组的管理,我们可以在微信公众号官方里面进行操作,添加备注和标签,以及移动用户组别,同时,微信公众号提供了相应的接口方便我们调用,可方便的把用户同步到本地,这样我们可以自己为用户定义更多的信息,以及与本地的业务更好的对接起来。以方便做各种应用分析。所以本节内容主要是用 ......
前言:
微信公众号提供了用户和用户组的管理,我们可以在微信公众号官方里面进行操作,添加备注和标签,以及移动用户组别,同时,微信公众号提供了相应的接口方便我们调用,可方便的把用户同步到本地,这样我们可以自己为用户定义更多的信息,以及与本地的业务更好的对接起来。以方便做各种应用分析。所以本节内容主要是用户和用户组的管理。
开始:
一、用户关注与退订事件:
在之前的中,我们在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.参考官网示例源代码
上一篇: 养家之人的婚姻
下一篇: PS入门:详细讲解"自动颜色"