推荐微信开发入门教程: https://cnodejs.org/topic/59294bff9e32cc84569a746a
分两步走:
1.判断access_token是否为空或是否过期
2.发起get请求进行access_token的获取,存储(如果没有过期就不用关了)
开始coding吧
首先 新建accessTokenJson.json文件存储accessToken
//accessTokenJson.json
{
"access_token":"",
"expires_time":""
}
var config={
"token":"*****",
"appID":"wx6e*******cabb",
"appScrect":"ecd21c*****************7a6f53eba",
"apiDomain":"https://api.weixin.qq.com/",
"apiURL":{
"accessTokenApi":"%scgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"
}
}
//获取access_tocken 的方法
function getAccessToken(){
return new Promise(function (resolve, reject) {
//获取当前时间
var currentTime = new Date().getTime();
//格式化请求地址
var url = util.format(config.apiURL.accessTokenApi, config.apiDomain, config.appID, config.appScrect);
//判断 本地存储的 access_token 是否有效
if (accessTokenJson.access_token === "" || accessTokenJson.expires_time < currentTime) {
this.requestGet(url).then(function (data) {
var result = JSON.parse(data);
if (data.indexOf("errcode") < 0) {
accessTokenJson.access_token = result.access_token;
accessTokenJson.expires_time = new Date().getTime() + (parseInt(result.expires_in) - 200) * 1000;
//更新本地存储的
fs.writeFile('./accessToken.json', JSON.stringify(accessTokenJson),function(err){
if(err){
console.log(err)
}
console.log("save assess_token success")
});
//将获取后的 access_token 返回
resolve(accessTokenJson.access_token);
} else {
//将错误返回
resolve(result);
}
}).catch(function (err) {
console.log(err)
});
} else {
//将本地存储的 access_token 返回
resolve(accessTokenJson.access_token);
}
});
}
//https get请求方法
function requestGet(url){
return new Promise(function (resolve, reject) {
https.get(url, function (res) {
var buffer = [], result = "";
//监听 data 事件
res.on('data', function (data) {
buffer.push(data);
});
//监听 数据传输完成事件
res.on('end', function () {
var data = Buffer.concat(buffer).toString('utf-8');
//将最后结果返回
resolve(data);
});
}).on('error', function (err) {
console.log(err)
reject(err);
});
});
}
}
将获取access_token的方法放到中间件中每次请求都要判断,好了access_token 取得了,我们就可以和接口愉快的玩耍了