通過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)