node.js 下使用 wechat 开发微信接口
文章目录
node.js 开发微信系列二
wechat 开发微信回调接口
上一篇我们介绍了 node.js下定时获取access_token
这里可能有个疑问,node.js 开发微信回调接口和定时获取 access_token 有关系吗?
其实没有必然的关系,通过微信回调接口我们可以方便的获取到交互者的 openid
但是,如果你想根据 openid 获取当前交互者的用户信息时,就必须要 access_token 了.
今天我们只谈 wechat 如何使用,获取用户详情在以后的博文中介绍.
微信公共平台消息接口服务中间件
github地址:
https://github.com/node-webot/wechat
开发文档:
http://doxmate.cool/node-webot/wechat/api.html
安装:
npm install wechat --save
wechat 使用
以 node.js 下 Express 框架为例.
wechat 非常友好的嫁接到了 Express 的 Router 模块.
在微信的回调过程中,和我们平时 Express 开发书写 Router 一样方便简单.
登录微信公众平台管理后台获取下图红框处的内容,用于开发中的配置
![tk.jpg](http://yijiebuyi.com/file/10537a39c7d0ecca56befe4c93940e17)
var wechat = require('wechat');
/**
* 下面的3个参数请 登录你微信公众号管理平台 token ,appid, encodingAESKey 如上图
*/
var wxconfig = {
token: 你的token,
appid: 你的appid,
encodingAESKey: 你的encodingAESKey
};
router.all('/wechat', wechat(wxconfig).text(function (message,req, res, next) {
var content=message.Content||'';
if(/help/.test(content)||/帮助/.test(content)||/HELP/.test(content)){
res.reply('Hi,小编等你很久了\n输入 帮助 或 help 获取帮助');
}else if(/里约/.test(content)||/奥运/.test(content)||/奖牌/.test(content)||/2016/.test(content)){
res.reply('奥运奖牌');
}else{
res.reply('您的反馈已收到,我们会定时回复.');
}
}).image(function (message, req, res, next) {
res.reply('图已收到');
}).voice(function (message, req, res, next) {
res.reply('语音已收到');
}).video(function (message, req, res, next) {
res.reply('视频已收到');
}).location(function (message, req, res, next) {
res.reply('地理位置已收到');
}).link(function (message, req, res, next) {
res.reply('链接已收到');
}).event(function (message, req, res, next) {
switch (message.Event) {
case 'subscribe':
var openid=message.FromUserName;
res.reply('欢迎关注一介布衣公众号');
break;
case 'unsubscribe':
var openid=message.FromUserName;
res.reply('亲,请不要离开我!!');
break;
default :
res.send('');
}
}).device_text(function (message, req, res, next) {
res.reply('设备消息已收到');
}).device_event(function (message, req, res, next) {
res.reply('设备事件已收到');
}).middlewarify());
以上定义一个路由,完成了微信回调的所有消息类型接收处理
其中需要注意的点:
为什么使用 router.all
因为我们第一次在微信公众管理后台验证接口时,调用的是 router.get 方法
一旦验证成功,微信以后的所有回调都是 router.post 方法.
所以直接写成了 router.all 同时支持 get 和 post 方法.
正则表达式匹配
else if(/里约/.test(content)||/奥运/.test(content)||/奖牌/.test(content)||/2016/.test(content))
类似上面这样的条件判断,是正则表达式匹配 上面几个关键词,如果有一个匹配到
回复对应的处理内容,一介布衣公众号提供 2016 里约奥运会奖牌榜前10名:
扫描右侧二维码关注公众号.
上面的代码做了明确的注释,你可以对微信各种消息的回调做处理
比如,订阅,取消 等.