详解nodejs微信公众号开发——6.自定义菜单


Posted in NodeJs onApril 13, 2017

上一篇文章:nodejs微信公众号开发——5.素材管理接口,我们实现了新增临时素材、管理永久素材的接口,这些接口的实现,使我们能够推送多样的消息给用户。本节介绍的内容是关于自定义菜单

1. 自定义菜单的介绍

自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。关于自定义菜单需要掌握以下几点内容:

  1. 自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
  2. 一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。
  3. 创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。

更多信息查看官方文档:自定义菜单创建接口

2. 创建自定义菜单

2.1 首先罗列以下操作的请求地址:

var api = {
  ...
  menu:{
    create:prefix+'/menu/create?', //access_token=ACCESS_TOKEN 创建菜单
    get:prefix+'/menu/get?', //access_token=ACCESS_TOKE 获取菜单,GET请求
    delete:prefix+'/menu/delete?', //access_token=ACCESS_TOKEN 删除菜单,GET请求
    getInfo:prefix+'get_current_selfmenu_info?' //access_token=ACCESS_TOKEN 获取自定义菜单配置接口
  }
}

2.2 定义createMenu函数

Wechat.prototype.createMenu = function(menu){
  var that = this;
  return new Promise(function(resolve,reject){
    that.fetchAccessToken().then(function(data){
      var url = api.menu.create + 'access_token=' + data.access_token;
      request({url:url,method:'POST',body:menu,json:true}).then(function(response){
        var _data = response.body;
        if(_data.errcode === '0'){
          resolve();
        }else{
          throw new Error('create menu failed!');
        }
      }).catch(function(err){
        reject(err);
      });
    });
  });
}

参数menu由外部业务层传入。为了方便管理,将自定义菜单的内容单独写在一个menu.js文件中:

/*
 * 配置自定义菜单
 */
'use strict'

module.exports = {
  'button':[
  {
    'name':'最新',
    'type':'click',
    'key':'menu_click'
  },
  {
    'name':'类别',
    'sub_button':[
      {
        'name':'科幻',
        'type':'view',
        'url':'music.163.com'
      },
      {
        'name':'悬疑',
        'type':'scancode_push',
        'key':'qr_scan'
      },
      {
        'name':'爱情',
        'type':'scancode_waitmsg',
        'key':'qr_scan_wait'
      },
      {
        'name':'教育',
        'type':'pic_photo_or_album',
        'key':'pic_photo_album'
      }
    ]
  },
  {
    'name':'地域',
    'sub_button':[
      {
        'name':'大陆',
        'type':'pic_weixin',
        'key':'pic_weixin'
      },
      {
        'name':'欧美',
        'type':'location_select',
        'key':'location_select'
      }
    ]
  }]
}

里面的类型暂时随意写的。我们在业务层weixin.js里面实现自定义菜单的使用:

wechatApi.deleteMenu().then(function(){
  return wechatApi.createMenu(menu);
}).then(function(msg){
  console.log(msg);
});

保险起见先把原有的菜单删了,重新建立自己新的菜单。

2.3 定义deleteMenu函数

Wechat.prototype.deleteMenu = function(){
  var that = this;
  return new Promise(function(resolve,reject){
    that.fetchAccessToken().then(function(data){
      var url = api.menu.delete + 'access_token=' + data.access_token;
      request({url:url,json:true}).then(function(response){
        var _data = response.body;
        if(_data.errcode === '0'){
          resolve();
        }else{
          throw new Error('delete menu failed!');
        }
      }).catch(function(err){
        reject(err);
      });
    });
  });
}

测试了一下,取关重新关注后微信测试号并没有立即呈现自定义菜单,要等一段时间,略坑。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
NodeJS 模块开发及发布详解分享
Mar 07 NodeJs
轻松创建nodejs服务器(6):作出响应
Dec 18 NodeJs
nodejs+express实现文件上传下载管理网站
Mar 15 NodeJs
nodeJS实现简单网页爬虫功能的实例(分享)
Jun 08 NodeJs
基于nodejs实现微信支付功能
Dec 20 NodeJs
Nodejs中crypto模块的安全知识讲解
Jan 03 NodeJs
nodeJs实现基于连接池连接mysql的方法示例
Feb 10 NodeJs
nodejs实现获取本地文件夹下图片信息功能示例
Jun 22 NodeJs
NodeJS http模块用法示例【创建web服务器/客户端】
Nov 05 NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 NodeJs
分享node.js实现简单登录注册的具体代码
Apr 26 NodeJs
nodejs个人博客开发第七步 后台登陆
Apr 12 #NodeJs
nodejs个人博客开发第六步 数据分页
Apr 12 #NodeJs
nodejs个人博客开发第五步 分配数据
Apr 12 #NodeJs
nodejs个人博客开发第四步 数据模型
Apr 12 #NodeJs
nodejs个人博客开发第三步 载入页面
Apr 12 #NodeJs
nodejs个人博客开发第二步 入口文件
Apr 12 #NodeJs
nodejs个人博客开发第一步 准备工作
Apr 12 #NodeJs
You might like
用来解析.htgroup文件的PHP类
2012/09/05 PHP
thinkphp3.2.2实现生成多张缩略图的方法
2014/12/19 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
2018/05/24 PHP
Javascript实例教程(19) 使用HoTMetal(2)
2006/12/23 Javascript
mapper--图片热点区域高亮组件官方站点
2007/12/22 Javascript
javascript 写的一个简单的timer
2009/07/30 Javascript
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
JavaScript中的闭包
2016/02/24 Javascript
JS中使用DOM来控制HTML元素
2016/07/31 Javascript
微信小程序 MD5的方法详解及实例代码
2017/03/10 Javascript
jQuery is not defined 错误原因与解决方法小结
2017/03/19 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
angularjs 页面自适应高度的方法
2018/01/17 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
关于layui 弹出层一闪而过就消失的解决方法
2019/09/09 Javascript
详解vue 组件
2020/06/11 Javascript
[02:03]永远的信仰DOTA2 中国军团历届国际邀请赛回顾
2016/06/26 DOTA
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
搭建python django虚拟环境完整步骤详解
2019/07/08 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
tensorflow 变长序列存储实例
2020/01/20 Python
python 字符串的驻留机制及优缺点
2020/06/19 Python
Django如何在不停机的情况下创建索引
2020/08/02 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
测绘工程系学生的自我评价
2013/11/30 职场文书
爱耳日活动总结
2014/04/30 职场文书
建筑投标担保书
2014/05/20 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
《中国梦我的梦》大学生演讲稿
2014/08/20 职场文书
商铺门面租房协议书
2014/10/21 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers