首页 > 热点 > 微信 > 正文

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

2020-03-22 17:47:53
字体:
来源:转载
供稿:网友
  • 博主热衷各种互联网技术,常啰嗦,时常伴有强迫症,常更新,觉得文章对你有帮助的可以关注我。 转载请注明"深蓝的镰刀"

    微信公众平台OAuth4.0在获取Openid时出现了怪问题,在使用一个已刷新过超时时间的refresh_token去获取Openid时发现有一定几率请求不到返回数据,也就获取不到Openid了,这个怪问题折腾了一宿终于有了答案。。。

    代码没什么好说的,用curl请求平台接口,PHP里的实现如下:

    $appid = 'xxxx';$secret = 'sssss';$refresh_token = 'ttttt';$url = "http://api.weixin.qq.com/sns/oauth4/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次以上会出现这个情况,记得官方文档有说接口的请求每日都有数量限制,可没找到接口的调用速率的限制,只能认为腾讯处于安全的考虑限制了调用速率的情况(注:我说的调用速率是指单用户频繁调用授权接口,多用户并发调用接口并不会出现这样的问题)。

    解决方案是有的,将你第一次使用OAuth4.0请求到的用户信息等信息存入你的缓存,Session,html' target='_blank'>Cookie都行,直到缓存过期才再使用授权接口请求信息。

    我犯的一个错误是只将refresh_token存入到Session中,然后在使用到openid的时候通过缓存中的refresh_token去请求openid,结果是真正用户重复请求的接口没被缓存。。。


    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表