详解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的require模块(文件模块/核心模块)及路径介绍
Jan 14 NodeJs
NodeJS Express框架中处理404页面一个方式
May 28 NodeJs
nodejs中实现路由功能
Dec 29 NodeJs
NodeJS学习笔记之FS文件模块
Jan 13 NodeJs
Nodejs express框架一个工程中同时使用ejs模版和jade模版
Dec 28 NodeJs
NodeJS中的MongoDB快速入门详细教程
Nov 11 NodeJs
Nodejs实现短信验证码功能
Feb 09 NodeJs
Nodejs中使用captchapng模块生成图片验证码
May 18 NodeJs
nodejs实现简单的gulp打包
Dec 21 NodeJs
Nodejs实现爬虫抓取数据实例解析
Jul 05 NodeJs
深入理解nodejs搭建静态服务器(实现命令行)
Feb 05 NodeJs
nodejs实现UDP组播示例方法
Nov 04 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实现HTML生成PDF文件的方法
2014/11/07 PHP
php 的反射详解及示例代码
2016/08/25 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
一段效率很高的for循环语句使用方法
2007/08/13 Javascript
通过url查找a元素应用案例
2014/04/29 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
谈谈对offsetleft兼容性的理解
2015/11/11 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
vue的mixins属性详解
2018/03/14 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
python从网络读取图片并直接进行处理的方法
2015/05/22 Python
利用python批量给云主机配置安全组的方法教程
2017/06/21 Python
使用requests库制作Python爬虫
2018/03/25 Python
python:print格式化输出到文件的实例
2018/05/14 Python
Python+pandas计算数据相关系数的实例
2018/07/03 Python
python制作抖音代码舞
2019/04/07 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
英国性感内衣和睡衣品牌:Bluebella
2018/01/26 全球购物
MYPROTEIN澳大利亚官方网站:欧洲运动营养品牌
2019/06/26 全球购物
信息专业学生学习的自我评价
2014/02/17 职场文书
司法局火灾防控方案
2014/06/05 职场文书
人力资源管理求职信
2014/08/07 职场文书
80后婚前协议书范本
2014/10/24 职场文书
工程部文员岗位职责
2015/02/04 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
小组口号霸气押韵
2015/12/24 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书