公众号开发-被动消息回复

自定义菜单是公众号开发必备功能,公众号用户与后台交互基本都在菜单中完成,自定义菜单可以让公众号下菜单拥有更加丰富的菜单事件,以及菜单功能
本专栏说明以及源码地址:微信开发专栏说明

自定义菜单介绍

自定义菜单在创建时需要注意以下几个内容

  1. 自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单
  2. 一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“…”代替
  3. 创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果

这里是微信公众平台官方文档:自定义菜单

数据表设计

自定义菜单需要使用到数据库,将我们的自定义菜单格式保存下来,所有首先我们需要设计数据库,根据官方文档最终设计出如下表

create table weixin.vx_menu
(id             bigint auto_increment comment '主键' primary key,parent_id      bigint                  null comment '父级id',tree_level     varchar(20) default '0' null comment '菜单级别',tree_sort      bigint                  null comment '本级排序号(升序)',menu_type      varchar(12)             null comment '菜单类型',menu_name      char(16)                not null comment '菜单名称',menu_key       char(128)               null comment '菜单KEY值,用于消息接口推送,不超过128字节(click等点击类型必须)',menu_url       varchar(500)            null comment '用户点击菜单可打开链接(view、miniprogram类型必须)',menu_media_id  varchar(64)             null comment '调用新增永久素材接口返回的合法media_id(media_id类型和view_limited类型必须)',menu_app_id    varchar(64)             null comment '小程序的appid(miniprogram类型必须)',menu_page_path varchar(64)             null comment '小程序的页面路径(miniprogram类型必须)'
);

表格创建完毕后插入几条测试数据方便等一下测试

代码编写

common包

增加:VxResult

修改:VxParameterConfig、vx.yml

VxResult

该类用于处理发起请求后收到的返回消息处理

vx.yml

需要在yml增加创建菜单的请求地址

VxParameterConfig

增加menuUrl属性并且生成相应的set/get方法

core包

增加:VxMenu,InitMenuFormBody,MenuType,TreeLevel,VxMenuMapper,VxMenuServiceImpl,VxMenuService,VxMenuMapper.xml

VxMenu

对应数据库表字段

@Data
@TableName(value = "vx_menu")
public class VxMenu {@TableId(type = IdType.AUTO)private Long id;private Long parentId;private TreeLevel treeLevel;private Long treeSort;private MenuType menuType;private String menuName;private String menuKey;private String menuUrl;private String menuMediaId;private String menuAppId;private String menuPagePath;
}

InitMenuFormBody

发生请求时所需要用到的json格式对象

@Data
public class InitMenuFormBody {private String name;private String type;private String url;private String key;private List<InitMenuFormBody> sub_button;
}

MenuType和TreeLevel

MenuType:菜单类型的枚举类

TreeLevel:菜单级别枚举类

VxMenuMapper

这里使用到的是mybatis-plus,需要基础一个通用的Mapper,编写一个selectMenuTree获取树结构的自定义sql

VxMenuMapper.xml

编写自定义sql利用Mybatisxml映射,生成菜单数结构

VxMenuService

VxMenuServiceImpl

编写创建菜单的方法

启动异步创建菜单

编写以上的类与方法后,我们通过menuService.initMenu();就可以调用方法创建菜单了,但是这显然不够灵活,需要进行改造一下,如果在项目启动后自动初始化菜单那就是最好的了,接下来我们就实现它

LoadVxMenu

编写一个LoadVxMenu的类

  1. 实现CommandLineRunner,重写run方法,这样当项目启动完毕后就会调用run方法
  2. 编写内部类LoadMenuTask,实现Runnable重写run方法,利用while轮询Redis中ACCESS_TOKEN,当获取到ACCESS_TOKEN才会进行初始化菜单的操作
  3. 将来编写好的LoadMenuTask对象传入到CommandLineRunner的run方法中即可

运行测试

