V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
edison111cry
V2EX  ›  问与答

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

  •  
  •   edison111cry · 2017-05-11 10:24:44 +08:00 · 5010 次点击
    这是一个创建于 2760 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ...
    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);

    对吗?但是关键以前这段代码都是正常的,现在有时候不正常,有时候正常,求大神指点
    3 条回复    2017-05-11 14:53:17 +08:00
    edison111cry
        1
    edison111cry  
    OP
       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
        2
    zhuyao  
       2017-05-11 11:33:36 +08:00
    问题太长,code 换取一次 openid 失效,5 分钟之内失效
    laobaozi
        3
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2794 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:44 · PVG 20:44 · LAX 04:44 · JFK 07:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.