今天来说一下微信公众号底部的菜单设置

设置更改公众号底部的菜单有两种方式: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;// 拼装创建菜单的urlString 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);//    @Overridepublic static Boolean createMenu() {// 第三方用户唯一凭证String appId = ConstantWeChat.APPID;// 第三方用户唯一凭证密钥String appSecret = ConstantWeChat.APPSECRET;// 调用接口获取access_tokenAccessToken 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体创建菜单

1、前往微信公众平台接口测试工具https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E5%9F%BA%E7%A1%80%E6%94%AF%E6%8C%81&form=%E8%8E%B7%E5%8F%96access_token%E6%8E%A5%E5%8F%A3%20/token

填写正确的配置信息

返回结果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即代表菜单生成成功

注意:上述过程都执行完毕,没有问题的情况下,如果进入微信公众号测试号中,菜单没有更改。取消关注,重新关注一下就会发现菜单已经更改成功!

Java微信公众号服务号开发(四):公众号底部菜单设置相关推荐

  1. 微信小程序服务端开发遇到的一些坑

    微信小程序服务端开发遇到的一些坑 开发环境 问题集合 小程序不支持基于进入客服事件推送消息 小程序不支持永久素材 RestTemplate无法解析上传图片素材的返回 tips 其他小问题 开发环境 基 ...

  2. 微信怎么绑定消息服务器吗,fastweixin: 极其方便的实现微信公众平台服务端开发,2行代码完成服务器绑定,3行代码实现用户消息监听...

    fastweixin 作者:peiyu 快速搭建微信公众平台服务器 简单封装了所有与微信服务器交互的消息:文本消息.图片消息.图文消息等等 提供了基于springmvc以及基于servlet框架的控制 ...

  3. 微信app支付服务端开发记录

    微信APP支付服务端 调用接口需要注意事项: 1.签名:需要全部参数参加签名,空值去掉.(实际传递了什么参数需要,就根据实际参数进行签名) 2.签名参数:appid是申请支付功能的app对于的ID,k ...

  4. java微信的客服接口开发,微信公众号 客服接口的开发实例详解

    微信平台更新之后,发现客服接口不错.研究了下 和大家分享下. 按照官方文档,是向客服接口发送规定的JSon 就可以了. 首先先封装下 JSon 的类: package com.lwz.wx.bean. ...

  5. 微信公众号三方平台开发【帐号注册、平台创建】

    上一期咱们简单介绍了一下什么是公众号第三方平台,今天咱们讲具体如何操作来创建属于你自己的微信第三方平台. [注册] 首先当然是移步前往微信开放平台注册开发者帐号啦~注册传送门 进去后,会看到如下图页面 ...

  6. java监听微信_fastweixin: 极其方便的实现微信公众平台服务端开发,2行代码完成服务器绑定,3行代码实现用户消息监听...

    fastweixin 作者:peiyu 快速搭建微信公众平台服务器 简单封装了所有与微信服务器交互的消息:文本消息.图片消息.图文消息等等 提供了基于springmvc以及基于servlet框架的控制 ...

  7. java微信app支付服务端v3代码

    微信的文档写的是真的烂,特别是刚写完支付宝和苹果支付,有了对比就显得微信的文档是真的垃圾,想体验的可以去看下: 微信官方文档 为了下次做微信支付的时候能舒服点,记录下 主要坑点 统一下单接口调用的时候 ...

  8. php 版本 微信支付 APP 服务端开发

    我们通过 微信支付的文档知道 第一步 服务端需要调用统一下单接口生成预付单,其中主要的参数就是 prepay_id 这样 app 通过 prepay_id 就可以发起支付请求了. 我们可以参考 微信支 ...

  9. Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis+ElementUI

    鸿鹄云架构[系统管理平台]是一个大型 企业.分布式.微服务.云架构的JavaEE体系快速研发平台,基于 模块化.微服务化.原子化.热部署的设计思想,使用成熟领先的无商业限制的主流开源技术 (Sprin ...

最新文章

  1. chapter_2 索引优先队列
  2. 民营企业的ERP之路
  3. ssl双向认证和单向认证的区别
  4. Python Matplotlib 画图显示中文
  5. [转] HDU 题目分类
  6. mysql bin log日志
  7. 模板引擎工作原理_广州seo了解下搜索引擎的工作原理是什么
  8. jpa 自定义sql if_跟飞哥学编程:SQL入门-:函数、存储过程和触发器
  9. python读取大文件的坑_如何在Python中读取大文件的特定部分
  10. 如何下载php-5.5.38.tar.gz_搭建PHP服务器php-5.3.28.tar.gz
  11. 常见的两个面试题以及面试的心态
  12. 简洁css竖型tab选项卡(用)
  13. 【转】Quartz.NET
  14. (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql
  15. java为什么要设计包装类_Java 为什么需要包装类
  16. opencv_python学习笔记十三
  17. OD调试2----破解序列号验证程序
  18. Android版添加phonegap--美洽客服插件教程
  19. 检错码与纠错码,一码归一码
  20. Response.Redirect() 打开新窗口的方法

热门文章

  1. Macintosh( mac )操作系统
  2. 最新版WebStorm安装详解方法
  3. 廖雪峰Java自学笔记------Java简洁
  4. 一个成功者的八年奋斗史
  5. 用Python实现十大经典排序算法
  6. 在项目上不使用UML是致命的
  7. HTTP和HTTPS有什么区别?如何实现网站的HTTPS?
  8. “抢滩”元宇宙:不只Facebook和腾讯
  9. 作为shopee新手卖家的你,如何快速出单?不得不看的shopee店铺装修技巧
  10. 简直无敌!java取绝对值的方法