(7)公众号开发-自定义菜单相关推荐

  1. java自定义菜单跳转页面_微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解...

    微信公众号开发 自定义菜单 请先读完本文再进行配置开发 请先前往微信平台开发者文档阅读"网页授权获取用户基本信息"的接口说明 在微信公众账号开发中,往往有定义一个菜单,然后用户点击 ...

  2. 微信公众号开发--自定义菜单跳转页面并获取用户信息(续)

    之前写过一篇微信公众号开发–自定义菜单跳转页面并获取用户信息 由于当时是刚学习微信公众号开发当时的思路虽然可行,不过不是最好的,最近也用到了需要获取用户信息的地方,再次整理一下. 流程 注意点 ### ...

  3. 公众号如何跳转到页面php,图文详解微信公众号开发自定义菜单跳转页面并获取用户信息实例...

    这篇文章主要介绍了微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解的相关资料,需要的朋友可以参考下 微信公众号开发 自定义菜单 请先读完本文再进行配置开发 请先前往微信平台开发者文档阅读&qu ...

  4. 微信公众号开发---自定义菜单的创建及菜单事件响应(java)

    微信5.0发布 2013年8月5日,伴随着微信5.0 iPhone版的发布,公众平台也进行了重要的更新,主要包括: 1)运营主体为组织,可选择成为服务号或者订阅号: 2)服务号可以申请自定义菜单: 3 ...

  5. android 微信公众号开发教程,微信公众号-开发者-自定义菜单,公众开发者

    微信公众号-开发者-自定义菜单,公众开发者 我是个初学者,网上找了看了好多,都是第三方实现的,考虑到安全问题,不敢用! 今天终于摸索出了实现方法. 官方api:http://mp.weixin.qq. ...

  6. php创建菜单_php实现微信公众号创建自定义菜单功能的实例代码

    目的 创建自定义菜单,实现菜单事件. 首先获取Access_Token 接口: 我用的是测试号,修改APPID和APPSECRET,然后浏览器访问上面这个Url即可生成Access_Token 然后配 ...

  7. 微信公众号开发 - 创建菜单

    微信公众号开发文章目录 1.微信公众号开发 - 环境搭建 2.微信公众号开发 - 配置表设计以及接入公众号接口开发 3.微信公众号开发 - token获取(保证同一时间段内只请求一次) 4.微信公众号 ...

  8. 微信公众帐号开发-自定义菜单的创建及菜单事件响应的实例

    微信开发公众平台自定义菜单需要花钱认证才能实现,不想花钱只能玩测试账号了,不过这并不影响开发.我的开发都是基于柳峰老师的微信公众平台应用开发做的. 只要我们使用公众平台测试账号就可以开发自定义菜单了, ...

  9. 2、公众号开发--自定义(简易模式)菜单以及素材的永久URL地址获取方法

    服务器配置(已启用)---->一开启,会把之前在(功能里)定义的菜单清空,需要自定义接口菜单了, 注意事项, 1.自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单. 2.一级菜单 ...

  10. php微信自定义菜单开发,微信公众平台开发自定义菜单功能开发

    一.简介 微信公众平台服务号以及之前成功申请内测资格的订阅号都具有自定义菜单的功能.开发者可利用该功能为公众账号的会话界面底部增加自定义菜单,用户点击菜单中的选项,可以调出相应的回复信息或网页链接.自 ...

最新文章

  1. windows10 查看 nvidia driver cuda 版本
  2. 基于大规模结构化病例数据的新型冠状病毒传播特征和感染人群分析
  3. 走进STM32世界之Hex程序烧写
  4. 【java】静态代码块
  5. while循环python的范围_python-无法在while循环中从列表中排除一定范围内的项目
  6. Ubuntu 14 开启SSH服务与使用root账号登陆
  7. 【推荐】开源领袖陆首群力作:什么是数字经济?
  8. table()函数--R语言
  9. 蓝桥杯 C语言 试题 历届试题 网络寻路
  10. 微信小程序开发常见的错误
  11. 随机搜索RandomizedSearchCV原理
  12. 常用URL schemes ✨支付宝 、微信、腾讯、百度、网易、银行 、社交 、音频 、工具大集合
  13. Maven Helper 安装使用
  14. EVE上传Dynamips和IOL
  15. 使用Poi-tl 生成word文档 处理word特殊符号方框带勾选 解决方法
  16. python三维立体画_用matplotlib创建三维立体图
  17. npy文件的打开,读取
  18. 五金自营平台进军MRO百亿市值 行业独角兽势头显现
  19. matlab中globalsearch,MATLAB中fmincon和globalsearch、multistart优化问题
  20. 使用VHDL进行乒乓球游戏电路设计

热门文章

  1. LDA模型困惑度计算出现的问题
  2. C# 图片反色处理 图片夜间模式
  3. 华为路由器的静态路由之间的等价路由以及浮动路由
  4. 进销存系统软件怎么测试,进销存系统中的报表测试
  5. win7录屏_win7电脑怎么录屏?这个实用工具给你答案
  6. maven 使用assembly 进行打包
  7. shiro简单配置教程
  8. 你知道硬齿面减速机价格为什么比齿轮减速机,蜗轮蜗杆减速机高?
  9. PS Photoshop 无法识别数位板 钢笔压力 感叹号
  10. pandas库的使用