asp.net微信开发第五篇----用户分组管理
本篇于2017-5-11日更新,微信官方把用户分组管理称为标签,标签的分类如下,和分组一样,0,1,2是微信的默认标签ID,不可更改和删除
主要功能如下:新建标签(新建分组),删除标签(删除分组),编辑标签(编辑分组),同步官方数据(新增),不管是新增,编辑,删除和同步,都需要先调用微信接口操作成功后,再更新或保存到本地,如果你想偷懒本地数据不想频繁操作也可以,新建或编辑和删除后,点击再同步一次数据,也是一样的。
完整效果图如下:
本项目所用框架基于:layUI,官网:https://www.layui.com/

用户标签管理
开发者可以使用用户标签管理的相关接口,实现对公众号的标签进行创建、查询、修改、删除等操作,也可以对用户进行打标签、取消标签等操作。
标签管理
1. 创建标签
一个公众号,最多可以创建100个标签。
接口调用请求说明
|
http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/tags/create?access_token=ACCESS_TOKEN POST数据格式:JSON POST数据例子: { "tag" : { "name" : "广东"//标签名 } } |
参数说明
| 参数 | 说明 |
| access_token | 调用接口凭据 |
| name | 标签名(30个字符以内) |
返回说明(正常时返回的json数据包示例)
| {
"tag":{ "id":134,//标签id "name":"广东" } } |
返回参数说明
| 参数 | 说明 |
| id | 标签id,由微信分配 |
| name | 标签名,UTF8编码 |
错误码说明
| 错误码 | 说明 |
| -1 | 系统繁忙 |
| 45157 | 标签名非法,请注意不能和其他标签重名 |
| 45158 | 标签名长度超过30个字节 |
| 45056 | 创建的标签数过多,请注意不能超过100个 |
2. 获取公众号已创建的标签
接口调用请求说明
|
http请求方式:GET(请使用https协议) https://api.weixin.qq.com/cgi-bin/tags/get?access_token=ACCESS_TOKEN |
返回说明
|
{ "tags":[{ "id":1, "name":"每天一罐可乐星人", "count":0 //此标签下粉丝数 },{ "id":2, "name":"星标组", "count":0 },{ "id":127, "name":"广东", "count":5 } ] } |
3. 编辑标签
接口调用请求说明
|
http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/tags/update?access_token=ACCESS_TOKEN POST数据格式:JSON POST数据例子: { "tag" : { "id" : 134, "name" : "广东人" } } |
返回说明
|
{ "errcode":0, "errmsg":"ok" } |
错误码说明
| 错误码 | 说明 |
| -1 | 系统繁忙 |
| 45157 | 标签名非法,请注意不能和其他标签重名 |
| 45158 | 标签名长度超过30个字节 |
| 45058 | 不能修改0/1/2这三个系统默认保留的标签 |
4. 删除标签
请注意,当某个标签下的粉丝超过10w时,后台不可直接删除标签。此时,开发者可以对该标签下的openid列表,先进行取消标签的操作,直到粉丝数不超过10w后,才可直接删除该标签。
接口调用请求说明
| http请求方式:POST(请使用https协议)
https://api.weixin.qq.com/cgi-bin/tags/delete?access_token=ACCESS_TOKEN POST数据格式:JSON POST数据例子: { "tag":{ "id" : 134 } } |
返回说明
|
{ "errcode":0, "errmsg":"ok" } |
错误码说明
| 错误码 | 说明 |
| -1 | 系统繁忙 |
| 45058 | 不能修改0/1/2这三个系统默认保留的标签 |
| 45057 | 该标签下粉丝数超过10w,不允许直接删除 |
5. 获取标签下粉丝列表
接口调用请求说明
|
http请求方式:GET(请使用https协议) https://api.weixin.qq.com/cgi-bin/user/tag/get?access_token=ACCESS_TOKEN POST数据格式:JSON POST数据例子: { "tagid" : 134, "next_openid":""//第一个拉取的OPENID,不填默认从头开始拉取 } |
返回说明(正常时返回的json包示例)
|
{ "count":2,//这次获取的粉丝数量 "data":{//粉丝列表 "openid":[ "ocYxcuAEy30bX0NXmGn4ypqx3tI0", "ocYxcuBt0mRugKZ7tGAHPnUaOW7Y" ] }, "next_openid":"ocYxcuBt0mRugKZ7tGAHPnUaOW7Y"//拉取列表最后一个用户的openid } |
错误码说明
| 错误码 | 说明 |
| -1 | 系统繁忙 |
| 40003 | 传入非法的openid |
| 45159 | 非法的tag_id |
用户管理
标签功能目前支持公众号为用户打上最多20个标签。
1. 批量为用户打标签
接口调用请求说明
|
http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/tags/members/batchtagging?access_token=ACCESS_TOKEN POST数据格式:JSON POST数据例子: { "openid_list" : [//粉丝列表 "ocYxcuAEy30bX0NXmGn4ypqx3tI0", "ocYxcuBt0mRugKZ7tGAHPnUaOW7Y" ], "tagid" : 134 } |
返回说明(正常时返回的json包示例)
|
{ "errcode":0, "errmsg":"ok" } |
错误码说明
| 错误码 | 说明 |
| -1 | 系统繁忙 |
| 40032 | 每次传入的openid列表个数不能超过50个 |
| 45159 | 非法的标签 |
| 45059 | 有粉丝身上的标签数已经超过限制,即超过20个 |
| 40003 | 传入非法的openid |
| 49003 | 传入的openid不属于此AppID |
2. 批量为用户取消标签
接口调用请求说明
|
http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/tags/members/batchuntagging?access_token=ACCESS_TOKEN POST数据格式:JSON POST数据例子: { "openid_list" : [//粉丝列表 "ocYxcuAEy30bX0NXmGn4ypqx3tI0", "ocYxcuBt0mRugKZ7tGAHPnUaOW7Y" ], "tagid" : 134 } |
返回说明(正常时返回的json包示例)
|
{ "errcode":0, "errmsg":"ok" } |
错误码说明
| 错误码 | 说明 |
| -1 | 系统繁忙 |
| 40032 | 每次传入的openid列表个数不能超过50个 |
| 45159 | 非法的标签 |
| 40003 | 传入非法的openid |
| 49003 | 传入的openid不属于此AppID |
3. 获取用户身上的标签列表
接口调用请求说明
|
http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/tags/getidlist?access_token=ACCESS_TOKEN POST数据格式:JSON POST数据例子: { "openid" : "ocYxcuBt0mRugKZ7tGAHPnUaOW7Y" } |
返回说明(正常情况下返回的json示例)
| {
"tagid_list":[//被置上的标签列表 134, 2 ] } |
错误码说明
| 错误码 | 说明 |
| -1 | 系统繁忙 |
| 40003 | 传入非法的openid |
| 49003 | 传入的openid不属于此AppID |
一、同步官网数据的实现思路: 1.新建实体类,用于保存标签的每个属性,例如:labelID(标签ID),labelName(标签名),fansNumber(粉丝数)
2.从微信服务器获取已创建好的标签列表,保存到本地,保存前先删除原有本地已保存的标签数据
3.本地页面加载数据时,是从本地数据库加载的,不和微信打交道,只有点击了同步数据按钮,从重复的从微信服务器获取已创建好的标签列表,保存到本地,保存前先删除原有本地已保存的标签数据 我的实体类是这样:
/// <summary>
/// 微信用户标签组实体类
/// </summary>
public class WeChat_UserLabelGroupInfo
{
/// <summary>
/// 编号,自增列
/// </summary>
public int Id { get; set; } /// <summary>
/// 微信标签ID
/// </summary>
public string labelId { get; set; } /// <summary>
/// 微信标签名
/// </summary>
public string lableName { get; set; } /// <summary>
/// 微信标签名下的粉丝数
/// </summary>
public string fansNumber { get; set; } }
二、新增标签、编辑标签。这两个功能是重用一个页面完成的,实现思路如下: 1.新增:非空验证(必做),查找本地数据库中是否存在相同的标签名,如果没有就发送新的数据到微信服务器
2.获取到微信的返回码之后,如果正常将新的数据进行本地化存储
3.编辑:和新增一样,页面加载的时候获取labelId是否为null
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
if (Request.QueryString["labelId"] != null)
{
WeChat_UserLabelGroupService wugs = new WeChat_UserLabelGroupService();
WeChat_UserLabelGroupInfo wulgInfo = wugs.GetWeChat_UserLabelGroupInfoByLabelId(Request.QueryString["labelId"].ToString().Trim());
if(wulgInfo!=null)
{
this.txt_LabelName.Value = wulgInfo.lableName.ToString();
}
}
}
}
保存代码如下:
if (Request.QueryString["labelId"] != null)
{
//执行更新标签 string posturl = "https://api.weixin.qq.com/cgi-bin/tags/update?access_token=" + Access_tokento; //POST数据格式:JSON
string postData = "{\"tag\":{\"id\":\"" + Request.QueryString["labelId"].ToString().Trim() + "\",\"name\":\"" + this.txt_LabelName.Value.ToString().Trim() + "\"}}"; res = wxs.GetPage(posturl, postData); //使用前需要引用Newtonsoft.json.dll文件
JObject jsonObj = JObject.Parse(res); if (jsonObj["errcode"].ToString().Equals("") && jsonObj["errmsg"].ToString().Equals("ok"))
{ int num = wugs.UpdateWeChat_UserLabelGroupInfoByLableId(Request.QueryString["labelId"].ToString(), this.txt_LabelName.Value.ToString().Trim()); if (num > )
{
logHelper.CreateXml(SessionUserInfo.UserName.ToString(), "编辑了"+Request.QueryString["labelId"].ToString()+"标签组名.");
ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('编辑成功!');", true);
return;
}
else
{
ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('编辑失败!');", true);
return;
} } }
else
{
//执行新增标签 string posturl = "https://api.weixin.qq.com/cgi-bin/tags/create?access_token=" + Access_tokento; //string postData = "{\"group\":{\"name\":\""+this.txtgroupsName.Value.ToString().Trim()+"\"}}"; string postData = "{\"tag\":{\"name\":\"" + this.txt_LabelName.Value.ToString().Trim() + "\"}}"; res = wxs.GetPage(posturl, postData); //使用前需要引用Newtonsoft.json.dll文件
JObject jsonObj = JObject.Parse(res); if (jsonObj.ToString().Contains("id") && jsonObj.ToString().Contains("name"))
{
WeChat_UserLabelGroupInfo wulgInfo2 = new WeChat_UserLabelGroupInfo(); wulgInfo2.labelId = jsonObj["tag"]["id"].ToString();
wulgInfo2.lableName = jsonObj["tag"]["name"].ToString();
wulgInfo2.fansNumber = ""; int num = wugs.AddWeChat_UserLabelGroupInfo(wulgInfo2); if (num > )
{
logHelper.CreateXml(SessionUserInfo.UserName.ToString(), "新建了一个标签组.");
ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('创建成功!');", true);
}
else
{
ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('创建失败!');", true);
return;
} }
}


删除标签:
if (lbId.Text.ToString().Equals("") || lbId.Text.ToString().Equals("") || lbId.Text.ToString().Equals(""))
{
ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('系统默认标签!无法删除!');", true);
return;
}

asp.net微信开发第五篇----用户分组管理的更多相关文章
- asp.net微信开发第三篇----自定义会话管理
和微信用户的沟通少不了,总觉得看起来微信官网后台管理中的会话回复消息有点呆板,所以我这里就自定义了一个会话管理功能,最终效果图如下: 因为我试使用富文本文件CKEDITOR来进行编写,你看到稳中可能会 ...
- asp.net微信开发第八篇----永久素材管理
除了3天就会失效的临时素材外,开发者有时需要永久保存一些素材,届时就可以通过本接口新增永久素材. 最近更新,永久图片素材新增后,将带有URL返回给开发者,开发者可以在腾讯系域名内使用(腾讯系域名外使用 ...
- asp.net微信开发第四篇----已关注用户管理
公众号可通过本接口来获取帐号的关注者列表,关注者列表由一串OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的)组成.一次拉取调用最多拉取10000个关注者的OpenID,可以通过 ...
- asp.net微信开发第七篇----高级群发(图文)
上一篇介绍了如何群发文本消息,本篇将介绍如何群发图文信息,上传图文信息所需的素材,界面如下: 我们先看从素材库中获取图文素材的代码,界面: 素材列表,我是使用的repeater控件, 前台代码如下: ...
- asp.net微信开发第六篇----高级群发(文本)
说到高级群发,微信的参考资料http://mp.weixin.qq.com/wiki/14/0c53fac3bdec3906aaa36987b91d64ea.html 首先我们先来讲解一下群发文本信息 ...
- asp.net微信开发第十篇----使用百度编辑器编辑图文消息,上传图片、微信视频
经过几天的资料收集,终于完成了该编辑器的图片上传,视频插入功能,视频插入功能主要借用了该编辑器的插入iframe功能,如原始插件图: 修改后的插件图如下(其中我隐藏掉了一些不需要使用的插件功能): 配 ...
- C#开发微信门户及应用(5)--用户分组信息管理
在上个月的对C#开发微信门户及应用做了介绍,写过了几篇的随笔进行分享,由于时间关系,间隔了一段时间没有继续写这个系列的博客了,并不是对这个方面停止了研究,而是继续深入探索这方面的技术,为了更好的应用起 ...
- (转)C#开发微信门户及应用(5)--用户分组信息管理
http://www.cnblogs.com/wuhuacong/p/3695351.html 在上个月的对C#开发微信门户及应用做了介绍,写过了几篇的随笔进行分享,由于时间关系,间隔了一段时间没有继 ...
- asp.net微信开发第二篇----消息应答
当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上. 请注意: 1.关于重试的消息排重,推荐使用msgid排重. 2.微信服务器在五秒内收不到响应会断掉连接 ...
随机推荐
- eclipse问题解决(maven插件link方式安装失败)
一.link方式安装eclipse的一款插件:maven (附:若不熟悉link方式,则进入此处:link方式安装eclipse插件) 其间,只弹出警告,大概意思是:部分内容,未经授权,谨慎使 ...
- javascript summary
Client Javascript HTML5: http://www.html5rocks.com/en/ Libraray: JQuery, JQuery Mobile, Zepto, MoolT ...
- Android 安装过程中的问题
Android 安装过程中的问题 上一篇我说到配置android环境,但是在具体的安装过程中,因为下载的软件或者方法不同,导致没有正确的结果,如果有一些错误的时候,可以试一试关闭eclipse软件, ...
- Delphi下的RTTI函数大全
http://ljz9425.blog.163.com/blog/static/369148572008111635253858/ Delphi下的RTTI(下) 2008-12-16 15:52:5 ...
- supesite 连 discuz 论坛记录
上一篇,网站supesite里 有 config.php 这里记录访问地址,到时候可以更改这里变更域名或者外网地址. 这里同样也是 下载discuz,解压,bbs 下的文件为有效的内容,放到supe ...
- bzoj1588 [HNOI2002]营业额统计(Treap)
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 11485 Solved: 4062[Submit][Sta ...
- 敏捷开发 and 敏捷测试
名词解释 agile: 敏捷的:灵活:敏捷开发. scrum: 扭打,混打:并列争球:参加并列争球. sprint: 冲刺,全速跑. backlog: 积压的工作:积压待办的事务. retrospe ...
- iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath(汇总)
iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath 首先分析有几种原因,以及相应的解决方法 1.UITableViewCell的userInterac ...
- Unity3D 画线插件 Vectrosity 画一个一直循环的正弦函数曲线
直接贴代码 public Material myMaterisl; float fx;//曲线最左边的X坐标 float fy;//曲线趋于直线时y轴坐标 float fyMax = 0f;//曲线最 ...
- LinearLayout增加divider分割线
在android3.0及后面的版本在LinearLayout里增加了个分割线 1 2 android:divider="@drawable/shape"<!--分割线图片-- ...