access_token
微信文檔里存在兩種access_token:普通 access_token 和 網頁授權 access_token。具體區別參考:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
以下提到的 access_token 均為普通的 access_token
1. 首先我們先去看看是如何請求 access_token 的? 微信公眾平臺技術文檔
GET請求:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
正常返回:{"access_token":"ACCESS_TOKEN","expires_in":7200}
錯誤返回:{"errcode":40013,"errmsg":"invalid appid"}
2. 所以獲取 access_token 的代碼如下:
const request = require('request') // 請安裝第三方包 requestrequest.get({ uri: 'https://api.weixin.qq.com/cgi-bin/token', json: true, qs: { grant_type: 'client_credential', appid: APPID, // APPID請換成你的 appid secret: APPSECRET // APPSECRET請換成你的 appsecret } }, (err, res, body) => { if (err) { console.log(err) return } console.log(body) if (body.errcode) { // 返回錯誤時的處理 return }})3. guard_dog 實現數據持久化和定時刷新
guard_dog 會生成 .dog 文件,每個文件對應一個KEY
const guard_dog = require('guard_dog') // 請安裝第三方包 guard_dogguard_dog.init(KEY, (handler) => { // KEY是guard_dog存取數據的鍵名 // 拿到數據后調用 handler handler(DATA, EXPIREDS_IN) // DATA是要持久化的數據,EXPIREDS_IN是數據的有效時間,單位是秒}, DIR) // DIR是 .dog 文件的存放目錄,這個參數可以不傳4. 現在把以上兩塊代碼合并起來就是我們要的效果
const request = require('request')const guard_dog = require('guard_dog')guard_dog.init('ACCESS_TOKEN', (handler) => { request.get({ uri: 'https://api.weixin.qq.com/cgi-bin/token', json: true, qs: { grant_type: 'client_credential', appid: APPID, // APPID請換成你的 appid secret: APPSECRET // APPSECRET請換成你的 appsecret } }, (err, res, body) => { if (err) { console.log(err) return } console.log(body) if (body.errcode) { return } handler(body.access_token, body.expires_in) })}) // 如有需要指定目錄,可以再給 guard_dog.init 多傳個參數5. guard_dog 初始化這個 key 之后,獲取到的都是有效的值了。guard_dog 獲取值代碼如下:
guard_dog.get('ACCESS_TOKEN', (data) => { // 上面初始化時用的鍵名為'ACCESS_TOKEN',所以這里取值也要用這個鍵名 // 在這里拿到的 data 就是 access_token 了})6.如果想用著方便點,可以直接封裝成一個模塊
access_token.js
const request = require('request')const guard_dog = require('guard_dog')// 加載這個模塊的時候給 ACCESS_TOKEN 這個鍵名初始化guard_dog.init('ACCESS_TOKEN', (handler) => { request.get({ uri: 'https://api.weixin.qq.com/cgi-bin/token', json: true, qs: { grant_type: 'client_credential', appid: APPID, // APPID請換成你的 appid secret: APPSECRET // APPSECRET請換成你的 appsecret } }, (err, res, body) => { if (err) { console.log(err) return } console.log(body) if (body.errcode) { return } handler(body.access_token, body.expires_in) })}) // 只要向外暴露一個獲取值的方法就可以了module.exports = function (callback) { guard_dog.get('ACCESS_TOKEN', callback)}
新聞熱點
疑難解答