通过redis存储access_token,有效期设置为1小时(也可将access_token和生成时间存放在文件或数据库中,根据time.time()获取当前时间与生成时间判断access_token是否过期(2小时),过期则更新数据,否则直接取) #-*- coding: utf-8 -*- # filename: basic.py import urllib import time import json import httplib from django.core.cache import cache logger = LOGHandler.getlogger() class Basic: def __init__(self): self.__accessToken = '' self.__leftTime = 0 def __real_get_access_token(self):#发送请求得到access_token try: logger.debug('正在获取access') appId = 'your appid' appSecret = 'your appSecret' postUrl = ("http://api.weixin.qq.com/cgi-bin/token?grant_type=" "client_credential&appid=%s&secret=%s" % (appId, appSecret)) logger.debug(postUrl) urlResp = urllib.urlopen(postUrl).read() logger.debug(urlResp) urlResp = json.loads(urlResp) logger.debug(urlResp['access_token']) self.__accessToken = urlResp['access_token'] self.__leftTime = urlResp['expires_in'] logger.debug('获得access_token') except Exception, e: logger.debug(e.message) def get_access_token(self): if self.__leftTime < 10: try: if cache.has_key('access_token'): self.__accessToken = cache.get('access_token') logger.debug(self.__accessToken) else: self.__real_get_access_token() cache.set('access_token', self.__accessToken, 60 * 60) logger.debug(self.__accessToken) except Exception,e: logger.debug(e) return self.__accessToken def run(self): while(True): if self.__leftTime > 10: time.sleep(2) self.__leftTime -= 2 else: self.__real_get_access_token()
#调用示例 bc = Basic() accessToken = bc.get_access_token() logger.debug(accessToken)