详解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的url截取模块url-extract的使用实例
Nov 18 NodeJs
Nodejs进程管理模块forever详解
Jun 01 NodeJs
Ubuntu中搭建Nodejs开发环境过程分享
Jun 01 NodeJs
nodejs分页类代码分享
Jun 17 NodeJs
Nodejs中自定义事件实例
Jun 20 NodeJs
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
Nov 20 NodeJs
nodejs中操作mysql数据库示例
Dec 20 NodeJs
用nodejs实现json和jsonp服务的方法
Aug 25 NodeJs
nodejs结合Socket.IO实现的即时通讯功能详解
Jan 12 NodeJs
基于Nodejs的Tcp封包和解包的理解
Sep 19 NodeJs
使用koa-log4管理nodeJs日志笔记的使用方法
Nov 30 NodeJs
nodejs微信开发之接入指南
Mar 17 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
PHP开发框架总结收藏
2008/04/24 PHP
php获取文章内容第一张图片的方法示例
2017/07/03 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
Javascript实现的分页函数
2007/02/07 Javascript
Javascript string 扩展库代码
2010/04/09 Javascript
深入理解JavaScript系列(4) 立即调用的函数表达式
2012/01/15 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
2012/06/20 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
Javascript对象属性方法汇总
2013/11/21 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
jQuery找出网页上最高元素的方法
2015/03/20 Javascript
创建一般js对象的几种方式
2017/01/19 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
wxpython 学习笔记 第一天
2009/02/09 Python
Python 自动化表单提交实例代码
2017/06/08 Python
python shell根据ip获取主机名代码示例
2017/11/25 Python
解决python3读取Python2存储的pickle文件问题
2018/10/25 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
如何使用 Flask 做一个评论系统
2020/11/27 Python
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
进修护士自我鉴定
2013/10/14 职场文书
2014党员学习《反腐倡廉警示教育读本》思想汇报
2014/09/13 职场文书
2014年学生会工作总结
2014/11/07 职场文书
2014年法务工作总结
2014/12/11 职场文书
大连星海广场导游词
2015/02/10 职场文书
通知格式
2015/04/27 职场文书
雷锋电影观后感
2015/06/10 职场文书
孕妇病假条怎么写
2015/08/17 职场文书
MySQL 视图(View)原理解析
2021/05/19 MySQL
Django使用channels + websocket打造在线聊天室
2021/05/20 Python
使用CSS实现音波加载效果
2023/05/07 HTML / CSS