python - 微信公众号accesstoken,7200有效时间问题?

查看:190
本文介绍了python - 微信公众号accesstoken,7200有效时间问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

import urllib
import time
import json

class Basic:
    def __init__(self):
        self.__accessToken = ''
        self.__leftTime = 0
    def __real_get_access_token(self):
        appId = "xxxxx"
        appSecret = "xxxxx"

        postUrl = ("https://api.weixin.qq.com/cgi-bin/token?grant_type="
               "client_credential&appid=%s&secret=%s" % (appId, appSecret))
        urlResp = urllib.urlopen(postUrl)
        urlResp = json.loads(urlResp.read())
        
        self.__accessToken = urlResp['access_token']
        self.__leftTime = urlResp['expires_in']

    def get_access_token(self):
        if self.__leftTime < 10:
            self.__real_get_access_token()
        return self.__accessToken

    def run(self):
        while(True):
            if self.__leftTime > 10:
                time.sleep(2)
                self.__leftTime -= 2
            else:
                self.__real_get_access_token()

以上是官网演示代码如何access_token,我想问的是这个类里面最后一个run()怎么去让__leftTime递减?
外部调用都是直接调用get_access_token()来获取access_tonken的,根本没调用run(),它又不是随实例初始化的.

解决方案

这段代码封装丑陋,难用,而且有错误,你看的是哪里的"官网"?

我看了你发的链接,让我很不可思议,这段代码居然真的源自于微信官方文档.但是不代表这段代码一定正确好用.我还是那句话,这段代码封装丑陋,难用,而且有错误.

首先说它为什么封装丑陋,难用,我认为这样编写Basic类更好:

class Basic():
    def __init__(self,appId,appSecret):
        self.appId = appId
        self.appSecret = appSecret
    ...
    ...
    # 省略

这样写的话,可以在你的代码里直接

import Basic

basic = Basic('appId', 'appSecret')
accessToken = basic.getAccessToken()

这样比直接把appId和appSecret硬编码到Basic里要好

再说,它为什么错误,代码里的run()方法里居然是个死循环,运行了run()之后就执行死循环,那我怎么获得accessToken?好吧,其实用多线程的方式做些改动还是能运行的,但是如果要集成到网站里,这段代码需要修改和新增加的编码多得多,而且要对多线程等高级知识特别熟悉,从某种意义上来说,这段代码可以说是有错误,根本没法用.

其他的一些编码规范的问题我就不说了,python熟手一眼就看出来了,这段代码很不pythonic.

其实你一眼看上去就觉得不对劲,觉得它有错误,但是它出自于权威的微信官方文档,你又不够自信认为它是错的.我也算不上是高手,但是做过微信公众号相关开发,独自一人完成过2个以上的项目的(APP+PCweb)服务端开发,我明确的告诉你,这段代码就是错的.

这篇关于python - 微信公众号accesstoken,7200有效时间问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