天天看點

測試公衆号菜單的建立方法

1需要取得微信号的appID及appsecret。

2寫上MAIN函數,并執行即可。

package com.eastnet.wechat.main;

import com.eastnet.wechat.pojo.AccessToken;

import com.eastnet.wechat.pojo.Button;

import com.eastnet.wechat.pojo.CommonButton;

import com.eastnet.wechat.pojo.ComplexButton;

import com.eastnet.wechat.pojo.Menu;

import com.eastnet.wechat.utils.WeixinUtil;

public class MenuManager {

//    private static Logger log = LoggerFactory.getLogger(MenuManager.class);  

    public static void main(String[] args) {  

        // 第三方使用者唯一憑證  

        String appId = "wx96cc342f871bffd0";  

        // 第三方使用者唯一憑證密鑰  

        String appSecret = "6dc5ba3549d783ad0399868c691f1f1e";  

        // 調用接口擷取access_token  

        AccessToken at = WeixinUtil.getAccessToken(appId, appSecret);  

        if (null != at) {  

            // 調用接口建立菜單  

            int result = WeixinUtil.createMenu(getMenu(), at.getToken());  

            // 判斷菜單建立結果  

            if (0 == result)  

                System.out.println("菜單建立成功!");  

            else  

                System.out.println("菜單建立失敗,錯誤碼:" + result);  

        }  

    }  

    private static Menu getMenu() {  

        CommonButton btn11 = new CommonButton();  

        btn11.setName("天氣預報123");  

        btn11.setType("click");  

        btn11.setKey("11");  

        CommonButton btn12 = new CommonButton();  

        btn12.setName("公交查詢");  

        btn12.setType("click");  

        btn12.setKey("12");  

        CommonButton btn13 = new CommonButton();  

        btn13.setName("周邊搜尋");  

        btn13.setType("click");  

        btn13.setKey("13");  

        CommonButton btn14 = new CommonButton();  

        btn14.setName("曆史上的今天");  

        btn14.setType("click");  

        btn14.setKey("14");  

        CommonButton btn21 = new CommonButton();  

        btn21.setName("歌曲點播");  

        btn21.setType("click");  

        btn21.setKey("21");  

        CommonButton btn22 = new CommonButton();  

        btn22.setName("經典遊戲");  

        btn22.setType("click");  

        btn22.setKey("22");  

        CommonButton btn23 = new CommonButton();  

        btn23.setName("美女電台");  

        btn23.setType("click");  

        btn23.setKey("23");  

        CommonButton btn24 = new CommonButton();  

        btn24.setName("人臉識别");  

        btn24.setType("click");  

        btn24.setKey("24");  

        CommonButton btn25 = new CommonButton();  

        btn25.setName("聊天唠嗑");  

        btn25.setType("click");  

        btn25.setKey("25");  

        CommonButton btn31 = new CommonButton();  

        btn31.setName("Q友圈");  

        btn31.setType("click");  

        btn31.setKey("31");  

        CommonButton btn32 = new CommonButton();  

        btn32.setName("電影排行榜");  

        btn32.setType("click");  

        btn32.setKey("32");  

        CommonButton btn33 = new CommonButton();  

        btn33.setName("幽默笑話");  

        btn33.setType("click");  

        btn33.setKey("33");  

        ComplexButton mainBtn1 = new ComplexButton();  

        mainBtn1.setName("生活助手456");  

        mainBtn1.setSub_button(new CommonButton[] { btn11, btn12, btn13, btn14 });  

        ComplexButton mainBtn2 = new ComplexButton();  

        mainBtn2.setName("休閑驿站");  

        mainBtn2.setSub_button(new CommonButton[] { btn21, btn22, btn23, btn24, btn25 });  

        ComplexButton mainBtn3 = new ComplexButton();  

        mainBtn3.setName("更多體驗");  

        mainBtn3.setSub_button(new CommonButton[] { btn31, btn32, btn33 });  

        Menu menu = new Menu();  

        menu.setButton(new Button[] { mainBtn1, mainBtn2, mainBtn3 });  

        return menu;  

    }  

}

------------------------------

package com.eastnet.wechat.utils;

import java.io.BufferedReader;  

import java.io.InputStream;  

import java.io.InputStreamReader;  

