CommonController.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. # @Author : Rocky
  2. # @File : CommonController.py
  3. # @Time : 2025/2/19 13:54
  4. import requests
  5. from Ansjer.config import LOGGER
  6. from Object.Enums.WeChatEnum import WeChatMiniProgramConfigEnum, WeChatMiniProgramAPIEnum
  7. from Object.RedisObject import RedisObject
  8. class CommonObj:
  9. @staticmethod
  10. def get_access_token():
  11. """
  12. 获取小程序全局唯一后台接口调用凭据,token有效期为7200s
  13. https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getAccessToken.html
  14. @return: access_token
  15. """
  16. try:
  17. redis_obj = RedisObject()
  18. access_token_key = WeChatMiniProgramConfigEnum.AccessTokenKey.value
  19. expires_time = redis_obj.get_ttl(access_token_key)
  20. # 如果有效时间大于十分钟,返回token,否则刷新token
  21. if expires_time > 10 * 60:
  22. access_token = redis_obj.get_data(access_token_key)
  23. return access_token
  24. else:
  25. params = {
  26. 'grant_type': 'client_credential',
  27. 'appid': WeChatMiniProgramConfigEnum.AppID.value,
  28. 'secret': WeChatMiniProgramConfigEnum.AppSecret.value
  29. }
  30. r = requests.get(url=WeChatMiniProgramAPIEnum.getAccessTokenAPI.value, params=params, timeout=5)
  31. result = eval(r.content)
  32. access_token = result.get('access_token')
  33. assert access_token
  34. expires_in = result.get('expires_in')
  35. # 保存到Redis
  36. redis_obj.set_ex_data(key=access_token_key, val=access_token, expire=expires_in)
  37. return access_token
  38. except Exception as e:
  39. LOGGER.info('微信小程序获取token异常:error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  40. return None