微信公众平台OAuth2.0在获取Openid时出现了怪问题,在使用一个已刷新过超时时间的refresh_token去获取Openid时发现有一定几率请求不到返回数据,也就获取不到Openid了,这个怪问题折腾了一宿终于有了答案。。。
发现最终返回的数据$data为false,使用curl_error($curl)打印错误记录:“Couldn‘t connect host”
多次实验发现一般是在我一分钟内请求4次以上会出现这个情况,记得官方文档有说接口的请求每日都有数量限制,可没找到接口的调用速率的限制,只能认为腾讯处于安全的考虑限制了调用速率的情况(注:我说的调用速率是指单用户频繁调用授权接口,多用户并发调用接口并不会出现这样的问题)。
解决方案是有的,将你第一次使用OAuth2.0请求到的用户信息等信息存入你的缓存,Session,Cookie都行,直到缓存过期才再使用授权接口请求信息。
我犯的一个错误是只将refresh_token存入到Session中,然后在使用到openid的时候通过缓存中的refresh_token去请求openid,结果是真正用户重复请求的接口没被缓存。。。