node.js 下使用 wechat 开发微信接口

wt.jpg

node.js 开发微信系列二

wechat 开发微信回调接口

上一篇我们介绍了 node.js下定时获取access_token

这里可能有个疑问,node.js 开发微信回调接口和定时获取 access_token 有关系吗?

其实没有必然的关系,通过微信回调接口我们可以方便的获取到交互者的 openid 但是,如果你想根据 openid 获取当前交互者的用户信息时,就必须要 access_token 了.

今天我们只谈 wechat 如何使用,获取用户详情在以后的博文中介绍.

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名: 扫描右侧二维码关注公众号.

aoyun.jpg

上面的代码做了明确的注释,你可以对微信各种消息的回调做处理 比如,订阅,取消 等.

出自:node.js 下使用 wechat 开发微信接口



回到顶部