柳峰微信公众平台开发教程企业号修改篇(企业菜单篇)
分类:
本文针对《微信公众平台应用开发:方法、技巧与案例》 一书中示例和代码不适用于微信企业号的情况进行修改。
修改原因:
企业号操作的链接不一样,企业号存在多个应用,因此需要支持程序ID问题
修改方法:
修改MenuUtil类
注意事项: 使用本文代码,需要先参考我的上一篇文章,获得Access_Token的代码
使用:
修改原因:
企业号操作的链接不一样,企业号存在多个应用,因此需要支持程序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是企业号后台的重要参数,这相当于调用接口的权限密码。 使用所在管理组的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("菜单创建失败!");
- }
- }
- }