Node.js 微信公众号开发小试
申请服务器: 微信公众号的开发需要使用一台用于接收并处理消息的服务器, 此处推荐申请腾讯的免费云主机, 点我去申请吧, 每天九点半开抢, 我选择的服务器镜像是Ubuntu, 关于如何在服务器上配置Node环境, 可参考我另一篇博客使用 Linux 系统开发Web前端. 公众号开发的原理就是通过设置一个接收接口, 一旦开启开发者模式, 微信服务器将转发消息至该接口.
申请服务器
微信公众号的开发需要使用一台用于接收并处理消息的服务器, 此处推荐申请腾讯的免费云主机, 点我去申请吧, 每天九点半开抢, 我选择的服务器镜像是Ubuntu, 关于如何在服务器上配置Node环境, 可参考我另一篇博客使用 Linux 系统开发Web前端. 公众号开发的原理就是通过设置一个接收接口, 一旦开启开发者模式, 微信服务器将转发消息至该接口.
接入开发步骤
填写服务器配置
验证服务器地址的有效性
完成配置后, 服务器将收到来自微信的GET验证请求, 该请求包括如下参数:
- signature 微信加密签名, 使用开发者填写的token参数和请求中的timestamp参数、nonce参数进行加密
- timestamp 时间戳
- nonce 随机数
- echostr 随机字符串, 当验证通过时, 返回该字符串给微信服务器, 从而完成验证
验证流程
- 将token、timestamp、nonce三个参数进行字典序排序
- 将三个参数字符串拼接成一个字符串进行sha1加密
- 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
验证有效性的代码
1 | app.get('/wechat', (req, res) => { |
依据接口文档实现业务逻辑
以文本消息为例, 如下为微信转发至服务器的文本消息:
1
2
3
4
5
6
7
8<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[this is a test]]></Content>
<MsgId>1234567890123456</MsgId>
</xml>
消息处理:
1 | app.post('/wechat', (req, res) => { |
其中turingRobot用于向图灵机器人发送用户消息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20const request = require('request');
function getTuringResponse(info) {
if(typeof info !== 'string') {
info = info.toString();
}
let options = {
method:'GET',
url: 'http://www.tuling123.com/openapi/api?key=13a74dbd0f6b45d69ac49334e7027742&info='+info
};
return new Promise((resolve, reject) => {
request(options, (err, res, body) => {
if (res) {
resolve(body);
} else {
reject(err);
}
});
})
}
module.exports = getTuringResponse;
自动回复模块autoReply:
1 | function autoReply(requestData, info) { |
One More Thing
使用微信的官方的Node中间件, 可更方便高效地开发公众号
传送门
1 | const turingRobot = require('./turingRobot'); |
参考
Node.js 微信公众号开发小试