文章目录:
        1.Node.js 接入微信公众平台开发
        2.Node.js access_token的获取、存储及更新
        3.Node.js 自定义微信菜单
        4.Node.js 微信消息管理

一、写在前面的话

  上一篇文章中,我们使用 Node.js 成功的实现了access_token 的获取、存储以及更新,这篇文章我们来实现微信的自定义菜单功能。

二、自定义微信菜单

1.微信文档步骤
  在开始码代码之前,我们依然是先理清实现的思路,再开始编写实现代码。打开 微信帮助文档 ,点击左侧菜单中的 自定义菜单,点击其子菜单 自定义菜单创建接口,如图:

  由上图我们总结以下步骤:

  1. 自定义微信请求是以 https POST请求方式
  2. 数据是以 JSON 格式传入

2.实现 https POST请求

  紧接着上一篇文章的代码,源码地址: https://github.com/SilenceHVK/wechatByNode ,克隆到本地文件中

git clone git@github.com:SilenceHVK/wechatByNode.git

  打开 wechat 文件夹中的 wechat.js 文件,并在 WeChat 构造函数内部添加 requestPost 方法

//用于处理 https Post请求方法this.requestPost = function(url,data){return new Promise(function(resolve,reject){//解析 url 地址var urlData = urltil.parse(url);//设置 https.request  options 传入的参数对象var options={//目标主机地址hostname: urlData.hostname, //目标地址 path: urlData.path,//请求方法method: 'POST',//头部协议headers: {'Content-Type': 'application/x-www-form-urlencoded','Content-Length': Buffer.byteLength(data,'utf-8')}};var req = https.request(options,function(res){var buffer = [],result = '';//用于监听 data 事件 接收数据res.on('data',function(data){buffer.push(data);});//用于监听 end 事件 完成数据的接收res.on('end',function(){result = Buffer.concat(buffer).toString('utf-8');resolve(result);})})//监听错误事件.on('error',function(err){console.log(err);reject(err);});//传入数据req.write(data);req.end();});}

  在上一篇文章中,我们使用到了 https 的 get 方法发。实际上 https 用于请求的底层方法则是 request 方法,而 get 方法 只是对它的一个封装,但是 Node.js 却没有对 post 进行封装,直到现在 Node.js 8.0 依然没有。具体详情请看 Node.js 中文文档。

提示:

   npm 提供了很多用于请求的工具包,比如 request ( 安装命令 npm install request ) 等。这里我只是用系统包去做请求处理。

3.配置创建微信菜单的连接
  打开 项目文件中的 config.json 文件,在 apiURL 中添加配置:

"createMenu":"%scgi-bin/menu/create?access_token=%s"

4.微信菜单 JSON 格式
  完成了上面的工作后,我们就可以开始微信菜单的创建了。按照微信帮助中菜单示例格式,我们自己定义一个 JSON 格式:

{"button":[{   "type":"view","name":"hvkcoder","url":"http://blog.csdn.net/hvkcoder"},{   "type":"click","name":"今日推荐","key":"today_recommend"},{   "name":"小工具","sub_button":[{"type": "scancode_waitmsg", "name": "扫一扫","key": "scancode"},{"type": "pic_sysphoto", "name": "系统拍照发图","key": "take_photo"},{"type": "location_select", "name": "发送位置","key": "send_location"}]}]
}

并将它存放在 wechat 文件夹中的 menus.json 文件,如图:

5.请求创建菜单API
  将 menus.json 文件在 wechat.js 文件中引用。这块呢,我就直接在微信接入的方法中去做菜单的创建:

