如果公众号已启用服务器配置,那么自定义菜单就会失效。
但想添加菜单有两种方式:一、先停用服务器配置,随后设置自定义菜单。二、代码实现
下面介绍代码实现方式:
按照官方文档编写发送请求格式
我是在测试类种执行的方法
@Test
void createMenu() {
Map<String, Object> gzhMenuCreate = iMpaTUserWechatService.getGzhMenuCreate();
System.out.println(gzhMenuCreate);
}
@Override
public Map<String, Object> getGzhMenuCreate() {
String access_token = getGzhAccessToken();
URI uri = UriComponentsBuilder.fromHttpUrl(gzhMenuCreate)
.queryParam("access_token", access_token)
.build()
.toUri();
Map<String, Object> menu = getMenu();
RequestEntity<Map<String, Object>> requestEntity = RequestEntity.post(uri).body(menu);
ResponseEntity<String> gzhResponse = restTemplate.exchange(requestEntity, String.class);
if (gzhResponse.getBody() != null) {
Map<String, Object> resultMap;
try {
resultMap = objectMapper.readValue(gzhResponse.getBody(), new TypeReference<Map<String, Object>>() {
});
} catch (IOException e) {
throw new BusinessException("创建菜单失败:" + gzhResponse.getBody());
}
Integer errcode = (Integer) resultMap.get("errcode");
if (!(0 == errcode)) {
throw new BusinessException("创建菜单失败:" + gzhResponse.getBody());
}
return resultMap;
} else {
throw new BusinessException("创建菜单失败:" + gzhResponse.getStatusCodeValue());
}
}
@Override
public Map<String, Object> getMenu() {
ViewButton btn = new ViewButton();
btn.setType("miniprogram");
btn.setName("小程序");
btn.setKey("rselfmenu_1_0");
btn.setUrl("http://mp.weixin.qq.com");
btn.setAppid(appid);
btn.setPagepath("pages/xxx/xxx");
ViewButton btn1 = new ViewButton();
btn1.setType("miniprogram");
btn1.setName("账号绑定");
btn1.setKey("rselfmenu_1_1");
btn1.setUrl("http://mp.weixin.qq.com");
btn1.setAppid(appid);
btn1.setPagepath("pages/xxx/xxx");
ViewButton btn2 = new ViewButton();
btn2.setType("miniprogram");
btn2.setName("账号注册");
btn2.setKey("rselfmenu_1_2");
btn2.setUrl("http://mp.weixin.qq.com");
btn2.setAppid(appid);
btn2.setPagepath("pages/xxx/xxx");
ComplexButton mainBtn1 = new ComplexButton();
mainBtn1.setName("测试菜单");
mainBtn1.setSub_button(new BasicButton[]{btn, btn1, btn2});
Menu menu = new Menu();
menu.setButton(new BasicButton[]{mainBtn1});
String jsonString = JSONUtil.toJsonStr(menu);
System.out.println(jsonString);
return JSONUtil.toBean(jsonString, Map.class);
}
用到的对象类
@Setter
@Getter
public class ViewButton extends BasicButton {
private String type;
private String name;
private String key;
private String url;
private String appid;
private String pagepath;
}
@Setter
@Getter
public class ComplexButton extends BasicButton {
private BasicButton[] sub_button;
}
@Setter
@Getter
public class Menu {
private BasicButton[] button;
}
@Setter
@Getter
public class BasicButton {
private String name;
private String url;
}
返回结果errcode为0代表成功。
获取token在上一个java实现公众号扫码登录和扫码关注(详细)-CSDN博客
此时再看公众号菜单既变了。