标签:微信公众平台
博主热衷各种互联网技术,常啰嗦,时常伴有强迫症,常更新,觉得文章对你有帮助的可以关注我。 转载请注明"深蓝的镰刀"
微信公众平台OAuth2.0在获取Openid时出现了怪问题,在使用一个已刷新过超时时间的refresh_token去获取Openid时发现有一定几率请求不到返回数据,也就获取不到Openid了,这个怪问题折腾了一宿终于有了答案。。。
代码没什么好说的,用curl请求平台接口,PHP里的实现如下:
$appid = 'xxxx'; $secret = 'sssss'; $refresh_token = 'ttttt'; $url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=$appid&grant_type=refresh_token&refresh_token=$refresh_token"; //初始化 $curl = curl_init(); //设置url curl_setopt($curl, CURLOPT_URL, $url); //设置返回获取的输出为文本流 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //执行命令 $data = curl_exec($curl); //关闭URL请求 curl_close($curl); //显示获得的数据 print_r($data);发现最终返回的数据$data为false,使用curl_error($curl)打印错误记录:“Couldn‘t connect host”
多次实验发现一般是在我一分钟内请求4次以上会出现这个情况,记得官方文档有说接口的请求每日都有数量限制,可没找到接口的调用速率的限制,只能认为腾讯处于安全的考虑限制了调用速率的情况(注:我说的调用速率是指单用户频繁调用授权接口,多用户并发调用接口并不会出现这样的问题)。
解决方案是有的,将你第一次使用OAuth2.0请求到的用户信息等信息存入你的缓存,Session,Cookie都行,直到缓存过期才再使用授权接口请求信息。
我犯的一个错误是只将refresh_token存入到Session中,然后在使用到openid的时候通过缓存中的refresh_token去请求openid,结果是真正用户重复请求的接口没被缓存。。。
标签:微信公众平台
原文地址:http://blog.csdn.net/hornedreaper1988/article/details/43446061