GetToken.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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. return Promise.resolve(token);
  13. }
  14. // 否则重新获取 token
  15. try {
  16. const response = await axios.get('https://qyapi.weixin.qq.com/cgi-bin/gettoken', {
  17. params: {
  18. corpid: config.wxwork.corpid,
  19. corpsecret: config.wxwork.corpsecret
  20. }
  21. });
  22. const body = response.data;
  23. if (body.errcode === 0) {
  24. token = body.access_token;
  25. // 设置新的过期时间
  26. tokenExpiresAt = currentTime + (body.expires_in * 1000);
  27. logger.info('获取企业微信 token 成功!');
  28. return token;
  29. } else {
  30. logger.error(`获取企业微信 token 失败!原因:${body.errmsg}`);
  31. throw new Error(body.errmsg);
  32. }
  33. } catch (error) {
  34. logger.error(`获取企业微信 token 失败!原因:${error.message}`);
  35. throw error;
  36. }
  37. };
  38. module.exports = GetToken;