原文鏈接https://blog.csdn.net/zxg_1991/article/details/79918056
獲取access_token說明
access_token是公眾號的全局唯一接口調(diào)用憑據(jù)近零,公眾號調(diào)用各接口時都需使用access_token琼牧。開發(fā)者需要進行妥善保存。access_token的存儲至少要保留512個字符空間渐排。access_token的有效期目前為2個小時悔醋,需定時刷新,重復獲取將導致上次獲取的access_token失效。
公眾平臺的API調(diào)用所需的access_token的使用及生成方式說明:
1鲤脏、建議公眾號開發(fā)者使用中控服務(wù)器統(tǒng)一獲取和刷新Access_token,其他業(yè)務(wù)邏輯服務(wù)器所使用的access_token均來自于該中控服務(wù)器吕朵,不應(yīng)該各自去刷新猎醇,否則容易造成沖突,導致access_token覆蓋而影響業(yè)務(wù)努溃;
2硫嘶、目前Access_token的有效期通過返回的expire_in來傳達,目前是7200秒之內(nèi)的值梧税。中控服務(wù)器需要根據(jù)這個有效時間提前去刷新新access_token音半。在刷新過程中,中控服務(wù)器可對外繼續(xù)輸出的老access_token贡蓖,此時公眾平臺后臺會保證在5分鐘內(nèi)曹鸠,新老access_token都可用,這保證了第三方業(yè)務(wù)的平滑過渡斥铺;
3彻桃、Access_token的有效時間可能會在未來有調(diào)整,所以中控服務(wù)器不僅需要內(nèi)部定時主動刷新晾蜘,還需要提供被動刷新access_token的接口邻眷,這樣便于業(yè)務(wù)服務(wù)器在API調(diào)用獲知access_token已超時的情況下眠屎,可以觸發(fā)access_token的刷新流程。
公眾號可以使用AppID和AppSecret調(diào)用本接口來獲取access_token肆饶。AppID和AppSecret可在“微信公眾平臺-開發(fā)-基本配置”頁中獲得(需要已經(jīng)成為開發(fā)者改衩,且?guī)ぬ枦]有異常狀態(tài))。調(diào)用接口時驯镊,請登錄“微信公眾平臺-開發(fā)-基本配置”提前將服務(wù)器IP地址添加到IP白名單中葫督,點擊查看設(shè)置方法,否則將無法調(diào)用成功板惑。
- 通過文檔橄镜,我們可以知道,Access_token有效期為7200秒冯乘,通過接口來獲取洽胶,我們需要定時來獲取Access_token,保存到服務(wù)器全局的變量里裆馒。
- 接口參數(shù)姊氓,appid和secret,在小程序公眾平臺上獲取喷好。
接口他膳,https請求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
獲取access_token
這里使用的nodejs獲取access_token
/**
* 獲取Access_Token,定時任務(wù)7200s
*/
function jobGetAccessToken() {
var period = 7200000; // 7200 second
var opts = {
method: 'GET',
url: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET,//接口地址換成自己的APPID和secret
header: {
'content-type': 'application/json' // 默認值
}
}
// 獲取access_token接口
url.get(opts).then(function (res) {
code = JSON.parse(res);
if (code.access_token != null)
data.accessToken = code.access_token;
else {
console.log('job error:' + res);
}
}).catch(function (err) {
console.log(err);
})
//定時任務(wù)
setInterval(function () {
url.get(opts).then(function (res) {
code = JSON.parse(res);
if (code.access_token != null)
data.accessToken = code.access_token;
else {
console.log('job error:' + res);
}
}).catch(function (err) {
console.log(err);
})
}, period);
}
/**
* Http get請求
* 參數(shù):opts封裝url等字典
*/
function get(opts) {
return new Promise((resolve, reject) => {
request.get(opts, function (err, response, body) {
if (!err && response.statusCode == 200) {
if (body !== 'null') {
results = body;
resolve(results);
} else {
resolve('');
}
} else {
reject(err);
}
});
});
}