微信公衆平臺開發教程Java版(五) 自定義菜單創建

前言:

自定義菜單能夠幫助公衆號豐富界面,讓用戶更好更快地理解公衆號的功能。

目前菜單創建的權限只有服務號或者是通過認證過的賬號。未認證的訂閱號暫不支持自定義

 

自定義菜單的賬號樣子如圖:

 

【題外話】

這是我申請的測試號,裏面有所有的接口權限,怎麼申請看下圖



 

自定義菜單基本介紹:

目前自定義菜單最多包括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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章