本文针对《微信公众平台应用开发:方法、技巧与案例》 一书中演示样例和代码不适用于微信企业号的情况进行改动。
 


 改动原因:


  企业号操作的链接不一样,企业号存在多个应用,因此须要支持程序ID问题


  改动方法:


  改动MenuUtil类

  


  注意事项: 使用本文代码,须要先參考我的上一篇文章。获得Access_Token的代码




  关键演示样例代码:(注意不是所有完整代码,这涉及到log之类云云。

。)


/**
 * 自己定义菜单工具类
 *
 * @author liufeng
 * @date 2013-10-17
 */
public class MenuUtil {


    // 菜单创建(POST)
    public final static String menu_create_url =
        "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
    // 菜单查询(GET)
    public final static String menu_get_url =
        "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN";
    // 菜单删除(GET)
    public final static String menu_delete_url =
        "https://api.weixin.qq.com/cgi-bin/menu/delete?

access_token=ACCESS_TOKEN"; //企业号 // 菜单创建(POST) public final static String Enterpmenu_create_url = "https://qyapi.weixin.qq.com/cgi-bin/menu/create?

access_token=ACCESS_TOKEN&agentid=AGENTID"; // 菜单查询(GET) public final static String Enterpmenu_get_url = "https://qyapi.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN&agentid=AGENTID"; // 菜单删除(GET) public final static String Enterpmenu_delete_url = "https://qyapi.weixin.qq.com/cgi-bin/menu/delete?

access_token=ACCESS_TOKEN&agentid=AGENTID"; /** * 创建菜单 * * @param menu 菜单实例 * @param accessToken 凭证 * @return true成功 false失败 */ public static boolean createMenu(Menu menu, String accessToken) { boolean result = false; 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; MyLog.writelogfile("创建菜单失败 errcode:{} errmsg:{}", errorCode, errorMsg); } } return result; } /** * 查询菜单 * * @param accessToken 凭证 * @return */ public static String getMenu(String accessToken) { String result = null; String requestUrl = menu_get_url.replace("ACCESS_TOKEN", accessToken); // 发起GET请求查询菜单 JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET", null); if (null != jsonObject) { result = jsonObject.toString(); } return result; } /** * 删除菜单 * * @param accessToken 凭证 * @return true成功 false失败 */ public static boolean deleteMenu(String accessToken) { boolean result = false; String requestUrl = menu_delete_url.replace("ACCESS_TOKEN", accessToken); // 发起GET请求删除菜单 JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET", null); if (null != jsonObject) { int errorCode = jsonObject.getInt("errcode"); String errorMsg = jsonObject.getString("errmsg"); if (0 == errorCode) { result = true; } else { result = false; MyLog.writelogfile("删除菜单失败 errcode:{} errmsg:{}", errorCode, errorMsg); } } return result; } /** * 创建菜单 * * @param menu 菜单实例 * @param accessToken 凭证 * @param Agentid 企业应用的id。整型。

可在应用的设置页面查看 * @return true成功 false失败 */ public static boolean createMenu(Menu menu, String accessToken, String Agentid) { boolean result = false; String url = Enterpmenu_create_url.replace("ACCESS_TOKEN", accessToken); url = url.replace("AGENTID", Agentid); // 将菜单对象转换成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; MyLog.writelogfile("创建菜单失败 errcode:{} errmsg:{}", errorCode, errorMsg); } } return result; } /** * 查询菜单 * * @param accessToken 凭证 * @param Agentid 企业应用的id,整型。可在应用的设置页面查看 * @return */ public static String getMenu(String accessToken, String Agentid) { String result = null; String requestUrl = Enterpmenu_get_url.replace("ACCESS_TOKEN", accessToken); requestUrl = requestUrl.replace("AGENTID", Agentid); // 发起GET请求查询菜单 JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET", null); if (null != jsonObject) { result = jsonObject.toString(); } return result; } /** * 删除菜单 * * @param accessToken 凭证 * @param Agentid 企业应用的id。整型。可在应用的设置页面查看 * @return true成功 false失败 */ public static boolean deleteMenu(String accessToken, String Agentid) { boolean result = false; String requestUrl = Enterpmenu_delete_url.replace("ACCESS_TOKEN", accessToken); requestUrl = requestUrl.replace("AGENTID", Agentid); // 发起GET请求删除菜单 JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET", null); if (null != jsonObject) { int errorCode = jsonObject.getInt("errcode"); String errorMsg = jsonObject.getString("errmsg"); if (0 == errorCode) { result = true; } else { result = false; MyLog.writelogfile("删除菜单失败 errcode:{} errmsg:{}", errorCode, errorMsg); } } return result; } }


 使用:

/**
 * 菜单管理器类
 *
 * @author liufeng
 * @date 2013-10-17
 */
public class MenuManager {

    /**
     * 定义菜单结构
     *
     * @return
     */
    private static Menu getMenu() {
        ClickButton btn11 = new ClickButton();
        btn11.setName("主页面");
        btn11.setType("click");
        btn11.setKey("主页面");

        ClickButton btn12 = new ClickButton();
        btn12.setName("登录");
        btn12.setType("click");
        btn12.setKey("登录");

        ClickButton btn13 = new ClickButton();
        btn13.setName("上报地点");
        btn13.setType("click");
        btn13.setKey("上报地点");

        ClickButton btn21 = new ClickButton();
        btn21.setName("项目4");
        btn21.setType("click");
        btn21.setKey("项目4");

        ClickButton btn22 = new ClickButton();
        btn22.setName("项目5");
        btn22.setType("click");
        btn22.setKey("项目5");

        ClickButton btn23 = new ClickButton();
        btn23.setName("项目6");
        btn23.setType("click");
        btn23.setKey("项目6");


        ClickButton btn31 = new ClickButton();
        btn31.setName("报表");
        btn31.setType("click");
        btn31.setKey("报表");

        ClickButton btn32 = new ClickButton();
        btn32.setName("项目8");
        btn32.setType("click");
        btn32.setKey("项目8");

        ClickButton btn33 = new ClickButton();
        btn33.setName("项目9");
        btn33.setType("click");
        btn33.setKey("项目9");


        ComplexButton mainBtn1 = new ComplexButton();
        mainBtn1.setName("系统设置");
        mainBtn1.setSub_button(new Button[] { btn11, btn12, btn13 });

        ComplexButton mainBtn2 = new ComplexButton();
        mainBtn2.setName("业务处理");
        mainBtn2.setSub_button(new Button[] { btn21, btn22, btn23 });

        ComplexButton mainBtn3 = new ComplexButton();
        mainBtn3.setName("报表");
        mainBtn3.setSub_button(new Button[] { btn31, btn32, btn33 });

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

        return menu;
    }

    public static void main(String[] args) {
        // 第三方用户唯一凭证,企业用 企业号的CorpID
        String appId = "luozhuang";
        // 第三方用户唯一凭证密钥 企业号在 管理员权限设置里面
        String appSecret ="luozhuang";
        ///启动开发接入:分级管理员必须先用CorpID和其所在管理组的Secret来换取Access_Token。之后才干调用企业号相关接口。

        // 3。系统管理员是没有Secret的。在同一个管理组的全部分级管理员共享一个Secret。 Secret是企业号后台的重要參数。这相当于调用接口的权限password。 使用所在管理组的Secret。分级管理员能够
        // 调用接口获取凭证
        Token token;
        token = new Token();
     
        if (token == null) {
            token = CommonUtil.EntergetToken(appId, appSecret);
        }
        if (null != token) {
            // 创建菜单
            boolean result =
                MenuUtil.createMenu(getMenu(), token.getAccessToken(), "9");

            // 推断菜单创建结果
            if (result)
                MyLog.writelogfile("菜单创建成功。");
            else
                MyLog.writelogfile("菜单创建失败!

"); } } }