美文网首页
node 开发微信公众号(二. access_token的获取、

node 开发微信公众号(二. access_token的获取、

作者: Sxy97 | 来源:发表于2018-02-23 17:58 被阅读0次

推荐微信开发入门教程: 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 取得了,我们就可以和接口愉快的玩耍了

相关文章

网友评论

      本文标题:node 开发微信公众号(二. access_token的获取、

      本文链接:https://www.haomeiwen.com/subject/rgwxxftx.html