微信公眾號,仿照企業號的思路,增加了標簽管理的功能,對關注的粉絲可以設置標簽管理,實現更加方便的分組管理功能。開發者可以使用用戶標簽管理的相關接口,實現對公眾號的標簽進行創建、查詢、修改、刪除等操作,也可以對用戶進行打標簽、取消標簽等操作。本篇隨筆主要介紹如何利用C#對公眾號這個較新的特性進行封裝,實現對標簽的管理功能。
1、標簽功能介紹
1)標簽功能替代分組功能,支持多維度定義用戶屬性
運營者可登錄公眾平台後台,點擊左側菜單“用戶管理”後管理已關注用戶,點擊其中一個用戶右側的“標簽”小角標可彈出復選框快速為該用戶添加標簽,且添加標簽復選框內已支持直接新建標簽。
另外,標簽功能接口也已更新,開發者可調用接口,實現對標簽和用戶操作。同時,高級群發接口和個性化菜單接口等已支持根據標簽實現操作。
2)優化用戶卡片,支持多場景查看用戶頭像大圖與互動數據,增強運營者對用戶熟悉度與管理效率
本期新增消息數、留言數和贊賞數等互動數據,且顯示用戶關注時間和支持查看用戶頭像大圖,有利於拉近運營者與用戶的距離。另外, 支持“贊賞功能”和“留言管理”場景直接管理用戶,提升管理效率。
2、標簽的接口封裝
標簽的接口分為兩部分:標簽管理和用戶管理,一個公眾號,最多可以創建100個標簽。標簽功能目前支持公眾號為用戶打上最多三個標簽。
其中標簽管理包括:
1) 創建標簽 2)獲取公眾號已創建的標簽 3)編輯標簽 4)刪除標簽 5)獲取標簽下粉絲列表
標簽的用戶管理包括:
1)批量為用戶打標簽 2)批量為用戶取消標簽 3)獲取用戶身上的標簽列表
下面分別為幾種接口封裝進行相關的介紹。
首先按照常規的方式 ,我們定義好相關的接口和實現關系,如下圖所示。
根據相關的接口說明,我們可以實現標簽接口的定義,C#代碼如下所示。
/// <summary>
/// 微信標簽管理的API接口
/// 開發者可以使用用戶標簽管理的相關接口,實現對公眾號的標簽進行創建、查詢、修改、刪除等操作,也可以對用戶進行打標簽、取消標簽等操作。
/// </summary>
public
interface
ITagApi
{
/// <summary>
/// 創建標簽
/// 一個公眾號,最多可以創建100個標簽。
/// </summary>
/// <param name="AccessToken">調用接口憑證</param>
/// <param name="name">標簽名(30個字符以內)</param>
/// <returns></returns>
TagJSon CreateTag(
string
AccessToken,
string
name);
/// <summary>
/// 獲取公眾號已創建的標簽
/// </summary>
/// <param name="AccessToken">調用接口憑證</param>
/// <returns></returns>
List<TagCountJSon> GetTagList(
string
AccessToken);
/// <summary>
/// 編輯標簽
/// </summary>
/// <param name="AccessToken">調用接口憑證</param>
/// <param name="id">標簽ID</param>
/// <param name="name">標簽名稱</param>
/// <returns></returns>
CommonResult UpdateTag(
string
AccessToken,
int
id,
string
name);
/// <summary>
/// 刪除標簽
/// </summary>
/// <param name="AccessToken">調用接口憑證</param>
/// <param name="id">標簽ID</param>
/// <returns></returns>
CommonResult DeleteTag(
string
AccessToken,
int
id);
/// <summary>
/// 獲取標簽下粉絲列表
/// </summary>
/// <param name="AccessToken">調用接口憑證</param>
/// <param name="id">標簽ID</param>
/// <param name="name">標簽名稱</param>
/// <returns></returns>
GetTagResult GetTag(
string
AccessToken,
int
id,
string
next_openid =
null
);
/// <summary>
/// 批量為用戶打標簽
/// 標簽功能目前支持公眾號為用戶打上最多三個標簽。
/// </summary>
/// <param name="AccessToken">調用接口憑證</param>
/// <param name="tagid">標簽ID</param>
/// <param name="openid_list">粉絲列表</param>
/// <returns></returns>
CommonResult BatchTagging(
string
AccessToken,
int
tagid, List<
string
> openid_list);
/// <summary>
/// 批量為用戶取消標簽
/// 標簽功能目前支持公眾號為用戶打上最多三個標簽。
/// </summary>
/// <param name="AccessToken">調用接口憑證</param>
/// <param name="tagid">標簽ID</param>
/// <param name="openid_list">粉絲列表</param>
/// <returns></returns>
CommonResult BatchUntagging(
string
AccessToken,
int
tagid, List<
string
> openid_list);
/// <summary>
/// 獲取用戶身上的標簽列表
/// </summary>
/// <param name="AccessToken">調用接口憑證</param>
/// <param name="openid">用戶OpenID</param>
/// <returns></returns>
List<
int
> GetIdList(
string
AccessToken,
string
openid);
}
具體我們來看看幾個接口的官方定義數據。
1)創建標簽的接口
接口調用請求說明
http請求方式:POST(請使用https協議)
https://api.weixin.QQ.com/CGI-bin/tags/create?access_token=Access_TOKEN
POST數據格式:JSON
POST數據例子:
? 1 2 3 4 5{
"tag"
: {
"name"
:
"廣東"
//標簽名
}
}
返回說明(正常時返回的JSon數據包示例)
? 1 2 3 4 5 6{
"tag"
:{
"id"
:134,
//標簽id
"name"
:
"廣東"
}
}
這樣我們就可以定義一個實體類來承載這個返回的數據了。
/// <summary>
/// 標簽信息
/// </summary>
public
class
TagJSon
{
/// <summary>
/// 標簽id,由微信分配
/// </summary>
public
int
id {
get
;
set
; }
/// <summary>
/// 標簽名,UTF8編碼
/// </summary>
public
string
name {
get
;
set
; }
}
這樣,創建標簽的完整實現代碼如下所示
/// <summary>
/// 創建標簽
/// 一個公眾號,最多可以創建100個標簽。
/// </summary>
/// <param name="AccessToken">調用接口憑證</param>
/// <param name="name">標簽名(30個字符以內)</param>
/// <returns></returns>
public
TagJSon CreateTag(
string
AccessToken,
string
name)
{
var url =
string
.Format(
"https://api.weixin.QQ.com/CGI-bin/tags/create?Access_token={0}"
, AccessToken);
var data =
new
{
tag =
new
{
name = name
}
};
var postData = data.ToJSon();
var result = JsonHelper<TagCreateResult>.ConvertJSon(url, postData);
return
result !=
null
? result.tag :
null
;
}
2)獲取公眾號已創建的標簽
接口調用請求說明
http請求方式:GET(請使用https協議)
https://api.weixin.QQ.com/CGI-bin/tags/get?access_token=Access_TOKEN
返回數據格式:JSON返回的數據例子:
{
"tags"
:[{
"id"
:1,
"name"
:
"黑名單"
,
"count"
:0
//此標簽下粉絲數
},{
"id"
:2,
"name"
:
"星標組"
,
"count"
:0
},{
"id"
:127,
"name"
:
"廣東"
,
"count"
:5
}
]
}
這樣我們就可以定義其返回值為List<TagCountJson>了,其中TagCountJSon為對應類的屬性即可。
/// <summary>
/// 標簽信息和統計數量
/// </summary>
public
class
TagCountJson : TagJSon
{
/// <summary>
/// 此標簽下粉絲數
/// </summary>
public
int
count {
get
;
set
; }
}
這樣我們就可以通過JSON的解析返回對應的數據了,相關操作和上面的接口類似,不在贅述。