请稍侯

网页授权获取微信用户信息错误40029

23 May 2016
更多

问题描述

  • 这几天测试刚完成的网页授权获取微信用户信息功能。

  • 在第一步:用户同意授权获取code,通过code获取access_token时,有时会出现40029错误。

  • 经过调试,发现问题出现在redirect_uri=REDIRECT_URI当跳转到授权链接后,微信会发出两次转向至redirect_uri的相同请求(两次带进来的code是相同的)。

  • 第一次的code后已经成功换取得openid以及access_token

  • 第二次转向到redirect_uri时,该code已经失效(code只能使用一次),从而导致了40029:不合法的oauth_code的错误,不能再获取到access_token

  • 由于面一次被终止,生效的为第二次,因而不能获取到用户信息。(可这种情况只是偶尔发生,过一会儿再进入又正常了),这个问题应该如何解决?

可能出现的场景:

  • 用户授权后,点了手机上的返回按钮,导致使用了相同的code去得到用户资料

解决的办法

  • 当出现40029的错误时再进行进行一次授权
if($rs['errcode'] == 40029) {
    // 如果授权失败,则再进行一次授权
    $return_url = urlencode('http://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
    $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . C('AppID') . '&redirect_uri=' . $return_url . '&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect'; 
    header("location:$url");
    die('重新授权');
}