import java.io.OutputStream;  

import java.net.ConnectException;  

import java.net.URL;  

import javax.net.ssl.HttpsURLConnection;  

import javax.net.ssl.SSLContext;  

import javax.net.ssl.SSLSocketFactory;  

import javax.net.ssl.TrustManager;  

import com.eastnet.wechat.pojo.AccessToken;

import com.eastnet.wechat.pojo.Menu;

import net.sf.json.JSONObject;   

public class WeixinUtil {

//    private static Logger log = LoggerFactory.getLogger(WeixinUtil.class);  

    // 擷取access_token的接口位址(GET) 限200(次/天)  

    public final static String access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";  

    // 菜單建立(POST) 限100(次/天)  

    public static String menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";  

    public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr) {  

        JSONObject jsonObject = null;  

        StringBuffer buffer = new StringBuffer();  

        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 httpUrlConn = (HttpsURLConnection) url.openConnection();  

            httpUrlConn.setSSLSocketFactory(ssf);  

            httpUrlConn.setDoOutput(true);  

            httpUrlConn.setDoInput(true);  

            httpUrlConn.setUseCaches(false);  

            // 設定請求方式(GET/POST)  

            httpUrlConn.setRequestMethod(requestMethod);  

            if ("GET".equalsIgnoreCase(requestMethod))  

                httpUrlConn.connect();  

            // 當有資料需要送出時  

            if (null != outputStr) {  

                OutputStream outputStream = httpUrlConn.getOutputStream();  

                // 注意編碼格式,防止中文亂碼  

                outputStream.write(outputStr.getBytes("UTF-8"));  

                outputStream.close();  

            }  

            // 将傳回的輸入流轉換成字元串  

            InputStream inputStream = httpUrlConn.getInputStream();  

            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");  

            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  

            String str = null;  

            while ((str = bufferedReader.readLine()) != null) {  

                buffer.append(str);  

            }  

            bufferedReader.close();  

            inputStreamReader.close();  

            // 釋放資源  

            inputStream.close();  

            inputStream = null;  

            httpUrlConn.disconnect();  

            System.out.println(buffer.toString());

            jsonObject = JSONObject.fromObject(buffer.toString());  

        } catch (ConnectException ce) {  

            System.out.println("Weixin server connection timed out.");

        } catch (Exception e) {  

            System.err.println("https request error:{}");

//            log.error("https request error:{}", e);  

        }  

        return jsonObject;  

    }  

    public static AccessToken getAccessToken(String appid, String appsecret) {  

        AccessToken accessToken = null;  

        String requestUrl = access_token_url.replace("APPID", appid).replace("APPSECRET", appsecret);  

        JSONObject jsonObject = httpRequest(requestUrl, "GET", null);  

        // 如果請求成功  

        if (null != jsonObject) {  

            try {  

                accessToken = new AccessToken();  

                accessToken.setToken(jsonObject.getString("access_token"));  

                accessToken.setExpiresIn(jsonObject.getInt("expires_in"));  

            } catch (Exception e) {  

                accessToken = null;  

                // 擷取token失敗  

                System.out.println("擷取token失敗 errcode:"+jsonObject.getInt("errcode")+"errmsg:"+jsonObject.getString("errmsg"));

//                log.error("擷取token失敗 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));  

            }  

        }  

        return accessToken;  

    }

    public static int createMenu(Menu menu, String accessToken) {  

        int result = 0;  

        // 拼裝建立菜單的url  

        String url = menu_create_url.replace("ACCESS_TOKEN", accessToken);  

        // 将菜單對象轉換成json字元串  

        String jsonMenu = JSONObject.fromObject(menu).toString();  

        // 調用接口建立菜單  

        JSONObject jsonObject = httpRequest(url, "POST", jsonMenu);  

        if (null != jsonObject) {  

            if (0 != jsonObject.getInt("errcode")) {  

                result = jsonObject.getInt("errcode"); 

                System.out.println("建立菜單失敗errcode:"+jsonObject.getInt("errcode")+"errmsg:"+jsonObject.getString("errmsg"));

//                log.error("建立菜單失敗 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));  

            }  

        }  

        return result;  

    } 

}

3用微信檢視可以看到菜單。

繼續閱讀