微信公众号后台是可以创建菜单 但是有时候触发微信事件发送消息或模板消息的时候 公众号定义的菜单提示会失效 这时候只能用 Java后台代码创建菜单
好了下面我们开始 (我用的lombok所以没有实现getset用的是setget注解)
首先封装实体类
按钮固有属性类(父类)
/**
* 按钮固有属性类
*/
@Getter
@Setter
public class Button {
//按钮名称
private String name;
}
再就是普通按钮点击获取文本啊 模板消息啊
/**
* 普通按钮类
*/
@Getter
@Setter
public class CommonButton extends Button {
//按钮类型
private String type;
//要获取的消息key
private String key;
}
然后就是带有链接的跳转按钮类啦
/**
* 带有链接的跳转按钮类
*/
@Getter
@Setter
public class ViewButton extends Button {
//按钮类型 (跳转类型按钮类型为 view)
private String type;
// 跳转链接
private String url;
}
上面是但是按钮 要是组合按钮呢 就是点击一个按钮出现子按钮这时候就要一个 按钮组
/**
* 按钮组合
*/
@Getter
@Setter
public class GroupButton extends Button {
//组合数组
private Button[] sub_button;
}
最后是把单个按钮和组合按钮放在一起形成最终菜单
/**
* 最终菜单
*/
@Getter
@Setter
public class Menu {
//最终组合按钮
private Button[] button;
}
为了区分跟上面的组合按钮分开 所以定义不同的名字
重要:不是重复类是需要两个组合类 下面的实现类你就会明白
好了所有的类都定义好了 现在开始实现
首先是先写好发送创建菜单给微信的请求
声明 :·······获取微信token我就不贴出来了 还有 发送请求的工具类 之前有写过的 可以去看 我的微信支付 (https://blog.youkuaiyun.com/qq_33099301/article/details/84790180)
//1.菜单创建(POST) 限100(次/天)
public static final String CREATE_MENU_URL = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
//2.查询菜单数据
public static final String GET_MENU_URL = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN";
//3.删除菜单
public static final String DELETE_MENU_URL = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN";
/**
* 创建菜单
* @param menu 菜单实例
* @param accessToken 有效凭证
*/
public static void createMenu(WxMenu menu, String accessToken)
{
//1.准备POST请求参数
String data = JSONObject.fromObject(menu).toString();
System.out.println("---------------------------创建微信菜单JSON数据---------------------");
System.out.println(data);
//2.拼装创建菜单的url
String url = CREATE_MENU_URL.replace("ACCESS_TOKEN", accessToken);
//3.发起POST请求,获取返回结果
String result = HttpSendUtil.sendPost(url, data);
JSONObject jsonObject = JSONObject.fromObject(result);
System.out.println("---------------------------创建微信菜单返回结果---------------------");
System.out.println(result);
if (null != jsonObject) {
//5.错误消息处理
if (0 != jsonObject.getInt("errcode"))
{
System.out.println("---------------------------创建微信菜单错误---------------------");
int errCode = jsonObject.getInt("errcode");
String errMsg = jsonObject.getString("errmsg");
throw new IllegalArgumentException("error code:"+errCode+", error message:"+errMsg);
} else
{
System.out.println("---------------------------创建微信菜单成功---------------------");
}
}
}
/**
* 查询菜单数据
* @param accessToken 有效凭证
* @return
* @throws Exception JSONObject
*/
public static JSONObject getMenu(String accessToken)
{
//1.获取请求url
String url = GET_MENU_URL.replace("ACCESS_TOKEN", accessToken);
//2.发起GET请求,获取返回结果
String result = HttpSendUtil.sendGet(url,"");
JSONObject jsonObject = JSONObject.fromObject(result);
System.out.println("---------------------------查询微信菜单返回结果---------------------");
System.out.println(result);
//3.解析结果,获取菜单数据
JSONObject returnJsonObject=null;
if (null != jsonObject)
{
//4.错误消息处理
if ( 0 != jsonObject.getInt("errcode"))
{
System.out.println("---------------------------查询微信菜单错误---------------------");
int errCode = jsonObject.getInt("errcode");
String errMsg = jsonObject.getString("errmsg");
throw new IllegalArgumentException("error code:"+errCode+", error message:"+errMsg);
//5.成功获取菜单数据
} else
{
returnJsonObject= jsonObject;
}
}
return returnJsonObject;
}
/**
* 删除菜单
* @param accessToken 有效凭证
* @throws Exception void
*/
public static void deleteMenu(String accessToken)
{
//1.获取请求url
String url=DELETE_MENU_URL.replace("ACCESS_TOKEN", accessToken);
//2.发起GET请求,获取返回结果
String result = HttpSendUtil.sendGet(url,"");
JSONObject jsonObject = JSONObject.fromObject(result);
System.out.println("---------------------------删除微信菜单返回结果---------------------");
System.out.println(result);
//3.解析结果
if (null != jsonObject)
{
//4.错误消息处理
if (0 != jsonObject.getInt("errcode"))
{
System.out.println("---------------------------删除微信菜单错误---------------------");
int errCode = jsonObject.getInt("errcode");
String errMsg = jsonObject.getString("errmsg");
throw new IllegalArgumentException("error code:"+errCode+", error message:"+errMsg);
//5.成功删除菜单
} else
{
System.out.println("---------------------------删除微信菜单成功---------------------");
}
}
}
好了哦 现在开始创建菜单
/**
* 创建微信菜单
*/
public void wxCreateMenu()
{
String access_Token = 获取token;
ViewButton viewButton1 = new ViewButton();
viewButton1.setName("立即扫码");
viewButton1.setType("view");
viewButton1.setUrl("https://www.baidu.com");
ViewButton viewButton2 = new ViewButton();
viewButton2.setName("宝贝4");
viewButton2.setType("view");
viewButton2.setUrl("https://www.baidu.com");
ViewButton viewButton3 = new ViewButton();
viewButton3.setName("建立房子");
viewButton3.setType("view");
viewButton3.setUrl("https://www.baidu.com");
ViewButton viewButton4 = new ViewButton();
viewButton4.setName("我的中心");
viewButton4.setType("view");
viewButton4.setUrl("https://www.baidu.com");
CommonButton commonButton1 = new CommonButton();
commonButton1.setName("宝贝1");
commonButton1.setType("click");
commonButton1.setKey("22");
CommonButton commonButton2 = new CommonButton();
commonButton2.setName("宝贝2");
commonButton2.setType("click");
commonButton2.setKey("23");
GroupButton groupButton = new GroupButton();
groupButton.setName("我的宝贝");
groupButton.setSub_button(new Button[]{ commonButton1 , commonButton2, viewButton2});
WxMenu wxMenu = new WxMenu();
wxMenu.setButton(new Button[]{ viewButton1 ,viewButton3,viewButton4, groupButton });
createMenu(wxMenu,access_Token);
}
好了这就已经OK了
如果有什么不懂得可以加V AiMyHear
大神勿喷 我也是借鉴