一、構建一個接口
從上一篇文章中,仔細觀察一下目錄結構,不難發現,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;
看到如下信息,就完成了
歡迎各位小夥伴補充。