参考文章:Node.jsaccess_token的获取、存储和更新https://www.cnblogs.com/hvkco...jsjs与微信小程序后台数据库的交互(一)相对于获取accesstoken,我们更进一步,将获取到的accesstoken保存在服务器上。我们先在node.js服务启动根目录下创建一个wechat子目录,并在该子目录下创建一个名为access_token.json的文件。文件内容为:{"access_token":"","expires_time":0}分别保存accesstoken和过期时间。为了在下一步使用express设置访问路由,我们在node.js与微信小程序后台数据库交互中修改程序(1)获取accesstoken以使用express://token.jsconsthttp=require('http');constrequest=require('request');varurltool=require('url');varfs=require('fs');//引入fs模块varaccessTokenJson=require('./wechat/access_token');//从本地存储导入access_tokenconsthostIp='127.0.0.1';常量apiPort=6060;constdata={appid:"wx4$%#%#%#",//你的微信小程序的appidsecret:"@##¥¥…¥##R¥",//你的微信小程序的appsecretgrant_type:"client_credential",env:"^%$#^@^"//你的微信小程序的环境参数};varexpress=require('express');varapp=express();app.get('/',function(req,res){console.log("***************************************")console.log('[request]from='+req.url);getAccessToken(res);})functiongetAccessToken(res){//获取当前时间varcurrentTime=newDate().getTime();consturl='https://api.weixin.qq.com/cgi-bin/token?appid='+data.appid+'&secret='+data.secret+'&grant_type='+data.grant_type;varcontentText=fs.readFileSync('./wechat/access_token.json','utf-8');//添加这两句手动修改access_token.json的expires_time来刷新accesstoken:url,//请求路径method:"GET",//请求方式,默认为getheaders:{//设置请求头"content-type":"application/json",},body:JSON.stringify(data)//postparameterstringtoconvertobjecttoJSON},function(error,response,body){if(!error&&response.statusCode===200){varobj=JSON.parse(body);//转换JSON字符串到对象accessTokenJson.access_token=obj.access_token;accessTokenJson.expires_time=newDate().getTime()+(parseInt(obj.expires_in)-200)*1000;//更新本地存储fs.writeFile('./wechat/access_token.json',JSON.stringify(accessTokenJson),(err)=>{console.log("writeOK")});//编码类型res.setHeader('Content-Type','text/plain;charset=UTF-8');//允许跨域res.setHeader('Access-Control-Allow-Origin','*');//返回代理内容varrtnJSON=JSON.stringify(accessTokenJson)console.log("返回数据:"+rtnJSON)res.end(rtnJSON);}});}else{res.setHeader('Content-Type','text/plain;charset=UTF-8');//允许跨域res.setHeader('Access-Control-Allow-Origin','*');//返回代理内容varrtnJSON=JSON.stringify(accessTokenJson)console.log("返回数据:"+rtnJSON)res.end(rtnJSON);}}varserver=app.listen(apiPort,function(){console.log('Proxyinterface,runningonhttp://'+hostIp+':'+apiPort+'/');})的accesstoken微信小程序默认7200秒过期,所以我们的程序在7000秒后重新获取新的accesstoken并保存到文件中启动token.js服务:nodetoken.js在浏览器访问127.0.0.1:6060并刷新,我们会发现返回的accesstoken不会改变。我们等待2小时再刷新,或者修改access_token.json的expires_time为0再刷新,就会发现accesstoken变了,这样就达到了我们的目的。注意:如果我们不手动修改access_token.json文件varaccessTokenJson=require('./wechat/access_token');上面这句没问题,但是如果我们手动修改access_token.json,上面这句话就不会再执行了,所以我们添加varcontentText=fs.readFileSync('./wechat/access_token.json','utf-8');//添加这两句可以手动修改access_token.json的expires_time来刷新accesstokenaccessTokenJson=JSON.parse(contentText)这样每次读取accesstoken都会读取access_token.json文件,实际部署时可以去掉这两句。
