当前位置: 首页 > 后端技术 > Node.js

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

时间:2023-04-03 14:15:55 Node.js

上一篇:nodejs微信公众号开发——5.素材管理界面,我们实现了添加临时素材和管理永久素材的接口。接口的实现使我们能够向用户推送各种消息。本节介绍的内容是关于自定义菜单的(项目github地址:https://github.com/Panfen/wem...)1.自定义菜单介绍自定义菜单可以帮助公众号丰富界面,让用户理解公众号的功能更好更快。关于自定义菜单,需要掌握以下几点:自定义菜单最多包含3个一级菜单,每个一级菜单最多包含5个二级菜单。一级菜单最大汉字数为4个,二级菜单最大汉字数为7个,多余的部分用“……”代替。创建自定义菜单后,由于微信客户端的缓存问题,需要24小时才能在微信客户端显示出来。测试过程中,可以尝试取消关注公众号,重新关注,创建后即可看到效果。详见官方文档:自定义菜单创建接口2、创建自定义菜单2.1首先列出请求地址,进行如下操作:varapi={...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){varthat=this;returnnewPromise(function(resolve,reject){that.fetchAccessToken().then(function(data){varurl=api.menu.create+'access_token='+data.access_token;请求({url:url,方法:'POST',body:menu,json:true}).then(function(response){var_data=response.body;if(_data.errcode===0){resolve();}else{抛出新错误('创建菜单失败!');}}).catch(函数(错误){拒绝(错误);});});});}参数menu是从外部业务层传入的为了方便管理,将自定义菜单的内容单独写在一个menu.js文件中:/**配置自定义菜单*/'usestrict'module.exports={'button':[{'type':'click','name':'latest','key':'V1001_TODAY_MUSIC'},{'name':'category','sub_button':[{'type':'click','name':'科幻','key':'V1001_TYPE_KEHUAN'},{'type':'click','name':'suspense','key':'V1001_TYPE_KXUANYI'},{'type':'click','name':'love','key':'V1001_TYPE_AIQING'},{'type':'click','name':'education','key':'V1001_TYPE_JIAOYU'}]},{'name':'region','sub_button':[{'type':'click','name':'Mainland','key':'V1001_AREA_DALU'},{'type':'click','name':'Europe','key':'V1001_AREA_OUMEI'}]}]}中的类型暂时随机写入。我们在业务层weixin.js实现自定义菜单的使用:wechatApi.deleteMenu().then(function(){returnwechatApi.createMenu(menu);}).then(function(msg){console.log(msg);});为了保险起见,删除原来的菜单,新建一个菜单。2.3定义deleteMenu函数Wechat.prototype.deleteMenu=function(){varthat=this;returnnewPromise(function(resolve,reject){that.fetchAccessToken().then(function(data){varurl=api.menu.delete+'access_token='+data.access_token;请求({url:url,json:true}).then(function(response){var_data=response.body;if(_data.errcode===0){resolve();}else{thrownewError('删除菜单失败!');}}).catch(function(err){reject(err);});});});}测试一下,取消后重新关注,微信测试号并没有立即显示自定义菜单,花了一个等待的时候。