今天来说一下微信公众号底部的菜单设置
设置更改公众号底部的菜单有两种方式:1、通过Java代码调取微信提供的接口进行设置。
2、直接在微信公众号平台用json数据设置。
这两种方式都比较简单。个人采取的一般是第二种方式。
一、Java代码调取微信接口进行设置直接上代码
1、定义APPID,APPSECRET的ConstantWeChat常量类
public class ConstantWeChat {
public static final String APPID = "";
public static final String APPSECRET = "";
}
2、通用微信接口类CommonWechatUtil类,获取accesstoken
public class CommonWechatUtil {
private static Logger log = LoggerFactory.getLogger(CommonWechatUtil.class);
// 凭证获取(GET)
public final static String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
/**
* 获取接口访问凭证
*
* @param appid 凭证
* @param appsecret 密钥
* @return
*/
public static AccessToken getToken(String appid, String appsecret) {
AccessToken token = null;
String requestUrl = token_url.replace("APPID", appid).replace("APPSECRET", appsecret);
// 发起GET请求获取凭证
JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);
if (null != jsonObject) {
try {
token = new AccessToken();
token.setAccessToken(jsonObject.getString("access_token"));
token.setExpiresIn(jsonObject.getInt("expires_in"));
} catch (JSONException e) {
token = null;
// 获取token失败
log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));
}
}
return token;
}
}
3、调用创建菜单的接口CommonWechatUtil类中的方法createMenu
// 菜单创建(POST) 限100(次/天)
public static String menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
/**
* 创建菜单
*
* @param menu 菜单实例
* @param accessToken 有效的access_token
* @return 0表示成功,其他值表示失败
*/
public static int createMenu(Menu menu, String accessToken) {
int result = 0;
// 拼装创建菜单的url
String url = menu_create_url.replace("ACCESS_TOKEN", accessToken);
// 将菜单对象转换成json字符串
String jsonMenu = JSONObject.fromObject(menu).toString();
// 调用接口创建菜单
JSONObject jsonObject = httpsRequest(url, "POST", jsonMenu);
if (null != jsonObject) {
if (0 != jsonObject.getInt("errcode")) {
result = jsonObject.getInt("errcode");
log.error("创建菜单失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));
}
}
return result;
}
4、组装菜单getMenu方法
/**
* 组装菜单数据
*
* @return
* @throws UnsupportedEncodingException
*/
private static Menu getMenu() {
ViewButton btn11 = new ViewButton();
btn11.setName("开启");
btn11.setType("view");
btn11.setUrl("http://www.baidu.com");
ViewButton btn21 = new ViewButton();
btn21.setName("关闭");
btn21.setType("view");
btn21.setUrl("http://www.baidu.com");
ViewButton btn31 = new ViewButton();
btn31.setName("谢谢");
btn31.setType("view");
btn31.setUrl("https://www.baidu.com");
ViewButton btn41 = new ViewButton();
btn41.setName("关注");
btn41.setType("view");
btn41.setUrl("https://www.baidu.com");
CommonButton btn12 = new CommonButton();
btn12.setName("赞");
btn12.setType("click");
btn12.setKey("return_content");
ComplexButton mainBtn1 = new ComplexButton();
mainBtn1.setName("菜单1");
mainBtn1.setSub_button(new BasicButton[] { btn11, btn21,btn31});
ComplexButton mainBtn2 = new ComplexButton();
mainBtn2.setName("菜单2");
mainBtn2.setSub_button(new BasicButton[] { btn41, btn12 });
/**
*在某个一级菜单下没有二级菜单的情况,menu应该这样定义:<br>
* menu.setButton(new Button[] { mainBtn1, mainBtn2, btn33 });
*/
Menu menu = new Menu();
menu.setButton(new BasicButton[] { mainBtn1, mainBtn2});
return menu;
}
5、编写创建菜单的方法
@Service("menuService")
public class MenuServiceImpl implements MenuService {
private static final Logger LOGGER = LoggerFactory.getLogger(MenuServiceImpl.class);
// @Override
public static Boolean createMenu() {
// 第三方用户唯一凭证
String appId = ConstantWeChat.APPID;
// 第三方用户唯一凭证密钥
String appSecret = ConstantWeChat.APPSECRET;
// 调用接口获取access_token
AccessToken at = CommonWechatUtil.getToken(appId, appSecret);
if (null != at) {
// 调用接口创建菜单
int result = CommonWechatUtil.createMenu(getMenu(), at.getAccessToken());
// 判断菜单创建结果
if (0 == result){
LOGGER.info("菜单创建成功!");
return true;
}
else{
LOGGER.info("菜单创建失败,错误码:" + result);
return false;
}
}
return false;
}
6、main方法执行creatmenu方法
public static void main(String[] args) {
createMenu();
}
以上就是第一种创建菜单的方法。
二、通过json的body体创建菜单
填写正确的配置信息
返回结果200代表返回成功,获取到access_token赋值粘贴下来。如果不是200,请根据对应的错误码查询错误。
2、获取到access_token之后,重新选择自定义菜单
将json数据放在body体中,按自己的实际情况修改json
{
"button": [
{
"name": "菜单1",
"type": "view",
"url": "http://www.baidu.com"
},
{
"name": "菜单2",
"type": "view",
"url": "http://www.baidu.com"
},
{
"name": "菜单3",
"sub_button": [
{
"key": "text",
"name": "回复图文",
"type": "click"
},
{
"name": "博客",
"type": "view",
"url": "http://www.baidu.com"
}
]
}
]
}
3、点击检查问题,返回值为200即代表菜单生成成功。
注意:上述过程都执行完毕,没有问题的情况下,如果进入微信公众号测试号中,菜单没有更改。取消关注,重新关注一下就会发现菜单已经更改成功!