您好,登錄后才能下訂單哦!
小編給大家分享一下微信公眾賬號開發自定義菜單的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
開發公司的微信公眾賬號,在沒人指導沒有人商量的情況下沒少查資料、逛論壇。其中有多少酸甜苦辣,相信能進來看見我的帖子的能體會的到。一年多來為了應付公司的各種需求沒時間整理,今天我就把詳細的流程寫下來供同樣遇到問題的參考。微信公眾賬號幾種分類相信大家都有了解。 訂閱號我表示無能為力。除非你能認證通過。廢話少說開擼。 自定義菜單操作流程其實很簡單 ,就是執行一段Java程序 將你公眾賬號的appid和封裝的菜單發送到騰訊服務器,騰訊服務器會根據你請求參數appid和封裝的菜單添加到對應的公眾賬號,一定要羅嗦一句, 在Java 程序中執行一次 main 方法就可以,下次修改重新執行,不過會有緩存,取消重新關注就可以了。 1 新建按鈕基類 public class Button { //按鈕名稱 private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } 2,根據業務需求新建不同的按鈕類 /** * view類型的按鈕 點擊跳轉鏈接 * */ public class ViewButton extends Button { private String type; private String url; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } } /** * click類型的按鈕 類似于input type = 'button' 指定key 根據捕獲到的key處理相應的業務 * */ public class ClickButton extends Button { private String type; private String key; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } } 3 創建符合類型的按鈕 , 說白了就是創建主菜單容器 /** * 復合類型的按鈕 * */ public class ComplexButton extends Button { private Button[] sub_button; public Button[] getSub_button() { return sub_button; } public void setSub_button(Button[] sub_button) { this.sub_button = sub_button; } } 4 創建菜單類, 用于盛放 三個主菜單 /** * 菜單 */ public class Menu { private Button[] button; public Button[] getButton() { return button; } public void setButton(Button[] button) { this.button = button; } } 5 創建調用憑證類Token 為執行main方法調用騰訊接口做準備 /** * 憑證 * */ public class Token { // 接口訪問憑證 private String accessToken; // 憑證有效期,單位:秒 private int expiresIn; public String getAccessToken() { return accessToken; } public void setAccessToken(String accessToken) { this.accessToken = accessToken; } public int getExpiresIn() { return expiresIn; } public void setExpiresIn(int expiresIn) { this.expiresIn = expiresIn; } } 以下代碼我只做類的描述。具體代碼功能看注釋。 6 為調用騰訊接口做準備 (1)創建通用工具類 /** * 通用工具類 * */ public class CommonUtil { private static Logger log = LoggerFactory.getLogger(CommonUtil.class); /** * 獲取接口訪問憑證 * * @param appid 憑證 * @param appsecret 密鑰 * @return */ public static Token getToken(String appid, String appsecret) { // 憑證獲取(GET) String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; Token token = null; String requestUrl = token_url.replace("APPID", appid).replace("APPSECRET", appsecret); // 發起GET請求獲取憑證 JSONObject jsonObject = httpsRequest(requestUrl, "GET", null); if (null != jsonObject) { try { token = new Token(); token.setAccessToken(jsonObject.getString("access_token")); token.setExpiresIn(jsonObject.getInt("expires_in")); } catch (JSONException e) { // 獲取token失敗 token = null; } } return token; } /** * 發送https請求 * * @param requestUrl 請求地址 * @param requestMethod 請求方式(GET、POST) * @param outputStr 提交的數據 * @return JSONObject(通過JSONObject.get(key)的方式獲取json對象的屬性值) */ public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) { JSONObject jsonObject = null; try { // 創建SSLContext對象,并使用我們指定的信任管理器初始化 TrustManager[] tm = { new MyX509TrustManager() }; SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); sslContext.init(null, tm, new java.security.SecureRandom()); // 從上述SSLContext對象中得到SSLSocketFactory對象 SSLSocketFactory ssf = sslContext.getSocketFactory(); URL url = new URL(requestUrl); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setSSLSocketFactory(ssf); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); // 設置請求方式(GET/POST) conn.setRequestMethod(requestMethod); // 當outputStr不為null時向輸出流寫數據 if (null != outputStr) { OutputStream outputStream = conn.getOutputStream(); // 注意編碼格式 outputStream.write(outputStr.getBytes("UTF-8")); outputStream.close(); } // 從輸入流讀取返回內容 InputStream inputStream = conn.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String str = null; StringBuffer buffer = new StringBuffer(); while ((str = bufferedReader.readLine()) != null) { buffer.append(str); } // 釋放資源 bufferedReader.close(); inputStreamReader.close(); inputStream.close(); inputStream = null; conn.disconnect(); jsonObject = JSONObject.fromObject(buffer.toString()); } catch (ConnectException ce) { log.error("連接超時:{}", ce); } catch (Exception e) { log.error("https請求異常:{}", e); } return jsonObject; } } (2)創建信任管理器 package com.test.util; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.X509TrustManager; /** * 信任管理器 * */ public class MyX509TrustManager implements X509TrustManager { // 檢查客戶端證書 public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } // 檢查服務器端證書 public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } // 返回受信任的X509證書數組 public X509Certificate[] getAcceptedIssuers() { return null; } } 7 以上工作做完就可以創建自定義菜單了。創建自定義菜單管理類。賦值 appId 和 appSecret 運行main方法, 搞定。 package com.test.menu; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import net.sf.json.JSONObject; import com.test.bean.Button; import com.test.bean.ComplexButton; import com.test.bean.Menu; import com.test.bean.Token; import com.test.bean.ViewButton; import com.test.util.CommonUtil; /** * 菜單管理器類 * */ public class MenuManager { private static Logger log = LoggerFactory.getLogger(MenuManager.class); /** * 定義菜單結構 * @return */ private static Menu getMenu() { //定義子菜單 ViewButton btn1 = new ViewButton(); btn1.setName("子菜單1"); btn1.setType("view"); btn1.setUrl("http://www.baidu.com"); ViewButton btn2 = new ViewButton(); btn2.setName("子菜單2"); btn2.setType("view"); btn2.setUrl("http://www.baidu.com"); ViewButton btn3 = new ViewButton(); btn3.setName("子菜單3"); btn3.setType("view"); btn3.setUrl("http://www.baidu.com"); ViewButton btn4 = new ViewButton(); btn4.setName("子菜單4"); btn4.setType("view"); btn4.setUrl("http://www.baidu.com"); ComplexButton mainBtn1 = new ComplexButton(); mainBtn1.setName("主菜單1"); mainBtn1.setSub_button(new Button[] { btn1,btn2});//微信規定最多五個子菜單 ComplexButton mainBtn2 = new ComplexButton(); mainBtn2.setName("主菜單2"); mainBtn2.setSub_button(new Button[] { btn3}); ComplexButton mainBtn3 = new ComplexButton(); mainBtn3.setName("主菜單3"); mainBtn3.setSub_button(new Button[] {btn4}); Menu menu = new Menu(); menu.setButton(new Button[] { mainBtn1, mainBtn2, mainBtn3 }); return menu; } public static void main(String[] args) { // 公眾賬號唯一憑證 1 <br> String appId = ""; //公眾賬號唯一憑證密鑰 String appSecret = ""; // 調用接口獲取憑證 Token token = CommonUtil.getToken(appId, appSecret); if (null != token) { // 創建菜單 boolean result = createMenu(getMenu(), token.getAccessToken()); // 判斷菜單創建結果 if (result) log.info("菜單創建成功!"); else log.info("菜單創建失敗!"); } } /** * 創建菜單 * * @param menu 菜單實例 * @param accessToken 憑證 * @return true成功 false失敗 */ public static boolean createMenu(Menu menu, String accessToken) { boolean result = false; String menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN"; String url = menu_create_url.replace("ACCESS_TOKEN", accessToken); // 將菜單對象轉換成json字符串 String jsonMenu = JSONObject.fromObject(menu).toString(); // 發起POST請求創建菜單 JSONObject jsonObject = CommonUtil.httpsRequest(url, "POST", jsonMenu); if (null != jsonObject) { int errorCode = jsonObject.getInt("errcode"); String errorMsg = jsonObject.getString("errmsg"); if (0 == errorCode) { result = true; } else { result = false; log.error("創建菜單失敗 errcode:{} errmsg:{}", errorCode, errorMsg); } } return result; } }
以上是“微信公眾賬號開發自定義菜單的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。