GetToken.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. const axios = require('axios');
  2. const config = require('../../config.json');
  3. const path = require('path');
  4. const Logger = require('../../lib/Logger');
  5. let token = '';
  6. let tokenExpiresAt = 0; // 用于跟踪token的过期时间
  7. const logger = new Logger(path.join(__dirname, '../../logs/WXWork.log'), 'INFO');
  8. const GetToken = async () => {
  9. const currentTime = Date.now();
  10. // 如果 token 未过期,直接返回 token
  11. if (token && tokenExpiresAt > currentTime) {
  12. logger.info('返回已有企业微信token');
  13. return Promise.resolve(token);
  14. }
  15. // 否则重新获取 token
  16. try {
  17. logger.info('企业微信token不存在或已过期,正在重新获取token');
  18. const response = await axios.get(`https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${config.wxwork.corpid}&corpsecret=${config.wxwork.corpsecret}`);
  19. const body = response.data;
  20. if (body.errcode === 0) {
  21. token = body.access_token;
  22. // 设置新的过期时间
  23. tokenExpiresAt = currentTime + (body.expires_in * 1000);
  24. logger.info('获取企业微信 token 成功!');
  25. return token;
  26. } else {
  27. logger.error(`获取企业微信 token 失败!原因:${body.errmsg}`);
  28. throw new Error(body.errmsg);
  29. }
  30. } catch (error) {
  31. logger.error(`获取企业微信 token 失败!原因:${error.stack}`);
  32. throw error;
  33. }
  34. };
  35. module.exports = GetToken;