nodejs微信公衆號開發——6.自定義菜單

上一篇文章:nodejs微信公衆號開發——5.素材管理接口,咱們實現了新增臨時素材、管理永久素材的接口,這些接口的實現,使咱們可以推送多樣的消息給用戶。本節介紹的內容是關於自定義菜單 (項目github地:https://github.com/Panfen/wem... )html

1. 自定義菜單的介紹

自定義菜單可以幫助公衆號豐富界面,讓用戶更好更快地理解公衆號的功能。關於自定義菜單須要掌握如下幾點內容:node

  • 自定義菜單最多包括3個一級菜單,每一個一級菜單最多包含5個二級菜單。
  • 一級菜單最多4個漢字,二級菜單最多7個漢字,多出來的部分將會以「...」代替。
  • 建立自定義菜單後,因爲微信客戶端緩存,須要24小時微信客戶端纔會展示出來。測試時能夠嘗試取消關注公衆帳號後再次關注,則能夠看到建立後的效果。

更多信息查看官方文檔:自定義菜單建立接口git

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文件中:github

/*
 * 配置自定義菜單
 */
'use strict'

module.exports = {
    'button':[
     {    
        'type':'click',
        'name':'最新',
        'key':'V1001_TODAY_MUSIC'
     },
     {
        'name':'類別',
        'sub_button':[
        {    
             'type':'click',
          'name':'科幻',
          'key':'V1001_TYPE_KEHUAN'
        },
        {
          'type':'click',
          'name':'懸疑',
          'key':'V1001_TYPE_KXUANYI'
        },
        {
          'type':'click',
          'name':'愛情',
          'key':'V1001_TYPE_AIQING'
        },
        {
          'type':'click',
          'name':'教育',
          'key':'V1001_TYPE_JIAOYU'
        }]
         },
         {
        'name':'地域',
        'sub_button':[
        {    
             'type':'click',
          'name':'大陸',
          'key':'V1001_AREA_DALU'
        },
        {
          'type':'click',
          'name':'歐美',
          'key':'V1001_AREA_OUMEI'
        }]
    }]
}

裏面的類型暫時隨意寫的。咱們在業務層weixin.js裏面實現自定義菜單的使用:json

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

保險起見先把原有的菜單刪了,從新創建本身新的菜單。segmentfault

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);
            });
        });
    });
}

測試了一下,取關從新關注後微信測試號並無當即呈現自定義菜單,要等一段時間,略坑。
圖片描述api

相關文章
相關標籤/搜索