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