本文针对《微信公众平台应用开发:方法、技巧与案例》 一书中示例和代码不适用于微信企业号的情况进行修改。
修改原因:
企业号操作的链接不一样,企业号存在多个应用,因此需要支持程序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("菜单创建失败!");
}
}
}