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

1、構建一個接口

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

clipboard.png

而後咱們到app.js中,把入口配置更改一下。
clipboard.pngexpress

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

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

clipboard.png

2、改寫getAccessToken接口

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

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

歡迎各位小夥伴補充。app

相關文章
相關標籤/搜索