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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。