【Node.js+Express微信公衆號開發】第二步:編寫獲取access_token接口

一、構建一個接口

從上一篇文章中,仔細觀察一下目錄結構,不難發現,routes路由這塊,就是我們放node服務定義放置路由的目錄,原本生成了一個users文件,暫時用處不大,我們便可以直接更改這個路由。如圖,分別更改一個getAccessToken.js。

clipboard.png

然後我們到app.js中,把入口配置更改一下。
clipboard.png

完畢,把文件更新到服務器,$ nodemon npm start啓動服務

然後到服務器輸入:你的ip/getAccessToken,驗證一下,如果是下圖所示,那麼恭喜你,第一步成功了!

clipboard.png

二、改寫getAccessToken接口

好的,上一步我們已經完成了接口,接下來就完善這個接口吧。
首先,建議先讀一下微信的文檔。瞭解一下access_token。

1. 創建json文件,存放access_token

clipboard.png

2. 在js中引入json,並在接口輸出測試

clipboard.png

clipboard.png

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;

看到如下信息,就完成了

clipboard.png

歡迎各位小夥伴補充。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章