前言:
自定義菜單能夠幫助公衆號豐富界面,讓用戶更好更快地理解公衆號的功能。
目前菜單創建的權限只有服務號或者是通過認證過的賬號。未認證的訂閱號暫不支持自定義
自定義菜單的賬號樣子如圖:
【題外話】
這是我申請的測試號,裏面有所有的接口權限,怎麼申請看下圖
自定義菜單基本介紹:
目前自定義菜單最多包括3個一級菜單,每個一級菜單最多包含5個二級菜單。一級菜單最多4個漢字,二級菜單最多7個漢字,多出來的部分將會以“...”代替。請注意,創建自定義菜單後,由於微信客戶端緩存,需要24小時微信客戶端纔會展現出來。建議測試時可以嘗試取消關注公衆賬號後再次關注,則可以看到創建後的效果。
目前自定義菜單接口可實現兩種類型按鈕,如下:
click:
用戶點擊click類型按鈕後,微信服務器會通過消息接口推送消息類型爲event 的結構給開發者(參考消息接口指南),並且帶上按鈕中開發者填寫的key值,開發者可以通過自定義的key值與用戶進行交互;
view:
用戶點擊view類型按鈕後,微信客戶端將會打開開發者在按鈕中填寫的url值 (即網頁鏈接),達到打開網頁的目的,建議與網頁授權獲取用戶基本信息接口結合,獲得用戶的登入個人信息。
接口調用請求說明
http請求方式:POST(請使用https協議) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
自定義菜單的請求是一個json格式的請求內容
官網的請求示例
{
"button":[
{
"type":"click",
"name":"今日歌曲",
"key":"V1001_TODAY_MUSIC"
},
{
"type":"click",
"name":"歌手簡介",
"key":"V1001_TODAY_SINGER"
},
{
"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"
}]
}]
}
參數說明
返回結果
正確時的返回JSON數據包如下:
{"errcode":0,"errmsg":"ok"}
錯誤時的返回JSON數據包如下(示例爲無效菜單名長度):
{"errcode":40018,"errmsg":"invalid button name size"}
通過json格式創建菜單
package com.ifp.weixin.biz.core.impl;
import net.sf.json.JSONObject;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
import com.ifp.weixin.biz.core.MenuService;
import com.ifp.weixin.util.WeixinUtil;
@Service("menuService")
public class MenuServiceImpl implements MenuService {
public static Logger log = Logger.getLogger(MenuServiceImpl.class);
// 菜單創建(POST) 限100(次/天)
public static String MENU_CREATE = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
@Override
public String CreateMenu(String jsonMenu) {
String resultStr = "";
// 調用接口獲取token
String token = WeixinUtil.getToken();
if (token != null) {
// 調用接口創建菜單
int result = createMenu(jsonMenu, token);
// 判斷菜單創建結果
if (0 == result) {
resultStr = "菜單創建成功";
log.info(resultStr);
} else {
resultStr = "菜單創建失敗,錯誤碼:" + result;
log.error(resultStr);
}
}
return resultStr;
}
/**
* 創建菜單
*
* @param jsonMenu
* 菜單的json格式
* @param accessToken
* 有效的access_token
* @return 0表示成功,其他值表示失敗
*/
public static int createMenu(String jsonMenu, String accessToken) {
int result = 0;
// 拼裝創建菜單的url
String url = MENU_CREATE.replace("ACCESS_TOKEN", accessToken);
// 調用接口創建菜單
JSONObject jsonObject = WeixinUtil.httpRequest(url, "POST", jsonMenu);
if (null != jsonObject) {
if (0 != jsonObject.getInt("errcode")) {
result = jsonObject.getInt("errcode");
log.error("創建菜單失敗 errcode:" + jsonObject.getInt("errcode")
+ ",errmsg:" + jsonObject.getString("errmsg"));
}
}
return result;
}
public static void main(String[] args) {
// 這是一個符合菜單的json格式,“\”是轉義符
String jsonMenu = "{\"button\":[{\"name\":\"生活助手\",\"sub_button\":[{\"key\":\"11\",\"name\":\"天氣預報\",\"type\":\"click\"},{\"key\":\"12\",\"name\":\"公交查詢\",\"type\":\"click\"}]},{\"name\":\"音智達\",\"sub_button\":[{\"key\":\"21\",\"name\":\"好東西哦\",\"type\":\"click\"},{\"key\":\"22\",\"name\":\"人臉識別\",\"type\":\"click\"}]},{\"name\":\"更多體驗\",\"sub_button\":[{\"key\":\"33\",\"name\":\"幽默笑話\",\"type\":\"click\"},{\"name\":\"View類型的\",\"type\":\"view\",\"url\":\"http://m.baidu.com\"}]}]}";
MenuServiceImpl impl = new MenuServiceImpl();
impl.CreateMenu(jsonMenu);
}
}
ok,運行main方法後,菜單就創建好了,
由於微信會緩存菜單24小時,建議先取消關注,再關注,菜單就會顯示出來了。
(ps:也可以建立菜單實體類,再由實體類轉換成json,也可以實現創建菜單,
我直接用json,是因爲第一:簡單,第二:我會開發後臺管理系統,要在後臺管理菜單,傳json方便)
可加我的微信公衆號一起討論
轉載請註明出處:http://blog.csdn.net/tuposky/article/details/40589321