微信授权获取用户信息有问题,求各位大神指导下

2017-05-11 10:24:44 +08:00
 edison111cry
...
echo($code);
$wechat_http = "https://api.weixin.qq.com/sns/oauth2/access_token? appid=".$appId."&secret=".$appSecret."&code=".$code."&grant_type=authorization_code";
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,$wechat_http);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
$result = curl_exec($curl);
echo($result);
exit;
...
如上代码。
微信上的 H5 页面有时候获取不到用户的 open_id 了,但有时候可以,昨天研究了半天终于找到了问题所在,上面的$code 是从微信获取到的,是正常的,但是下面的代码 echo $result 时有时候出来的是 false, 有时候是正确的 JSON 数据:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
但是如果我先把$code 复制出来,然后在浏览器里敲一下这个组装好的 URL:
https://api.weixin.qq.com/sns/oauth2/access_token? appid=".$appId."&secret=".$appSecret."&code=".$code."&grant_type=authorization_code

每次都是能正确显示上面的 JSON 数据。

所以问题就是出在了
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,$wechat_http);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
$result = curl_exec($curl);

对吗?但是关键以前这段代码都是正常的,现在有时候不正常,有时候正常,求大神指点
4950 次点击
所在节点    问与答
3 条回复
edison111cry
2017-05-11 10:35:00 +08:00
如果 echo $result 为 false 时,我使用这同一个$code 一直刷新这个页面,几次以后$result 显示出来正确的 json,然后再刷新就是 false,然后有时候会显示
string(78) "{"errcode":40163,"errmsg":"code been used, hints"}"

说明之前显示为 false 的时候,其实 curl 根本就没有去请求微信的接口。

这怎么办?
zhuyao
2017-05-11 11:33:36 +08:00
问题太长,code 换取一次 openid 失效,5 分钟之内失效
laobaozi
2017-05-11 14:53:17 +08:00
你这个流程没太看懂 为什么获取到了授权码$code 还要用$code 再去请求一次授权?
微信网页获取用户信息的流程参见 https://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html#.E7.AC.AC.E4.BA.8C.E6.AD.A5.EF.BC.9A.E9.80.9A.E8.BF.87code.E6.8D.A2.E5.8F.96.E7.BD.91.E9.A1.B5.E6.8E.88.E6.9D.83access_token

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/360570

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX