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;
                        }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM