如何添加微信自定義菜單
登錄微信公眾平臺的管理界面,點擊左邊的菜單中的“自定義菜單”,可以進行自定義菜單的基本配置。
如果已啟用服務器配置的話,就不能在公眾平臺管理界面進行自定義菜單,而需要調用微信提供的接口進行自定義菜單的開發。
開啟和停止服務器配置在左邊菜單中的開發→基本配置中可以找到。如果停止,用戶可以自定義菜單,且向客戶端推送消息,但不能接收客戶端的請求。如果啟用,必須由開發者調用API接口對自定義菜單進行開發,可以向客戶端推送消息,也可以接收客戶端的請求,對請求進行處理並相應(即被動回復消息)。
自定義菜單的API是微信提供的高級接口,必須經過微信認證才可以調用。個人訂閱號無法進行微信認證,只有企業/組織訂閱號才可以進行微信認證。微信認證需每年向騰訊繳納300元費用。
自定義菜單實質上是一個JSON字符串,如下所示
{ "button":[ { "type":"click", "name":"今日歌曲", "key":"V1001_TODAY_MUSIC" }, { "name":"菜單", "sub_button":[ { "type":"view", "name":"搜索", "url":"http://www.soso.com/" }, { "type":"miniprogram", "name":"wxa", "url":"http://mp.weixin.qq.com", "appid":"wx286b93c14bbf93aa", "pagepath":"pages/lunar/index" }, { "type":"click", "name":"贊一下我們", "key":"V1001_GOOD" }] }] }
其中的type指的是按鈕的類型,有多種類型的按鈕,此例中為click和view。更多類型按鈕的說明請查看開發文檔。
接口調用使用POST方式,https協議:
https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
ACCESS_TOKEN獲取方法如下:
1、在基本配置中查看開發者ID(AppID)和開發者密碼(AppSecret)。其中AppSecret具有極高的安全性,需要使用管理員賬號(而非第三方授權用戶)登錄,點擊重置後可看到AppSecret。
2、得到AppID和AppSecret後,還需要設置白名單,即可以獲取ACCESS_TOKEN值的IP地址,本機IP以微信提供的網站http://ip.qq.com/為準。
3、點擊開發→開發者工具,接口類型選擇基礎支持,接口列表選擇獲取access_token接口/token。輸入剛才獲取到的appid和secret。
4、點擊“檢查問題”,可以得到access_token的值,expires_in是過期時間
得到ACCESS_TOKEN後,訪問以下網址創建自定義菜單:
https://api.weixin.qq.com/cgibin/menu/create?access_token=zPTPP7eGoXtDQTYNlXsCODQhEgvJSDTFKfic7EJfdA_kNevPlW1lwcZXtfXXkonCzW0xagkD7jJ6qGAf7rBwGONw05-d17rso3QSlbmQS6yNBVbcgL1iaKnsMkBvbGgkJZWbAGAEUR
5、ACCESS_TOKEN存在有效期,expire_in為7200秒即2個小時,如果超過2小時將失效。因此如果想實現在網頁上點擊按鈕生成自定義菜單,應該通過代碼獲取ACCESS_TOKEN。
首先定義全局變量AppID和AppSecret
const string appid = "xxxxxxxxxxxxxxxxxx"; const string secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
獲取代碼如下:
/// <summary> /// 獲取access_token /// </summary> /// <param name="grant_type">填寫client_credential</param> /// <param name="appid">第三方用戶唯一憑證</param> /// <param name="secret">第三方用戶唯一憑證密鑰,即appsecret</param> /// <returns>access_token</returns> public string GetAccessToken(string grant_type,string appid , string secret) { string access_token = string.Empty; //接口格式:協議為https,請求方式為GET,需指定3個參數grant_type,appid和secret string tokenUrl = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type={0}&appid={1}&secret={2}", grant_type, appid, secret); WebClient wc = new WebClient(); string download_string = wc.DownloadString(tokenUrl); //獲取以上接口url調用的結果字符串,即包含access_token的JSON數據 //註意:由於.net 2.0不支持使用JavaScriptSerializer類反序列化,只能使用Newtonsoft.Json進行反序列化 object obj = JsonConvert.DeserializeObject(download_string); //使用Newtonsoft.Json反序列化JSON數據 /* 正確時的返回JSON數據包如下: { "access_token": "access_token的值", "expires_in": 7200 } 錯誤時返回的JSON數據包如下: { "errcode":錯誤代碼, "errmsg":"錯誤信息" } */ Newtonsoft.Json.Linq.JObject js = obj as Newtonsoft.Json.Linq.JObject; //獲得JObject //Newtonsoft.Json.Linq.JToken jt; //根據鍵獲取值 if (js["access_token"] != null) access_token = js["access_token"].ToString(); //如果正確返回,獲取access_token else access_token = js["errcode"].ToString() + ":" + js["errmsg"].ToString() ; //如果發生錯誤,獲取錯誤代碼及錯誤消息 /* 返回碼說明: -1:系統繁忙,此時請開發者稍候再試 0:請求成功 40001:AppSecret錯誤或者AppSecret不屬於這個公眾號,請開發者確認AppSecret的正確性 40002:請確保grant_type字段值為client_credential 40164:調用接口的IP地址不在白名單中,請在接口IP白名單中進行設置 */ return access_token; }
調用代碼:
GetAccessToken("client_credential", appid, secret);
如何添加微信自定義菜單