微信云函數(shù)獲取access_token

// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')
const requestpromise = require('request-promise');

cloud.init()

async function getAccessToken(wxContext,add) {
    const options = {
      method: 'GET',
      url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='+wxContext.APPID + '&secret=小程序appsecret',
    };
    let db = cloud.database({})
    const result = await requestpromise(options);
    let resultJson = JSON.parse(result)
    if (resultJson.access_token) {
      let data = {
        accessToken: resultJson.access_token,
        expiresIn: resultJson.expires_in,
        createTime: Date.now(),
        appID:wxContext.APPID,
      }
      // expires_in
      if (add) {
        await db.collection('accessToken').add({
          // data 字段表示需新增的 JSON 數(shù)據(jù)
          data: data,
          success: function (res) {
            // res 是一個(gè)對(duì)象,其中有 _id 字段標(biāo)記剛創(chuàng)建的記錄的 id
            console.log(res)
          }
        })
      } else {
        await db.collection('accessToken').where({
          appID:wxContext.APPID
        }).update({
          data:data
        })
      }
      return {
        code:'0',
        message:'獲取access_token成功',
        result:resultJson,
      }
    } else {
      return {
        code:'-1',
        message:'獲取access_token失敗'
      }
    }
}

// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  //先從云函數(shù)數(shù)據(jù)庫(kù)中獲取accessToken
  let db = cloud.database({})
  const result = await db.collection('accessToken').where({
    appID:wxContext.APPID
  }).get()
  if ( typeof result.data == 'object' && result.data.length) {
    let info = result.data[0]
    let {
      accessToken,
      expiresIn,
      createTime
    } = info
    let timestamp = Date.now()
    if (timestamp - createTime < expiresIn*1000) {
      return {
        code:'0',
        message:'獲取access_token成功',
        access_token:accessToken,
      }
    } else {
      //超時(shí)重新獲取
      let result = await getAccessToken(wxContext,false)
      if (0 == result.code) {
        return {
          code:'0',
          message:'獲取access_token成功',
          access_token:result.result.access_token,
        }
      } else {
        return {
          code:'-1',
          message:'獲取access_token失敗'
        }
      }
    }
  } else {
    let result = await getAccessToken(wxContext,true)
    if (0 == result.code) {
      return {
        code:'0',
        message:'獲取access_token成功',
        access_token:result.result.access_token,
      }
    } else {
      return {
        code:'-1',
        message:'獲取access_token失敗'
      }
    }
    
  }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容