使用Java语言开发微信公众平台(八)——自定义菜单功能
隨著上一篇文章的結(jié)束,我們已經(jīng)實現(xiàn)了所有消息的類型的回復(fù)功能。今天,我們來學(xué)習(xí)更加高大上,也更加重要的自定義菜單功能。
一、了解自定義菜單
自定義菜單是微信公眾平臺最常用也是最重要的功能之一。根據(jù)微信平臺要求,自定義自定義菜單最多包括3個一級菜單,每個一級菜單最多包含5個二級菜單。其中一級菜單最多4個漢字,二級菜單最多7個漢字,多出來的部分將會以“...”代替。
而自定義菜單可以實現(xiàn)的功能也是多種多樣的,根據(jù)實現(xiàn)功能的不同,微信自定義菜單按鈕共分為10種類型:
請注意,3到8的所有事件,僅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用戶,舊版本微信用戶點擊后將沒有回應(yīng),開發(fā)者也不能正常接收到事件推送。9和10,是專門給第三方平臺旗下未微信認(rèn)證(具體而言,是資質(zhì)認(rèn)證未通過)的訂閱號準(zhǔn)備的事件類型,它們是沒有事件推送的,能力相對受限,其他類型的公眾號不必使用。
二、了解自定義菜單的數(shù)據(jù)結(jié)構(gòu)
自定義菜單與之前消息回復(fù)的XML結(jié)構(gòu)不同,自定義菜單選擇時候的是我們更加熟悉的JSON數(shù)據(jù)結(jié)構(gòu),官方給出的JSON數(shù)據(jù)Demo如下:
{
"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"
}]
}]
}
稍微解釋一下,微信公眾平臺的定義菜單類型雖然非常之多。但是總結(jié)歸納一共有兩大類,分別是click類型(點擊觸發(fā)關(guān)鍵字key)的和view類型(點擊跳轉(zhuǎn)URL)的。了解了基本的規(guī)則后,我們來看一下詳細(xì)的參數(shù)解釋:
稍微思考一下,根據(jù)這個JSON結(jié)構(gòu),我們需要怎樣去封裝實體類呢?
二、自定義菜單實體類的封裝
根據(jù)上述解釋,我們知道菜單類型有兩種:click類型、view類型。那么我們便需要clickButton類、viewButton類。而所有菜單共有屬性,我們又需要一個Button類作為父類。這樣我們才能組裝好一個Button,那么多個按鈕組裝成的菜單,我們又需要一個Menu類。最終我們總結(jié)出來,需要四個類的支持才能完成菜單實體的封裝:
每一個類的屬性類型如下:
① Button類
② ClickButton類
③ ViewButton類
④ Menu類
三、編寫組裝菜單方法
實體類組裝完畢后,我們進(jìn)組WeiXinUtil類,編寫自定義菜單的組裝方法:
/**
* 組裝菜單
* @return
*/
public static Menu initMenu(){
Menu menu = new Menu();
ClickButton button11 = new ClickButton();
button11.setName("了解杰瑞教育");
button11.setType("click");
button11.setKey("11");
ClickButton button12 = new ClickButton();
button12.setName("加入杰瑞教育");
button12.setType("click");
button12.setKey("12");
ViewButton button21 = new ViewButton();
button21.setName("杰瑞教育官網(wǎng)");
button21.setType("view");
button21.setUrl("http://www.jerehedu.com");
ViewButton button22 = new ViewButton();
button22.setName("杰瑞教育新聞網(wǎng)");
button22.setType("view");
button22.setUrl("http://www.jredu100.com");
ClickButton button31 = new ClickButton();
button31.setName("杰小瑞");
button31.setType("click");
button31.setKey("31");
Button button1 = new Button();
button1.setName("杰瑞教育"); //將11/12兩個button作為二級菜單封裝第一個一級菜單
button1.setSub_button(new Button[]{button11,button12});
Button button2 = new Button();
button2.setName("相關(guān)網(wǎng)址"); //將21/22兩個button作為二級菜單封裝第二個二級菜單
button2.setSub_button(new Button[]{button11,button12});
menu.setButton(new Button[]{button1,button2,button31});// 將31Button直接作為一級菜單
return menu;
}
四、調(diào)用接口生成菜單
菜單組裝完成后,我們需調(diào)用官方提供的接口,將自定義菜單發(fā)布到微信平臺
由于我們直接已經(jīng)寫好doPost方式調(diào)用接口的方法,所以直接編寫方法調(diào)用接口即可:
public static int createMenu(String token,String menu) throws ClientProtocolException, IOException {
int result = 0;
String url = CREATE_MENU_URL.replace("ACCESS_TOKEN", token);
JSONObject jsonObject = doPostStr(url, menu);
if(jsonObject != null){
result = jsonObject.getInt("errcode");
}
return result;
}
其中,我們返回errcode,可以判斷創(chuàng)建是否成功:
五、測試類調(diào)用方法生成菜單
完成上述各種功能后,回到我們的測試類,調(diào)用方法:
public static void main(String[] args) throws ClientProtocolException, IOException, KeyManagementException, NoSuchAlgorithmException, NoSuchProviderException {
AccessToken token = WeiXinUtil.getAccessToken();
System.out.println("Access_Token為:"+token.getToken());
System.out.println("有效時間為:"+token.getExpiresIn());
String menu = JSONObject.fromObject(WeiXinUtil.initMenu()).toString();
int result = WeiXinUtil.createMenu(token.getToken(), menu);
if(result==0){
System.out.println("菜單創(chuàng)建成功!");
}else{
System.out.println("菜單創(chuàng)建失敗");
}
}
看到控制臺結(jié)果:
愉快的看了看手機,效果如下(當(dāng)然現(xiàn)在只完成展示,還未做點擊事件操作):
總結(jié)
以上是生活随笔為你收集整理的使用Java语言开发微信公众平台(八)——自定义菜单功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原生JS实现Ajax和JSONP跨域请求
- 下一篇: 怎么创建具有真实纹理的CG场景岩石?