①接口說明:
微信服務號聊天窗口下面的菜單項(有的公眾號有啟用有的則沒有),這個可以在編輯模式簡單配置,也可以在開發模式代碼配置。微信公眾平台開發者文檔:微信公眾號開發平台創建自定義菜單,可以看到創建菜單的一些注意事項,下面的使用網頁調試工具調試該接口,只是調試接口是否可以正常調用,並不是直接創建菜單,根據微信自定義菜單管理文檔菜單事件可分為兩種:
click: 用戶點擊click類型按鈕後,微信服務器會通過消息接口推送消息類型為event 的結構給開發者(參考消息接口指南),並且帶上按鈕中開發者填寫的key值,開發者可以通過自定義的key值與用戶進行交互。
view: 用戶點擊view類型按鈕後,微信客戶端將會打開開發者在按鈕中填寫的url值 (即網頁鏈接),達到打開網頁的目的,建議與網頁授權獲取用戶基本信息接口結合,獲得用戶的登入個人信息。
設置菜單JSON格式(可根據需要進行修改):
{
"button":[
{
"type":"click",
"name":"今日歌曲",
"key":"V1001_TODAY_MUSIC"
},
{
"name":"菜單",
"sub_button":[
{
"type":"view",
"name":"搜索",
"url":"http://www.soso.com/"
},
{
"type":"view",
"name":"視頻",
"url":"http://v.qq.com/"
},
{
"type":"click",
"name":"贊一下我們",
"key":"V1001_GOOD"
}]
}]
}
配置菜單的注意點:
1、自定義菜單最多包括3個一級菜單,每個一級菜單最多包含5個二級菜單。
2、一級菜單最多4個漢字,二級菜單最多7個漢字,多出來的部分將會以“...”代替。
3、創建自定義菜單後,由於微信客戶端緩存,需要24小時微信客戶端才會展現出來。測試時可以嘗試取消關注公眾賬號後再次關注,則可以看到創建後的效果。
接口參數配置:

②請求接口:
接口調用請求說明:
http請求方式:POST(請使用https協議)
https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
POST請求接口調用接口憑據ACCESS_TOKEN的獲取方式可參見文檔(獲取ACCESS_TOKEN文檔)使用POST方式帶上ACCESS_TOKEN以及菜單JSON請求接口,具體實現代碼如下:
1 /// <summary>
2 /// 創建菜單事件
3 /// </summary>
4 /// <param name="sender"></param>
5 /// <param name="e"></param>
6 protected void creayeMenu_Click(object sender, EventArgs e)
7 {
8 FileStream fs1 = new FileStream(Server.MapPath("~/") + "\\menuInfo.txt", FileMode.Open);
9 StreamReader sr = new StreamReader(fs1, Encoding.GetEncoding("GBK"));
10 string menu = sr.ReadToEnd();
11 sr.Close();
12 fs1.Close();
13 CreateMenu("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN", menu);
14 }
1 /// <summary>
2 /// 創建公眾號菜單
3 /// </summary>
4 /// <param name="posturl">URL</param>
5 /// <param name="postData">菜單JSON數據</param>
6 /// <returns></returns>
7 public void CreateMenu(string posturl, string postData)
8 {
9 Stream outstream = null;
10 Stream instream = null;
11 StreamReader sr = null;
12 HttpWebResponse response = null;
13 HttpWebRequest request = null;
14 Encoding encoding = Encoding.UTF8;
15 byte[] data = encoding.GetBytes(postData);
16
17 request = WebRequest.Create(posturl) as HttpWebRequest;
18 CookieContainer cookieContainer = new CookieContainer();
19 request.CookieContainer = cookieContainer;
20 request.AllowAutoRedirect = true;
21 request.Method = "POST";
22 request.ContentType = "application/x-www-form-urlencoded";
23 request.ContentLength = data.Length;
24 outstream = request.GetRequestStream();
25 outstream.Write(data, 0, data.Length);
26 outstream.Close();
27 response = request.GetResponse() as HttpWebResponse;
28 instream = response.GetResponseStream();
29 sr = new StreamReader(instream, encoding);
30 string content = sr.ReadToEnd();
31 Context.Response.Write(content);
32 }
接口返回結果:
正確時返回的JSON數據包格式如下:
{"errcode":0,"errmsg":"ok"}
錯誤時的返回JSON數據包如下(示例為無效菜單名長度):
{"errcode":40018,"errmsg":"invalid button name size"}