一、构建一个接口
从上一篇文章中,仔细观察一下目录结构,不难发现,routes路由这块,就是我们放node服务定义放置路由的目录,原本生成了一个users文件,暂时用处不大,我们便可以直接更改这个路由。如图,分别更改一个getAccessToken.js。
然后我们到app.js中,把入口配置更改一下。
完毕,把文件更新到服务器,$ nodemon npm start
启动服务
然后到服务器输入:你的ip/getAccessToken,验证一下,如果是下图所示,那么恭喜你,第一步成功了!
二、改写getAccessToken接口
好的,上一步我们已经完成了接口,接下来就完善这个接口吧。
首先,建议先读一下微信的文档。了解一下access_token。
1. 创建json文件,存放access_token
2. 在js中引入json,并在接口输出测试
3. 在data目录创建config.json存放微信基本配置信息。
以上验证后,继续创建一个config.json文件,用于存放基本配置信息,内容如下:
{
"token":"WeiChartToken",
"appID":"wx00********396", // appid 微信公众平台查看
"appScrect":"326466*********e18f", // appScrect 微信公众平台查看
"apiDomain":"https://api.weixin.qq.com/",
"apiURL":{
"accessTokenApi":"%scgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"
}
}
4. getAccessToken.js文件内容
var express = require('express');
var https = require('https'); // 引入https模块
var util = require('util'); // 引入util工具包格式化路径
var fs = require('fs'); // 引入fs更新本地文件
var router = express.Router();
var accessTokenJson = require('../data/access_token');
var configJson = require('../data/config');
/* GET users listing. */
router.get('/', function(req, res, next) {
new Promise(function(resolve,reject) {
//获取当前时间
var currentTime = new Date().getTime();
//格式化请求地址
var url = util.format(configJson.apiURL.accessTokenApi,configJson.apiDomain,configJson.appID,configJson.appScrect);
//判断 本地存储的 access_token 是否有效
if (accessTokenJson.access_token === "" || accessTokenJson.expires_time < currentTime) {
https.get(url, function(res){
var buffer = [],result = "";
// 监听 data 事件
res.on("data",function(data){
buffer.push(data);
});
res.on("end",function() {
// result = JSON.stringify(Buffer.concat(buffer,buffer.length).toString('utf-8'));
var body = Buffer.concat(buffer);
result = JSON.parse(body);
if (body.indexOf("errcode") < 0) {
accessTokenJson.access_token = result.access_token;
accessTokenJson.expires_time = new Date().getTime() + (parseInt(result.expires_in) - 200) * 1000;
//更新本地存储的
fs.writeFile('/home/nodeApp/wxApp/data/access_token.json', JSON.stringify(accessTokenJson));
//将获取后的 access_token 返回
resolve(accessTokenJson.access_token);
} else {
//将错误返回
resolve(result);
}
})
}).on('error',function(err){
reject1(err);
});
} else {
//将本地存储的 access_token 返回
resolve(accessTokenJson.access_token);
}
}).then(function(data) {
res.send(data);
});
});
module.exports = router;
看到如下信息,就完成了
欢迎各位小伙伴补充。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。