Node.js微信 access_token ( jsapi_ticket ) 存取與刷新的示例
access_token
微信文檔里存在兩種access_token:普通 access_token 和 網(wǎng)頁授權(quán) access_token。具體區(qū)別參考:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
以下提到的 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) {
// 返回錯誤時的處理
return
}
})
3. guard_dog 實現(xiàn)數(shù)據(jù)持久化和定時刷新
guard_dog 會生成 .dog 文件,每個文件對應(yīng)一個KEY
const guard_dog = require('guard_dog') // 請安裝第三方包 guard_dog
guard_dog.init(KEY, (handler) => { // KEY是guard_dog存取數(shù)據(jù)的鍵名
// 拿到數(shù)據(jù)后調(diào)用 handler
handler(DATA, EXPIREDS_IN) // DATA是要持久化的數(shù)據(jù),EXPIREDS_IN是數(shù)據(jù)的有效時間,單位是秒
}, DIR) // DIR是 .dog 文件的存放目錄,這個參數(shù)可以不傳
4. 現(xiàn)在把以上兩塊代碼合并起來就是我們要的效果
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 多傳個參數(shù)
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)
}
使用:
const access_token = require('./access_token') // 這里把這個模塊與 access_token 模塊當成在同一目錄下來作為例子。
access_token((data) => {
// 這個 data 就是 access_token
})
jsapi_ticket
上面關(guān)于 access_token 的例子已經(jīng)說得很詳細了,jsapi_ticket 處理起來也大同小異,所以下面直接貼代碼了:
(需要注意一點:獲取 jsapi_ticket 需要依賴 access_token,下面的代碼直接依賴了上面所寫的 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) => {
// 這個 data 就是 jsapi_ticket
})
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- vue項目中js-cookie的使用存儲token操作
- 詳解Node.js使用token進行認證的簡單示例
- node.js 微信開發(fā)之定時獲取access_token
- NodeJs crypto加密制作token的實現(xiàn)代碼
- php實現(xiàn)JWT(json web token)鑒權(quán)實例詳解
- 詳解JSON Web Token 入門教程
- node.js+captchapng+jsonwebtoken實現(xiàn)登錄驗證示例
- 詳解Node.js access_token的獲取、存儲及更新
- JSON Web Tokens的實現(xiàn)原理
- JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL錯誤的解決方法
- JS提示:Uncaught SyntaxError:Unexpected token ) 錯誤的解決方法
- token 機制和實現(xiàn)方式
相關(guān)文章
零基礎(chǔ)之Node.js搭建API服務(wù)器的詳解
今天小編就為大家分享一篇關(guān)于零基礎(chǔ)之Node.js搭建API服務(wù)器的詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
npm一鍵安裝Python以及node-sass依賴環(huán)境的方法
Node-sass是一個庫,它將Node.js綁定到LibSass,下面這篇文章主要給大家介紹了關(guān)于npm一鍵安裝Python以及node-sass依賴環(huán)境的相關(guān)資料,文中還介紹了安裝node-sass報錯Python環(huán)境問題避坑指南,需要的朋友可以參考下2022-09-09
使用NestJS開發(fā)Node.js應(yīng)用的方法
這篇文章主要介紹了使用NestJS開發(fā)Node.js應(yīng)用的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12

