详解nodejs微信公众号开发——2.自动回复

2020-06-17 07:00:48易采站长站整理

上一篇文章: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){ //构造函数,用以生成实例,完成初始化工作,读写票据