1、上一篇文章写的是什么上一篇我们使用Node.js成功实现了获取、存储和更新关于access_token,本文我们将实现微信的自定义菜单功能。二、自定义微信菜单1、微信文档步骤??在开始敲代码之前,我们还是先理清实现思路,然后开始编写实现代码。打开微信帮助文档,点击左侧菜单中的自定义菜单,点击其子菜单,创建自定义菜单的界面,如图:由上图,我们总结出以下步骤:自定义微信请求在httpsPOST请求的形式,数据以JSON格式传入2.实现httpsPOST请求按照上一篇文章的代码,源码地址:https://github.com/SilenceHVK...,clonegitclonegit@github.com:SilenceHVK/wechatByNode.git打开wechat文件夹下的wechat.js文件,在微信构造函数里面添加requestPost方法//用于处理httpsPost请求方法this.requestPost=function(url,data){returnnewPromise(function(resolve,reject){//解析url地址varurlData=urltil.parse(url);//设置https.request传入的参数对象optionsvaroptions={//目标主机地址hostname:urlData.hostname,//目标地址路径:urlData.path,//请求方法method:'POST',//headprotocolheaders:{'Content-Type':'application/x-www-form-urlencoded','Content-Length':Buffer.byteLength(data,'utf-8')}};varreq=https.request(options,function(res){varbuffer=[],result='';//用于监听数据事件接收数据res.on('data',function(data){buffer.push(data);});//用于监听end事件完成数据接收res.on('end',function(){result=Buffer.concat(buffer).toString('utf-8');resolve(result);})})//监听错误events.on('error',function(err){console.log(err);reject(err);});//传入数据req.write(data);请求结束();});}??在上一篇文章中,我们使用了https的get方法。其实https的底层方法就是request方法,get方法只是对它的封装。但是Node.js没有封装post,Node.js8.0还是没有。具体请查看Node.js中文文档。提示:npm提供了很多request的工具包,比如request(安装命令npminstallrequest)等。这里我只是使用系统包进行请求处理。3.配置连接创建微信菜单打开工程文件中的config.json文件,在apiURL中添加配置:"createMenu":"%scgi-bin/menu/create?access_token=%s"4.微信menuJSON格式完成完成以上工作后,我们就可以开始创建微信菜单了。根据微信帮助中的菜单示例格式,我们自己定义一个JSON格式:{"button":[{"type":"view","name":"hvkcoder","url":"http://www.cnblogs.com/hvkcode/"},{"type":"click","name":"今日推荐","key":"today_recommend"},{"name":"Widget","sub_button":[{"type":"scancode_waitmsg","name":"扫描","key":"scancode"},{"type":"pic_sysphoto","name":"系统拍照并发送图片","key":"take_photo"},{"type":"location_select","name":"sendlocation","key":"send_location"}]}]}保存在微信的menus.json中folder文件,如图:5.请求创建菜单API引用wechat.js文件中的menus.json文件。这部分我直接在微信访问方法中创建菜单:varthat=this;this.getAccessToken().then(function(data){//格式化请求连接varurl=util.format(that.apiURL.createMenu,that.apiDomain,data);//使用Post请求创建微信菜单that.requestPost(url,JSON.stringify(menus)).then(function(data){//打印结果到console.log(data);});});如果你当前使用的是订阅号,那么对不起朋友们,你会在运行结果中看到:??错误的意思是:api未授权。腾讯本着“没钱玩就瘫痪”的态度,指出有订阅号的朋友不能通过api请求自定义菜单。不过不要难过,因为腾讯还是很贴心的为我们准备测试公众号,再次打开微信帮助文档,点击右侧开始开发,点击其子菜单界面测试号申请,如图图:在手机上使用微信,扫描两个二维码后,我们得到了测试公众号。其他信息我们不用管理,主要修改appID和appsecret,将access_token.json中保存的数据改为:{"access_token":"","expires_time":0},然后重新运行。是不是很简单?扫一扫测试二维码公众号??每次只需要更改menus.json文件重新请求即可。可以更改菜单的效果。文章源码:https://github.com/SilenceHVK...。文中如有不准确之处,敬请指正。请给github源码一个Star,最后感谢阅读。