var that = this;this.getAccessToken().then(function(data){//格式化请求连接var url = 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/wechatByNode 。对文章有不正确之处,请给予纠正。github源代码请顺手给个 Star,最后感谢您的阅读。

【Node.js 微信公众号实战】3.Node.js 自定义微信菜单相关推荐

  1. 视频教程-微信公众号实战(Java版本,带前后台)-微信开发

    微信公众号实战(Java版本,带前后台) 2018年5月创办 威海科进网络科技有限公司,这里的视频主要是为了做个记录,方便员工提升自己的水平 陈健 ¥29.00 立即订阅 扫码下载「CSDN程序员学院 ...

  2. 微信公众号开发C#系列-12、微信前端开发利器:WeUI

    本文目录 1.前言 2.WeUI基本介绍 2.1 WeUI概述 2.2 为什么选择jQuery WeUI 3.jQuery WeUI基本用法 4.其他基础组件展示 4.1.switch开关 4.2.文 ...

  3. 实例:用C#.NET手把手教你做微信公众号开发(20)--使用微信支付线上收款:jsapi方式

    在做线上.线下销售时,可以使用微信便捷支付,通过微信公众号收款有很多种收款方式,如下图: 今天我们来讲一下jsapi支付,场景就是在微信内打开某个页面,完成在线支付,同样一个网页,使用微信打开就是js ...

  4. 实例:用C#.NET手把手教你做微信公众号开发(21)--使用微信支付线上收款:H5方式

    在做线上.线下销售时,可以使用微信便捷支付,通过微信公众号收款有很多种收款方式,如下图: 今天我们来讲一下H5场景支付,使用手机浏览器打开就是H5方式,最常见的推广是短信内置链接,这种场景需要调用微信 ...

  5. 微信公众号Java开发-笔记01【微信公众号介绍、开发环境搭建】

    学习网址:哔哩哔哩网站 微信公众号开发-Java版 微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] 微信公众号Java开发-笔记02[] 微信公众号Java开发-笔记03[] 微信公 ...

  6. 2014-07-24 .NET实现微信公众号的消息回复与自定义菜单

    今天是在吾索实习的第12天.我们在这一天中,基本实现了微信公众号的消息回复与自定义菜单的创建. 首先,是实现消息回复,其关键点如下: 读取POST来的数据流:Stream 数据流变量 = HttpCo ...

  7. 微信公众号数据2019_微信公众号榜单排名,2020微信公众号排名

    微信公众号榜单排名,2020微信公众号排名 公众号排名优化的注意事项及细节今天给大家分享一下,作为微信公众号的排名优化对于大多数人来说都已经知道了有这个渠道的事情,其实很多的新产品及渠道出来以后有不少 ...

  8. 微信公众号开发之使用eclipse创建微信web工程并发布到BAE测试

    本篇博文主要是讲一下在eclipse上创建一个微信web工程并发布到BAE上,其中会讲一些应该注意的问题 1.切入正题,为了减少麻烦,我使用百度提供的一键安装版的Eclipse,下载地址:http:/ ...

  9. 微信公众号本地环境搭建(解决微信接口需要公网地址,但是只有本地环境的问题)

    微信公众号本地环境搭建(解决微信接口需要公网地址,但是只有本地环境的问题) 置顶2018年01月08日 17:22:13 阅读数:342 目前移动开发处于比较火的的趋势,很多的开发者都跃跃欲试,目前移 ...

  10. 微信公众号怎么推送消息_微信公众号发送消息

    A.模板消息发送 模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等.不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息. 备注 ...

最新文章

  1. Network| ICMP
  2. 786. 第 K 个最小的素数分数
  3. MESI--CPU缓存一致性协议
  4. groovy和java结合使用
  5. 升级AndrOid4.3,谷歌发布Android 4.3系统 今日开始升级
  6. 进程上下文切换 – 残酷的性能杀手(上)
  7. 三星位置共享服务器,三星智能共享怎么用?三星智能共享图文详细使用教程
  8. puppeteer 初步实战 测试
  9. robots文件的作用
  10. Carson带你学Android:RxJava、Retrofit联合使用汇总(含实例教程)
  11. 控件测试之单行文本框测试
  12. tableau过期解决办法
  13. python列表同时添加多个元素_python怎么向列表中添加多个元素
  14. js编写计算圆周长和面积
  15. mssql 计划怎每隔n秒_4个步骤,教你定制超科学的跑步计划
  16. Power OJ 2844: New contest【模拟】
  17. 10组团队项目-中期总结
  18. 地图之间经纬度转换靠谱吗
  19. 从零开始入门密码学_1
  20. XTransfer欧美本地账户可以收哪些地区的币种?

热门文章

  1. 最适宜工作的30家科技公司|排行榜
  2. 浅谈 C++ 元编程
  3. 关于Window audio服务未运行的解决方案
  4. 怎么解决sockjs.js?9be2:1609 GET http://192.168.0.133:8080/sockjs-node/info?t=1630545142551 net::ERR_NETW
  5. 基于雷达-非接触式传感器的高次谐波峰值选择方法的准确心率和呼吸率检测
  6. 公司电池包生产线的优化研究
  7. domestic gpu
  8. postfix端口修改linux下发送email的smtp端口unbuntu
  9. Jordan矩阵、可逆矩阵、最小多项式的求法,对角化的判断
  10. 强缓存和协商缓存区别和过程