zoukankan      html  css  js  c++  java
  • 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;
                            }

  • 相关阅读:
    使<div>做的层不随滚动条的移动而移动
    datagrid 实现 表头水平可以移动 垂直固定
    csapp 、sicp 、深入理解计算机系统、 计算机程序的构造和解释
    window.open使用
    C#进程管理
    asx根据时间点播放
    Ext GrdPanel多种取值方式
    System.ComponentModel.Win32Exception: 拒绝访问
    播放器Object使用
    M3U文件格式
  • 原文地址:https://www.cnblogs.com/shaojiang/p/4914369.html
Copyright © 2011-2022 走看看