Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例
access_token
微信文档里存在两种access_token:普通access_token和网页授权access_token。具体区别参考:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
以下提到的access_token均为普通的access_token
1.首先我们先去看看是如何请求access_token的?微信公众平台技术文档
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":"invalidappid"}
2.所以获取access_token的代码如下:
constrequest=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实现数据持久化和定时刷新
guard_dog会生成.dog文件,每个文件对应一个KEY
constguard_dog=require('guard_dog')//请安装第三方包guard_dog guard_dog.init(KEY,(handler)=>{//KEY是guard_dog存取数据的键名 //拿到数据后调用handler handler(DATA,EXPIREDS_IN)//DATA是要持久化的数据,EXPIREDS_IN是数据的有效时间,单位是秒 },DIR)//DIR是.dog文件的存放目录,这个参数可以不传
4.现在把以上两块代码合并起来就是我们要的效果
constrequest=require('request') constguard_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多传个参数
5.guard_dog初始化这个key之后,获取到的都是有效的值了。guard_dog获取值代码如下:
guard_dog.get('ACCESS_TOKEN',(data)=>{//上面初始化时用的键名为'ACCESS_TOKEN',所以这里取值也要用这个键名 //在这里拿到的data就是access_token了 })
6.如果想用着方便点,可以直接封装成一个模块
access_token.js
constrequest=require('request') constguard_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) }
使用:
constaccess_token=require('./access_token')//这里把这个模块与access_token模块当成在同一目录下来作为例子。 access_token((data)=>{ //这个data就是access_token })
jsapi_ticket
jsapi_ticket官方文档说明
上面关于access_token的例子已经说得很详细了,jsapi_ticket处理起来也大同小异,所以下面直接贴代码了:
(需要注意一点:获取jsapi_ticket需要依赖access_token,下面的代码直接依赖了上面所写的access_token.js)
jsapi_ticket.js
constrequest=require('request') constguard_dog=require('guard_dog') constaccess_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) }
使用:
constjsapi_ticket=require('./jsapi_ticket') jsapi_ticket((data)=>{ //这个data就是jsapi_ticket })
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。