sbzhu / weworkapi_php

official lib of wework api
https://work.weixin.qq.com/api/doc
355 stars 286 forks source link

请问你把accessToken存在哪儿了? #3

Closed hi500 closed 6 years ago

hi500 commented 6 years ago

accessToken刷新每天是有次数限制的,我看不出来你的代码中如何做accessToken缓存的

xiaoyouxi01 commented 6 years ago

我也挺想知道这个的。。

官网文档中下载的示例代码里,倒是有缓存的,是存在本地一个文件中。

GitHub上的代码,我也看不出来缓存。。。

sbzhu commented 6 years ago

@hi500 @xiaoyouxi01 是以类里的一个变量存的 比如api/src/CorpAPI.class.php 里的$accessToken变量 在类的生命周期里,这个accessToken都是存在的, 当且仅当发现token过期,就自动刷新 token。 刷新机制在 api/src/API.class.php 所以,使用时,只需要全局实例化一个CorpAPI类,不要析构它,就可一直用它调函数,不用关心 token。

$api = new CorpAPI(corpid, corpsecret);
$api->dosomething()
$api->dosomething()
$api->dosomething()
....
walkonthemarz commented 6 years ago

@sbzhu 那你的这个accessToken缓存也仅仅只在当前请求中有效,如果一个新的请求过来的话,你还是重新获取了一遍token,并没有实现多个请求之间共享一个token

walkonthemarz commented 6 years ago

而且看你的类里面把token设成了private,我都没法把token缓存到redis,想到的一个办法也许可以把整个类serialize以后存到redis,或者你能把token设成public或添加一个set方法 @sbzhu

sbzhu commented 6 years ago

@walkonthemarz 只要保证全局只实例化一个这个类,即实现了共享token,当然,你拿到token后,用redis或者文件来缓存,也是可以的。