3.Node.js 自定义微信菜单
来源:互联网 发布:淘宝网 雪嫦娥多肉植物 编辑:程序博客网 时间:2024/05/16 09:26
文章目录:
1.Node.js 接入微信公众平台开发
2.Node.js access_token的获取、存储及更新
3.Node.js 自定义微信菜单
4.Node.js 微信消息管理
一、写在前面的话
上一篇文章中,我们使用 Node.js 成功的实现了access_token 的获取、存储以及更新,这篇文章我们来实现微信的自定义菜单功能。
二、自定义微信菜单
1.微信文档步骤
在开始码代码之前,我们依然是先理清实现的思路,再开始编写实现代码。打开 微信帮助文档 ,点击左侧菜单中的 自定义菜单,点击其子菜单 自定义菜单创建接口,如图:
由上图我们总结以下步骤:
- 自定义微信请求是以 https POST请求方式
- 数据是以 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,最后感谢您的阅读。
- 3.Node.js 自定义微信菜单
- 微信自定义菜单
- 微信自定义菜单
- 微信自定义菜单
- 微信自定义菜单
- 微信自定义菜单
- 微信自定义菜单
- 自定义微信菜单
- 微信自定义菜单
- 微信实现自定义菜单
- 微信开发 -- 自定义菜单
- 微信自定义菜单PHP
- 微信开发-自定义菜单
- 微信自定义菜单流程
- 微信自定义菜单添加
- 微信之自定义菜单
- 微信自定义菜单扩容?
- 微信自定义菜单生成器
- App Store关键词设置加多少加逗号好?
- 根据需求对数据中查询的数据进行排序
- 走出开发混沌
- 无线通信原理及协议栈(ZigBee、蓝牙等)解析
- 修改tomcat端口号
- 3.Node.js 自定义微信菜单
- 关于专人整理和分析需求
- MYSQL 优化常用方法
- 关于cocos tableView的数据刷新后位置不变
- linux之awk用法
- 尝试博客第一篇
- IO流学习笔记(二)之BufferedWriter与BufferedReader及实例Demo
- Java 计算器
- 把oracle数据库所在电脑 备份的dmp文件,在dos命令利用CURL命令直接发HTTP请求上传到应用服务器