const rp=require('request-promise')
const APPID='xxxxxxxxx'
const AppSecret='xxxxxxxxxxxxxx'
const URL=`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${AppSecret}`
const path=require('path')
//输出绝对路径
const fileName=path.resolve(__dirname,'./access_token.json')
const fs=require('fs')
const updateAccessToken=async ()=>{
const resStr=await rp(URL)
const res=JSON.parse(resStr)
// 写文件
if(res.access_token){
fs.writeFileSync(fileName,JSON.stringify({
access_token:res.access_token,
createTime:new Date()
}))
}else{
//如果失败 继续发送请求
await updateAccessToken()
}
}
//因为accessToken 每2小时更新一次 所以适当提前5分钟刷新
setInterval(()=>{
await updateAccessToken()
},69000000)
const getAccessToken=async()=>{
//读取文件
try{
const readRes=fs.readFileSync(fileName,'utf8')
const readObj=JSON.parse(readRes)
const createTime=new Date(readObj.createTime).getTime()
const nowTime=new Date().getTime()
//如果更新的时候断线了 重新获取
if((nowTime-createTime)/1000/60/60>=2){
await updateAccessToken()
await getAccessToken()
}
return readObj.access_token
}catch(err){
//刚启动的时候没有 所以读取失败 所以新更新
await updateAccessToken()
await getAccessToken()
}
}
module.exports=getAccessToken