前面幾篇陸續介紹了許多微信企業號的相關操作,企業號和公眾號一樣都可以自訂選單,因此他們也可以透過API進行選單的建立、取得清單、刪除的操作,因此本篇繼續探討這個主體,介紹企業號的選單管理操作。
選單在許多情況下,能夠提供我們一個快速入口,也可以用來獲取用戶資訊的主要入口,透過OAuth2驗證接口,以及自訂的重定向選單,我們就可以取得對應的用戶ID,然後進一步取得到用戶的相關數據,可以顯示給客戶。
選單的事件處理如下所示,包括了點擊和跳到兩個動作,未來企業號可能會增加一些和公眾號一樣的掃碼操作,拍照操作等功能的,目前只有兩個。
官方的選單定義介麵包含了以下三種操作,選單建立、清單取得和選單刪除,這點和公眾號操作幾乎一樣了。
我們定義選單,包括定義它的一些屬性,包含有name, type, key,url,以及一個指向自身引用的子菜單引用,因此菜單就可以循環構造多個層次,雖然嚴格意義上來講,企業號的菜單和公眾號菜單一樣,一級三個,二級最多五個,而且沒有三級菜單了。
實體類別的UML圖示如下所示。
選單管理的建立操作,官方定義如下所示。
請求說明
Https要求方式: POST
https://qyapi.weixin.qq.com/cgi -bin/menu/create?access_token=ACCESS_TOKEN&agentid=1
#請求包如下:
{ "button":[ { "type":"click", "name":"今日歌曲", "key":"V1001_TODAY_MUSIC" }, { "name":"菜单", "sub_button":[ { "type":"view", "name":"搜索", "url":"http://www.soso.com/" }, { "type":"click", "name":"赞一下我们", "key":"V1001_GOOD" } ] } ] }
參數說明
##參數 | 必須 | 說明 |
#access_token | ##是呼叫介面憑證 | |
是 | #企業應用程式的id,整數型。可在套用的設定頁面查看 | |
是 | 一級選單數組,個數應為1~3個 | |
否 | 二級選單數組,個數應為1~5個 | |
是 | 選單的回應動作類型,目前有click、view兩種類型 | |
是 | 選單標題,不超過16個位元組,子選單不超過40個位元組 |
權限說明
管理員須擁有應用程式的管理權限,並且應用程式必須設定在回調模式。
傳回結果
{ "errcode":0, "errmsg":"ok" }
根據上述官方的定義語義,我們選單管理的C#管理介面定義如下所示。
/// <summary> /// 企业号菜单管理接口定义 /// </summary> public interface ICorpMenuApi { /// <summary> /// 获取菜单数据 /// </summary> /// <param name="accessToken">调用接口凭证</param> /// <returns></returns> MenuListJson GetMenu(string accessToken, string agentid); /// <summary> /// 创建菜单 /// </summary> /// <param name="accessToken">调用接口凭证</param> /// <param name="menuJson">菜单对象</param> /// <returns></returns> CommonResult CreateMenu(string accessToken, MenuListJson menuJson, string agentid); /// <summary> /// 删除菜单 /// </summary> /// <param name="accessToken">调用接口凭证</param> /// <returns></returns> CommonResult DeleteMenu(string accessToken, string agentid); }
我們以創建選單的實作為例來介紹微信企業號選單的操作,其他的操作類似處理,都是回傳一個公共的訊息類,方便處理和讀取,程式碼如下所示。
/// <summary> /// 创建菜单 /// </summary> /// <param name="accessToken">调用接口凭证</param> /// <param name="menuJson">菜单对象</param> /// <returns></returns> public CommonResult CreateMenu(string accessToken, MenuListJson menuJson, string agentid) { var url = string.Format("http://www.php.cn/{0}&agentid={1}", accessToken, agentid); string postData = menuJson.ToJson(); return Helper.GetCorpExecuteResult(url, postData); }3、企業號選單管理介面的呼叫與處理效果
呼叫的程式碼和效果圖如下所示。
private void btnMenuCreate_Click(object sender, EventArgs e) { MenuJson productInfo = new MenuJson("产品介绍", new MenuJson[] { new MenuJson("软件产品介绍", ButtonType.click, "event-software") , new MenuJson("框架源码产品", ButtonType.click, "event-source") , new MenuJson("软件定制开发", ButtonType.click, "event-develop") }); MenuJson frameworkInfo = new MenuJson("框架产品", new MenuJson[] { new MenuJson("Win开发框架", ButtonType.click, "win"), new MenuJson("WCF开发框架", ButtonType.click, "wcf"), new MenuJson("混合式框架", ButtonType.click, "mix"), new MenuJson("Web开发框架", ButtonType.click, "web") ,new MenuJson("代码生成工具", ButtonType.click, "database2sharp") }); MenuJson relatedInfo = new MenuJson("相关链接", new MenuJson[] { new MenuJson("公司介绍", ButtonType.click, "event_company"), new MenuJson("官方网站", ButtonType.view, "http://www.php.cn/"), new MenuJson("联系我们", ButtonType.click, "event_contact"), new MenuJson("应答系统", ButtonType.click, "set-1"), new MenuJson("发邮件", ButtonType.view, "http://www.php.cn/") }); MenuListJson menuJson = new MenuListJson(); menuJson.button.AddRange(new MenuJson[] { productInfo, frameworkInfo, relatedInfo }); //Console.WriteLine(menuJson.ToJson()); if (MessageUtil.ShowYesNoAndWarning("您确认要创建菜单吗") == System.Windows.Forms.DialogResult.Yes) { ICorpMenuApi bll = new CorpMenuApi(); CommonResult result = bll.CreateMenu(token, menuJson, agentid); Console.WriteLine("创建菜单:" + (result.Success ? "成功" : "失败:" + result.ErrorMessage)); } } private void btnMenuGet_Click(object sender, EventArgs e) { ICorpMenuApi bll = new CorpMenuApi(); MenuListJson menu = bll.GetMenu(token, agentid); if (menu != null) { Console.WriteLine(menu.ToJson()); } }#########呼叫程式碼的測試輸出如下所示。 ############### ################更多C#開發微信入口網站及應用微信企業號的選單管理 相關文章請追蹤PHP中文網! ###