- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > web開(kāi)發(fā) >
- Node.js微信access_token存取與刷新的示例分析
這篇文章主要介紹Node.js微信access_token存取與刷新的示例分析,文中介紹的非常詳細,具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
access_token
微信文檔里存在兩種access_token:普通 access_token 和 網(wǎng)頁(yè)授權 access_token。
以下提到的 access_token 均為普通的 access_token
1. 首先我們先去看看是如何請求 access_token 的? 微信公眾平臺技術(shù)文檔
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') // 請安裝第三方包 request 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) { // 返回錯誤時(shí)的處理 return } })
3. guard_dog 實(shí)現數據持久化和定時(shí)刷新
guard_dog 會(huì )生成 .dog 文件,每個(gè)文件對應一個(gè)KEY
const guard_dog = require('guard_dog') // 請安裝第三方包 guard_dog guard_dog.init(KEY, (handler) => { // KEY是guard_dog存取數據的鍵名 // 拿到數據后調用 handler handler(DATA, EXPIREDS_IN) // DATA是要持久化的數據,EXPIREDS_IN是數據的有效時(shí)間,單位是秒 }, DIR) // DIR是 .dog 文件的存放目錄,這個(gè)參數可以不傳
4. 現在把以上兩塊代碼合并起來(lái)就是我們要的效果
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 多傳個(gè)參數
5. guard_dog 初始化這個(gè) key 之后,獲取到的都是有效的值了。guard_dog 獲取值代碼如下:
guard_dog.get('ACCESS_TOKEN', (data) => { // 上面初始化時(shí)用的鍵名為'ACCESS_TOKEN',所以這里取值也要用這個(gè)鍵名 // 在這里拿到的 data 就是 access_token 了 })
6.如果想用著(zhù)方便點(diǎn),可以直接封裝成一個(gè)模塊
access_token.js
const request = require('request') const guard_dog = require('guard_dog') // 加載這個(gè)模塊的時(shí)候給 ACCESS_TOKEN 這個(gè)鍵名初始化 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) }) }) // 只要向外暴露一個(gè)獲取值的方法就可以了 module.exports = function (callback) { guard_dog.get('ACCESS_TOKEN', callback) }
使用:
const access_token = require('./access_token') // 這里把這個(gè)模塊與 access_token 模塊當成在同一目錄下來(lái)作為例子。 access_token((data) => { // 這個(gè) data 就是 access_token })
jsapi_ticket
jsapi_ticket 官方文檔說(shuō)明
上面關(guān)于 access_token 的例子已經(jīng)說(shuō)得很詳細了,jsapi_ticket 處理起來(lái)也大同小異,所以下面直接貼代碼了:
(需要注意一點(diǎn):獲取 jsapi_ticket 需要依賴(lài) access_token,下面的代碼直接依賴(lài)了上面所寫(xiě)的 access_token.js)
jsapi_ticket.js
const request = require('request') const guard_dog = require('guard_dog') const access_token = require('./access_token') guard_dog.init('JSAPI_TICKET', (handler) => { access_token((access_token) => { request.get({ uri: 'https://api.weixin.qq.com/cgi-bin/ticket/getticket', json: true, qs: { access_token: access_token, type: 'jsapi' } }, (err, res, body) => { if (err) { console.log(err) return } console.log(body) if (body.errcode) { return } handler(body.ticket, body.expires_in) }) }) }) module.exports = function (callback) { guard_dog.get('JSAPI_TICKET', callback) }
使用:
const jsapi_ticket = require('./jsapi_ticket') jsapi_ticket((data) => { // 這個(gè) data 就是 jsapi_ticket })
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系站長(cháng)郵箱:ts@56dr.com進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2 建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站