详解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(三)--- Node.js模块
May 25 NodeJs
nodejs中实现sleep功能实例
Mar 24 NodeJs
nodejs开发微博实例
Mar 25 NodeJs
nodejs实现HTTPS发起POST请求
Apr 23 NodeJs
nodejs初步体验篇
Nov 23 NodeJs
NodeJs读取JSON文件格式化时的注意事项
Sep 25 NodeJs
NodeJS实现视频转码的示例代码
Nov 18 NodeJs
nodejs实现连接mongodb数据库的方法示例
Mar 15 NodeJs
nodejs require js文件入口,在package.json中指定默认入口main方法
Oct 10 NodeJs
nodejs中使用archive压缩文件的实现代码
Nov 26 NodeJs
Nodejs实现WebSocket代码实例
May 19 NodeJs
nodejs使用Sequelize框架操作数据库的实现
Oct 21 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 chmod 函数与批量修改文件目录权限
2010/05/10 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
2017/04/11 Javascript
vue.js使用watch监听路由变化的方法
2018/07/08 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
python用于url解码和中文解析的小脚本(python url decoder)
2013/08/11 Python
python中numpy基础学习及进行数组和矢量计算
2017/02/12 Python
python 文件操作删除某行的实例
2017/09/04 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
pandas 空数据处理方法详解
2019/11/02 Python
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
StubHub新加坡:购买和出售全球活动门票
2017/03/10 全球购物
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
高一物理教学反思
2014/01/24 职场文书
保护环境倡议书
2014/04/14 职场文书
关爱留守儿童倡议书
2014/04/15 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
技术股东合作协议书
2014/12/02 职场文书
倡议书作文
2015/01/19 职场文书
分享:关于学习的励志名言赏析
2019/08/16 职场文书
教你利用python实现企业微信发送消息
2021/05/23 Python
Python爬虫基础之初次使用scrapy爬虫实例
2021/06/26 Python
动画电影《龙珠超 超级英雄》延期上映
2022/03/20 日漫
TS 类型兼容教程示例详解
2022/09/23 Javascript