python 微信公衆號access_token的獲取

通過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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章