E企盈营销工具技术服务商 热线:4006-838-530

微信小程序获取永胜县E企盈小程序AccesToken机制

1.机制逻辑当数据库中accessToken未过期,从数据库中获取若数据库中accessToken已过期,则从微信服务器中获取,并更新数据库中的accessToken和有效时间2.数据库定义数据库中定义集合“wxConfig”,包含 “AccessToken” “accessTokenTime”两个内容3.判断数据库中accessToken是否过期const wxConfigCollection = db.collection('wxConfig')//获取数据库中accessToken的有效时间async function getAccessTokenTime() {  let accessTokenTime = await wxConfigCollection.where({    name: "accessTokenTime"  }).get();  accessTokenTime = accessTokenTime.data[0].value  return accessTokenTime;}//数据库中accessToken是否过期async function isAccessTokenTimeTimeout() {  let accessTokenTime =await getAccessTokenTime();  let d = new Date();  if (accessTokenTime d) {    //说明access未过期    return false;  } else {    //说明access过期    return true;  }}

4.重新获取Access Token//重新获取accessTokenasync function getNewAccessToken() {  let url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=AppSecret"  let getResponse = await got(url) //get请求  let responseJson = JSON.parse(getResponse.body);  return responseJson;}

上述的appid和AppSecret修改成自己的5.保存AccessTokenasync function saveAccessToken(accessToken) {  await wxConfigCollection.where({    name: "AccessToken"  }).update({    data:{      value: accessToken    }  })}//增加accessTokenTime从现在开始的有效时长async function addAccessTokenTime(timeDelay) {  let accessTokenTime = await getAccessTokenTime();  timeDelay=parseInt(timeDelay)-10;//减少10秒已消除获取access Token时的误差  let nowTime=new Date();  nowTime.setSeconds(nowTime.getSeconds() + timeDelay)  accessTokenTime = nowTime  await saveAccessTokenTime(accessTokenTime);  return accessTokenTime;}async function saveAccessTokenAndTime(newAccessToken) {  let accessTokenContent = newAccessToken.access_token  let accessTokenDelay = newAccessToken.expires_in  await saveAccessToken(accessTokenContent);  await addAccessTokenTime(accessTokenDelay);}

6.从数据库中获取AccessToken//获取数据库中accessTokenasync function getAccessTokenInDB() {  let accessToken = await wxConfigCollection.where({    name: "AccessToken"  }).get();  accessToken = accessToken.data[0].value  return accessToken;}

7.main函数内容exports.main = async (event, context) = {  const wxContext = cloud.getWXContext()  if( await isAccessTokenTimeTimeout()){    let newAccessToken = await getNewAccessToken();    await saveAccessTokenAndTime(newAccessToken);    return newAccessToken.access_token;  }else{    return getAccessTokenInDB();  } }

8.代码全文/** * 自动获取accessToken * 当数据库中accessToken未过期,从数据库中获取 * 若数据库中accessToken已过期,则从微信服务器中获取,并更新数据库中的accessToken和有效时间 */// 云函数入口文件const cloud = require('wx-server-sdk')const got = require('got'); //引用 gotcloud.init()const db = cloud.database({  env:"self-stydy-spirit-tyb9d"})const wxConfigCollection = db.collection('wxConfig')// 云函数入口函数exports.main = async (event, context) = {  const wxContext = cloud.getWXContext()  if( await isAccessTokenTimeTimeout()){    let newAccessToken = await getNewAccessToken();    await saveAccessTokenAndTim开通钻石小程序电话:4006-838-530e(newAccessToken);    return newAccessToken.access_token;  }else{    return getAccessTokenInDB();  } }//获取数据库中accessToken的有效时间async function getAccessTokenTime() {  let accessTokenTime = await wxConfigCollection.where({    name: "accessTokenTime"  }).get();  accessTokenTime = accessTokenTime.data[0].value  return accessTokenTime;}//数据库中accessToken是否过期async function isAccessTokenTimeTimeout() {  let accessTokenTime =await getAccessTokenTime();  let d = new Date();  if (accessTokenTime d) {    //说明access未过期    return false;  } else {    //说明access过期    return true;  }}//获取数据库中accessTokenasync function getAccessTokenInDB() {  let accessToken = await wxConfigCollection.开通热门兼职小程序电话:4006-838-530where({    name: "AccessToken"  }).get();  accessToken = accessToken.data[0].value  return accessToken;}//重新获取accessTokenasync function getNewAccessToken() {  let url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=&secret="  let getResponse = await got(url) //get请求  let responseJson = JSON.parse(getResponse.body);  return responseJson;}async function saveAccessTokenAndTime(newAccessToken) {  let accessTokenContent = newAccessToken.access_token  let accessTokenDelay = newAccessToken.expires_in  await saveAccessToken(accessTokenContent);  await addAccessTokenTime(accessTokenDelay);}async function saveAccessToken(accessToken) {  await wxConfigCollection.where({    name: "AccessToken"  }).update({    data:{      value: accessToken    }  })}//增加accessTokenTime从现在开始的有效时长async function addAccessTokenTime(timeDelay) {  let accessTokenTime = await getAccessTokenTime();  timeDelay=parseInt(timeDelay)-10;//减少10秒已消除获取access Token时的误差  let nowTime=new Date();  nowTime.setSeconds(nowTime.getSeconds(开通熟食/半成品小程序电话:4006-838-530) + timeDelay)  accessTokenTime = nowTime  await saveAccessTokenTime(accessTokenTime);  return accessTokenTime;}async function saveAccessTokenTime(accessTokenTime) {  await wxConfigCollection.where({    name: "accessTokenTime"  }).update({    data: {      value: accessTokenTime    }  })}

赞(0) 打赏
未经允许不得转载:E企盈小程序开发-热线:4006-838-530 » 微信小程序获取永胜县E企盈小程序AccesToken机制
分享到: 更多 (0)

评论 抢沙发

模王系统开发

联系我们升级日志

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