python - 微信公众号accesstoken,7200有效时间问题?
本文介绍了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屋!
查看全文