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("0") && jsonObj["errmsg"].ToString().Equals("ok"))
                           {

                               int num = wugs.UpdateWeChat_UserLabelGroupInfoByLableId(Request.QueryString["labelId"].ToString(), this.txt_LabelName.Value.ToString().Trim());

                               if (num > 0)
                               {
                                   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 = "0";


                               int num = wugs.AddWeChat_UserLabelGroupInfo(wulgInfo2);

                               if (num > 0)
                               {
                                   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("0") || lbId.Text.ToString().Equals("1") || lbId.Text.ToString().Equals("2"))
                        {
                            ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "", "alert('系统默认标签!无法删除!');", true);
                            return;
                        }

原文地址:https://www.cnblogs.com/shaojiang/p/4914369.html