企业微信的菜单管理
自從微信企業(yè)號升級到企業(yè)微信后,一些API接口和處理方式有所變化,企業(yè)微信支持更多、更豐富的接口,本篇在改造企業(yè)微信過程中對相關(guān)內(nèi)容的更新進行記錄,希望大家對企業(yè)微信的各個方面有所了解。本篇基于對企業(yè)微信菜單的管理進行介紹,包括介紹企業(yè)微信菜單涉及的幾個重要參數(shù),以及后臺統(tǒng)一處理公眾號和企業(yè)微信菜單的處理。
1、菜單管理接口
關(guān)于企業(yè)微信的前身企業(yè)號菜單的管理,在之前隨筆有所介紹《C#開發(fā)微信門戶及應(yīng)用(20)-微信企業(yè)號的菜單管理》,基本上企業(yè)微信的接口沒有太大變化,不過原先的企業(yè)號僅僅支持Click和View兩種菜單類型,企業(yè)微信則拓展了更多的類型支持,詳細的企業(yè)微信菜單接口,可以參考官方鏈接地址:https://work.weixin.qq.com/api/doc,菜單支持類型如下介紹所示。
自定義菜單接口可實現(xiàn)多種類型按鈕,如下:
| 字段值 | 功能名稱 | 說明 |
|---|---|---|
| click | 點擊推事件 | 成員點擊click類型按鈕后,企業(yè)微信服務(wù)器會通過消息接口推送消息類型為event 的結(jié)構(gòu)給開發(fā)者(參考消息接口指南),并且?guī)习粹o中開發(fā)者填寫的key值,開發(fā)者可以通過自定義的key值與成員進行交互; |
| view | 跳轉(zhuǎn)URL | 成員點擊view類型按鈕后,企業(yè)微信客戶端將會打開開發(fā)者在按鈕中填寫的網(wǎng)頁URL,可與網(wǎng)頁授權(quán)獲取成員基本信息接口結(jié)合,獲得成員基本信息。 |
| scancode_push | 掃碼推事件 | 成員點擊按鈕后,企業(yè)微信客戶端將調(diào)起掃一掃工具,完成掃碼操作后顯示掃描結(jié)果(如果是URL,將進入URL),且會將掃碼的結(jié)果傳給開發(fā)者,開發(fā)者可用于下發(fā)消息。 |
| scancode_waitmsg | 掃碼推事件 且彈出“消息接收中”提示框 | 成員點擊按鈕后,企業(yè)微信客戶端將調(diào)起掃一掃工具,完成掃碼操作后,將掃碼的結(jié)果傳給開發(fā)者,同時收起掃一掃工具,然后彈出“消息接收中”提示框,隨后可能會收到開發(fā)者下發(fā)的消息。 |
| pic_sysphoto | 彈出系統(tǒng)拍照發(fā)圖 | 彈出系統(tǒng)拍照發(fā)圖 成員點擊按鈕后,企業(yè)微信客戶端將調(diào)起系統(tǒng)相機,完成拍照操作后,會將拍攝的相片發(fā)送給開發(fā)者,并推送事件給開發(fā)者,同時收起系統(tǒng)相機,隨后可能會收到開發(fā)者下發(fā)的消息。 |
| pic_photo_or_album | 彈出拍照或者相冊發(fā)圖 | 成員點擊按鈕后,企業(yè)微信客戶端將彈出選擇器供成員選擇“拍照”或者“從手機相冊選擇”。成員選擇后即走其他兩種流程。 |
| pic_weixin | 彈出企業(yè)微信相冊發(fā)圖器 | 成員點擊按鈕后,企業(yè)微信客戶端將調(diào)起企業(yè)微信相冊,完成選擇操作后,將選擇的相片發(fā)送給開發(fā)者的服務(wù)器,并推送事件給開發(fā)者,同時收起相冊,隨后可能會收到開發(fā)者下發(fā)的消息。 |
| location_select | 彈出地理位置選擇器 | 成員點擊按鈕后,企業(yè)微信客戶端將調(diào)起地理位置選擇工具,完成選擇操作后,將選擇的地理位置發(fā)送給開發(fā)者的服務(wù)器,同時收起位置選擇工具,隨后可能會收到開發(fā)者下發(fā)的消息。 |
目前菜單的接口也依舊是原先的幾個接口,包括獲取菜單、創(chuàng)建菜單、刪除菜單三個接口。
由于菜單模塊處理,在企業(yè)微信、公眾號、小程序等應(yīng)用上,他們的JSON數(shù)據(jù)結(jié)構(gòu)信息是完全一樣的,不同的是提交各自的接口地址而已,因此菜單模塊的實體類信息是公用的,定義的實體類信息如下所示。
/// <summary>
/// 菜單基本信息(公眾號、企業(yè)微信公用)
/// </summary>
public class MenuJson : BaseJsonResult
{
/// <summary>
/// 菜單的名字。不能為空,主菜單不能超過16字節(jié),子菜單不能超過40字節(jié)。
/// </summary>
public string name { get; set; }
/// <summary>
/// 按鈕類型(click,view,scancode_push,scancode_waitmsg,pic_sysphoto,pic_photo_or_album,pic_weixin,location_select)
/// </summary>
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string type { get; set; }
/// <summary>
/// 菜單KEY值,用于消息接口推送,不超過128字節(jié)
/// </summary>
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string key { get; set; }
/// <summary>
/// 網(wǎng)頁鏈接,成員點擊菜單可打開鏈接,不超過1024字節(jié)。為了提高安全性,建議使用https的url
/// </summary>
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string url { get; set; }
/// <summary>
/// media_id類型和view_limited類型必須,調(diào)用新增永久素材接口返回的合法media_id
/// </summary>
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string media_id { get; set; }
/// <summary>
/// 子按鈕數(shù)組,按鈕個數(shù)應(yīng)為2~5個
/// </summary>
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public List<MenuJson> sub_button { get; set; }
/// <summary>
/// 默認構(gòu)造函數(shù)
/// </summary>
public MenuJson() { }
/// <summary>
/// 參數(shù)化構(gòu)造函數(shù),用于構(gòu)造子菜單
/// </summary>
/// <param name="name">按鈕名稱</param>
/// <param name="sub_button">子菜單集合</param>
public MenuJson(string name, IEnumerable<MenuJson> sub_button)
{
this.name = name;
this.sub_button = new List<MenuJson>();
this.sub_button.AddRange(sub_button);
}
/// <summary>
/// 參數(shù)化構(gòu)造函數(shù)
/// </summary>
/// <param name="name">按鈕名稱</param>
/// <param name="buttonType">菜單按鈕類型</param>
/// <param name="value">按鈕的鍵值(Click),或者連接URL(View)</param>
public MenuJson(string name, ButtonType buttonType, string value)
{
this.name = name;
this.type = buttonType.ToString();
if (buttonType == ButtonType.view)
{
this.url = value;
}
else
{
this.key = value;
}
}
}
例如企業(yè)微信創(chuàng)建菜單的接口如下所示。
/// <summary>
/// 創(chuàng)建菜單
/// </summary>
/// <param name="accessToken">調(diào)用接口憑證</param>
/// <param name="menuJson">菜單對象</param>
/// <returns></returns>
public CommonResult CreateMenu(string accessToken, MenuListJson menuJson, string agentid)
{
var url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/menu/create?access_token={0}&agentid={1}", accessToken, agentid);
string postData = menuJson.ToJson();
return Helper.GetExecuteResult(url, postData);
}
2、企業(yè)微信菜單處理
企業(yè)微信和公眾號(或者小程序)菜單創(chuàng)建的接口參數(shù)有所不同,企業(yè)微信增加了一個AgentId的參數(shù),因為企業(yè)微信可以創(chuàng)建多個應(yīng)用,一個AgentId代表其中一個應(yīng)用的標(biāo)識。
要使用API來創(chuàng)建菜單,幾個地方的設(shè)置參數(shù)是比較重要的,如下所示。
分別是應(yīng)用的AgentId、應(yīng)用的Secret(相當(dāng)于AppSecret)、以及創(chuàng)建JS-SDK的可信域名為自己服務(wù)器的域名。AppID則在企業(yè)微信的入口查看企業(yè)ID就是。
而這些我們可以在自己的微信后臺賬號管理進行配置即可,如下是我們企業(yè)微信后臺的配置參數(shù)管理。
由于企業(yè)微信、公眾號微信的菜單信息結(jié)構(gòu)一致,那么我們在平臺維護菜單信息的時候,也可以做到統(tǒng)一處理了。
如下是創(chuàng)建菜單的事件后臺代碼。
/// <summary>
///更新微信菜單(公眾號、企業(yè)微信公用)
/// </summary>
/// <returns></returns>
public ActionResult UpdateWeChatMenu(string accountId)
{
CommonResult result = new CommonResult();
AccountInfo info = BLLFactory<Account>.Instance.FindByID(accountId);
if (info != null)
{
//獲取微信的訪問令牌Access_token
AccessTokenInfo token = base.GetAccessToken(accountId);
//獲取微信菜單信息
MenuListJson menuJson = GetWeixinMenu(accountId);
if (info.AccountType == "企業(yè)微信")
{
//用企業(yè)接口提交
ICorpMenuApi menuApi = new CorpMenuApi();
result = menuApi.CreateMenu(token.AccessToken, menuJson, info.AgentId);
}
else
{
//用公眾號接口提交
IMenuApi menuApi = new MenuApi();
result = menuApi.CreateMenu(token.AccessToken, menuJson);
}
}
return ToJsonContent(result);
}
提交成功后,我們就可以在企業(yè)微信的工作臺上看到對應(yīng)企業(yè)微信的菜單了。
總結(jié)
- 上一篇: DeepFaceLab: 可视化交互式合
- 下一篇: 云智物联,边筑算新——第三届云边协同大会