码迷,mamicode.com
首页 > 微信 > 详细

微信公众平台获取不到Openid的一个怪问题

时间:2015-02-03 11:12:19      阅读:318      评论:0      收藏:0      [点我收藏+]

标签:微信公众平台

博主热衷各种互联网技术,常啰嗦,时常伴有强迫症,常更新,觉得文章对你有帮助的可以关注我。 转载请注明"深蓝的镰刀"


微信公众平台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,结果是真正用户重复请求的接口没被缓存。。。


微信公众平台获取不到Openid的一个怪问题

标签:微信公众平台

原文地址:http://blog.csdn.net/hornedreaper1988/article/details/43446061

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!