隨着上一篇文章的結束,我們已經實現了所有消息的類型的回復功能。今天,我們來學習更加高大上,也更加重要的自定義菜單功能。
一、了解自定義菜單
自定義菜單是微信公眾平台最常用也是最重要的功能之一。根據微信平台要求,自定義自定義菜單最多包括3個一級菜單,每個一級菜單最多包含5個二級菜單。其中一級菜單最多4個漢字,二級菜單最多7個漢字,多出來的部分將會以“...”代替。
而自定義菜單可以實現的功能也是多種多樣的,根據實現功能的不同,微信自定義菜單按鈕共分為10種類型:
請注意,3到8的所有事件,僅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用戶,舊版本微信用戶點擊后將沒有回應,開發者也不能正常接收到事件推送。9和10,是專門給第三方平台旗下未微信認證(具體而言,是資質認證未通過)的訂閱號准備的事件類型,它們是沒有事件推送的,能力相對受限,其他類型的公眾號不必使用。
二、了解自定義菜單的數據結構
自定義菜單與之前消息回復的XML結構不同,自定義菜單選擇時候的是我們更加熟悉的JSON數據結構,官方給出的JSON數據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"
}]
}]
}
稍微解釋一下,微信公眾平台的定義菜單類型雖然非常之多。但是總結歸納一共有兩大類,分別是click類型(點擊觸發關鍵字key)的和view類型(點擊跳轉URL)的。了解了基本的規則后,我們來看一下詳細的參數解釋:
稍微思考一下,根據這個JSON結構,我們需要怎樣去封裝實體類呢?
二、自定義菜單實體類的封裝
根據上述解釋,我們知道菜單類型有兩種:click類型、view類型。那么我們便需要clickButton類、viewButton類。而所有菜單共有屬性,我們又需要一個Button類作為父類。這樣我們才能組裝好一個Button,那么多個按鈕組裝成的菜單,我們又需要一個Menu類。最終我們總結出來,需要四個類的支持才能完成菜單實體的封裝:
每一個類的屬性類型如下:
① Button類
② ClickButton類
③ ViewButton類
④ Menu類
三、編寫組裝菜單方法
實體類組裝完畢后,我們進組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("傑瑞教育官網");
button21.setType("view");
button21.setUrl("http://www.jerehedu.com");
ViewButton button22 = new ViewButton();
button22.setName("傑瑞教育新聞網");
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("相關網址"); //將21/22兩個button作為二級菜單封裝第二個二級菜單
button2.setSub_button(new Button[]{button11,button12});
menu.setButton(new Button[]{button1,button2,button31});// 將31Button直接作為一級菜單
return menu;
}
四、調用接口生成菜單
菜單組裝完成后,我們需調用官方提供的接口,將自定義菜單發布到微信平台
由於我們直接已經寫好doPost方式調用接口的方法,所以直接編寫方法調用接口即可:
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,可以判斷創建是否成功:
五、測試類調用方法生成菜單
完成上述各種功能后,回到我們的測試類,調用方法:
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("菜單創建成功!");
}else{
System.out.println("菜單創建失敗");
}
}
看到控制台結果:
愉快的看了看手機,效果如下(當然現在只完成展示,還未做點擊事件操作):