還是老樣子,在自學node.js的道路上走得坑坑窪窪,按住了躁動的自己,調整好心情 ,ready........Go....!
首先在項目里新建config.json,其中 appid 與 appscrect 兩個參數 位於 微信公眾平台 左側菜單的基本配置中:
代碼塊如下:
{ "token": "wechat", "appID": "wx376********7243e", "appScrect": "8962157f61*************1e04d244a", "apiDomain": "https://api.weixin.qq.com/", "apiURL": { "accessTokenApi": "%scgi-bin/token?grant_type=client_credential&appid=%s&secret=%s" } }
接下來我新建accessToken.js,主要用於封裝獲取access_tocken的方法(名字隨意)
一成不變,依賴選擇:
代碼塊如下,這里引入的配置config就是上面基本配置:
'use strict'; // ↑ 設置為嚴格模式 //引入依賴 const util = require("util") const https = require("https"); //引入配置文件 const config = require("../config");
且,我這里定義的是全局變量用來存token,這里的存取的方法有很多種;比如:存為cookie,session,更新本地存儲等......
代碼塊如下:
//全局 const accessTokenJson = { access_token: "", expires_time: "" };
接下來就是獲取access_tocken的方法:
代碼塊如下:
/** * 獲取access_tocken的方法 */ const auth = { getAccessToken: err => { return new Promise(resolve => { //獲取當前時間 const currentTime = new Date().getDate(); //格式化請求地址 let url = util.format(config.apiURL.accessTokenApi, config.apiDomain, config.appID, config.appScrect); if (accessTokenJson.access_token == "" || accessTokenJson.expires_time < currentTime) { https.get(url, res => { const buffer = []; //監聽 res.on('data', data => { buffer.push(data); }); res.on('end', err => { let data = Buffer.concat(buffer).toString('utf-8'); let result = JSON.parse(data); console.log(result); //放入全局 accessTokenJson.access_token = result.access_token; accessTokenJson.expires_time = new Date().getTime() + (parseInt(result.xpires_in) - 200) * 1000; resolve(accessTokenJson.access_token); }); }).on("error", err => { console.log(err) }); } else { resolve(accessTokenJson.access_token); } }); } }; //test 主函數 auth.getAccessToken(); /** 暴露可供外部訪問的接口 * module.exports = auth; */
最后,這里直接 node accessToken.js 就Ok了。
PS:最后注釋:暴露可供外部訪問的接口 可以理解為這個可以封裝為一個單一的方法,供其調用。
例如,在其他js中可以直接引入:
代碼塊如下:
'use strict'; const token = require("./accessToken"); token.getAccessToken().then(res => { //console.log(res) }).catch(err => { //console.log(err); })
獲取access_token效果圖:
越努力,越幸運。