上一篇文章:nodejs微信公众号开发(1)接入微信公众号,本篇文章将在此基础上实现简单的回复功能。
1. 接入代码的优化
之前我们简单粗暴的实现了微信公众号的接入,接入的代码直接写在了
app.js文件里面,从项目开发的角度而言,不便于日后代码的维护,所以将这部分代码独立出来,按照
koa的风格,写成一个中间件。在根目录下新建
wechat文件夹,新建
generator.js文件,
var sha1 = require('sha1');module.exports = function(opts){
return function *(next){
var token = opts.token;
var signature = this.query.signature;
var nonce = this.query.nonce;
var timestamp = this.query.timestamp;
var echostr = this.query.echostr;
var str = [token,timestamp,nonce].sort().join('');
var sha = sha1(str);
this.body = (sha === signature) ? echostr + '' : 'failed';
};
}
此时
app.js的内容变成:
'use strict'var Koa = require('koa');
var wechat = require('./wechat/generator');
var config = {
wechat:{
appID:'...',
appSecret:'...',
token:'...'
}
};
var app = new Koa();
app.use(wechat(config.wechat));
app.listen(8080);
console.log('Listening 8080...')
2. 获取access_token
access_token是开发程序与wexin公众平台交互的一把钥匙,调用绝大部分接口都需要用到
access_token。
access_token的特点: 有效期为2小时(7200s),过期自动失效,需要重新获取;
只要更新了access_token,之前的access_token自动失效;
解决方案:
系统每隔2小时自动去获取一下access_token的值,确保access_token始终是有效的;
为了方便频繁调用,将access_token存储在唯一的一个地方(数据库、文件等),所有子系统都能访问。
程序中采用构造函数的方式,在生成实例,完成初始化工作的的过程中,读取存储在
config/wechat.txt文件中的票据,判断是否为空且是否过期,选择性的重新获取数字并且保存在原文件里面,关于获取access_token的官方文档介绍可见:获取access_token。
function Wechat(opts){ //构造函数,用以生成实例,完成初始化工作,读写票据









