因?yàn)榻裉煨枰_(kāi)發(fā)微信,然后就從網(wǎng)上找了個(gè)示例:覺(jué)得還不錯(cuò)。原文鏈接如下:
http://blog.csdn.net/gf771115/article/details/16825447(基礎(chǔ)菜單)
http://blog.csdn.net/gf771115/article/details/16825447(自定義菜單)
公眾平臺(tái)API文檔中給出了自定義菜單的json結(jié)構(gòu)示例,我從中截取兩個(gè)菜單項(xiàng)的json代碼,一個(gè)是click類型,另一個(gè)是view類型,如下所示。
[html]view
plaincopy
{
"type":"click",
"name":"今日歌曲",
"key":"V1001_TODAY_MUSIC"
},
{
"type":"view",
"name":"歌手簡(jiǎn)介",
"url":"http://www.qq.com/"
}
從上面可以看出,兩種類型的菜單除了type值不同之外,屬性也有差別。click類型的菜單有key屬性,而view類型的菜單沒(méi)有key屬性,與之對(duì)應(yīng)的是url屬性。通過(guò)上一篇的學(xué)習(xí)我們知道,key值是用于判斷用戶點(diǎn)擊了哪個(gè)click類型的菜單項(xiàng)。而view類型的菜單沒(méi)有key屬性,目前無(wú)法在公眾賬號(hào)后臺(tái)判斷是否有用戶點(diǎn)擊了view類型的菜單項(xiàng),也就沒(méi)辦法知道哪個(gè)用戶點(diǎn)擊了view類型的菜單項(xiàng)。
建立view類型的菜單對(duì)象
View類型的菜單有3個(gè)屬性:type、name和url。在上一篇文章中,我們創(chuàng)建了菜單項(xiàng)的基類Button,Button類只有一個(gè)屬性name。View類型的菜單對(duì)象也需要繼承Button類,代碼如下:
[java]view
plaincopy
packageorg.liufeng.weixin.pojo;
/**
*?view類型的菜單
*
*?@author?liuyq
*?@date?2013-04-10
*/
publicclassViewButtonextendsButton?{
privateString?type;
privateString?url;
publicString?getType()?{
returntype;
}
publicvoidsetType(String?type)?{
this.type?=?type;
}
publicString?getUrl()?{
returnurl;
}
publicvoidsetUrl(String?url)?{
this.url?=?url;
}
}
創(chuàng)建帶view類型的菜單示例
我們對(duì)前一篇文章中給出的菜單創(chuàng)建代碼進(jìn)行調(diào)整,增加view類型的菜單項(xiàng),完整的菜單創(chuàng)建代碼如下:
[java]view
plaincopy
packageorg.liufeng.weixin.main;
importorg.liufeng.weixin.pojo.AccessToken;
importorg.liufeng.weixin.pojo.Button;
importorg.liufeng.weixin.pojo.CommonButton;
importorg.liufeng.weixin.pojo.ComplexButton;
importorg.liufeng.weixin.pojo.Menu;
importorg.liufeng.weixin.pojo.ViewButton;
importorg.liufeng.weixin.util.WeixinUtil;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
/**
*?菜單管理器類
*
*?@author?liufeng
*?@date?2013-08-08
*/
publicclassMenuManager?{
privatestaticLogger?log?=?LoggerFactory.getLogger(MenuManager.class);
publicstaticvoidmain(String[]?args)?{
//?第三方用戶唯一憑證
String?appId?="000000000000000000";
//?第三方用戶唯一憑證密鑰
String?appSecret?="00000000000000000000000000000000";
//?調(diào)用接口獲取access_token
AccessToken?at?=?WeixinUtil.getAccessToken(appId,?appSecret);
if(null!=?at)?{
//?調(diào)用接口創(chuàng)建菜單
intresult?=?WeixinUtil.createMenu(getMenu(),?at.getToken());
//?判斷菜單創(chuàng)建結(jié)果
if(0==?result)
log.info("菜單創(chuàng)建成功!");
else
log.info("菜單創(chuàng)建失敗,錯(cuò)誤碼:"+?result);
}
}
/**
*?組裝菜單數(shù)據(jù)
*
*?@return
*/
privatestaticMenu?getMenu()?{
CommonButton?btn11?=newCommonButton();
btn11.setName("天氣預(yù)報(bào)");
btn11.setType("click");
btn11.setKey("11");
CommonButton?btn12?=newCommonButton();
btn12.setName("公交查詢");
btn12.setType("click");
btn12.setKey("12");
CommonButton?btn13?=newCommonButton();
btn13.setName("周邊搜索");
btn13.setType("click");
btn13.setKey("13");
CommonButton?btn14?=newCommonButton();
btn14.setName("歷史上的今天");
btn14.setType("click");
btn14.setKey("14");
CommonButton?btn15?=newCommonButton();
btn15.setName("電影排行榜");
btn15.setType("click");
btn15.setKey("32");
CommonButton?btn21?=newCommonButton();
btn21.setName("歌曲點(diǎn)播");
btn21.setType("click");
btn21.setKey("21");
CommonButton?btn22?=newCommonButton();
btn22.setName("經(jīng)典游戲");
btn22.setType("click");
btn22.setKey("22");
CommonButton?btn23?=newCommonButton();
btn23.setName("美女電臺(tái)");
btn23.setType("click");
btn23.setKey("23");
CommonButton?btn24?=newCommonButton();
btn24.setName("人臉識(shí)別");
btn24.setType("click");
btn24.setKey("24");
CommonButton?btn25?=newCommonButton();
btn25.setName("聊天嘮嗑");
btn25.setType("click");
btn25.setKey("25");
CommonButton?btn31?=newCommonButton();
btn31.setName("Q友圈");
btn31.setType("click");
btn31.setKey("31");
CommonButton?btn33?=newCommonButton();
btn33.setName("幽默笑話");
btn33.setType("click");
btn33.setKey("33");
CommonButton?btn34?=newCommonButton();
btn34.setName("用戶反饋");
btn34.setType("click");
btn34.setKey("34");
CommonButton?btn35?=newCommonButton();
btn35.setName("關(guān)于我們");
btn35.setType("click");
btn35.setKey("35");
ViewButton?btn32?=newViewButton();
btn32.setName("使用幫助");
btn32.setType("view");
btn32.setUrl("http://liufeng.gotoip2.com/xiaoqrobot/help.jsp");
ComplexButton?mainBtn1?=newComplexButton();
mainBtn1.setName("生活助手");
mainBtn1.setSub_button(newButton[]?{?btn11,?btn12,?btn13,?btn14,?btn15?});
ComplexButton?mainBtn2?=newComplexButton();
mainBtn2.setName("休閑驛站");
mainBtn2.setSub_button(newButton[]?{?btn21,?btn22,?btn23,?btn24,?btn25?});
ComplexButton?mainBtn3?=newComplexButton();
mainBtn3.setName("更多");
mainBtn3.setSub_button(newButton[]?{?btn31,?btn33,?btn34,?btn35,?btn32?});
/**
*?這是公眾號(hào)xiaoqrobot目前的菜單結(jié)構(gòu),每個(gè)一級(jí)菜單都有二級(jí)菜單項(xiàng)
*
*?在某個(gè)一級(jí)菜單下沒(méi)有二級(jí)菜單的情況,menu該如何定義呢?
*?比如,第三個(gè)一級(jí)菜單項(xiàng)不是“更多體驗(yàn)”,而直接是“幽默笑話”,那么menu應(yīng)該這樣定義:
*?menu.setButton(new?Button[]?{?mainBtn1,?mainBtn2,?btn33?});
*/
Menu?menu?=newMenu();
menu.setButton(newButton[]?{?mainBtn1,?mainBtn2,?mainBtn3?});
returnmenu;
}
}
119~122行代碼就是用于創(chuàng)建view類型菜單項(xiàng)的。