美文网首页微信开发
网页授权获取微信用户信息错误40029:微信会发出两次提交 不合

网页授权获取微信用户信息错误40029:微信会发出两次提交 不合

作者: 老牛圣斗士 | 来源:发表于2016-08-10 20:13 被阅读9286次

自从学习微信开发就一直遇到大大小小的bug,每次的问题都是绞尽脑汁啊。

最近测试刚完成的网页授权获取微信用户信息功能突然出现了很多人都关注的错误,而且网上都没有得到解决的错误?

现在终于得到完全解决,给走在路上或正在路上出现问题的伙伴一个走捷径的方法。

问题描述:网页授权获取微信用户信息 错误40029:不合法的oauth_code?

在第一步:用户同意授权获取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=$this->input->get("code");//获取code

$dlzt=$this->input->cookie("dlzt"); //重点 ->此cookie用于记录code是否重复提交

if (empty($code))   //不用说 通过empty函数判断code是否设置值,没有从小跳转微信code获取页面或逻辑页面

{

redirect("/wap/hy/index_hy");  //我这里跳转的是逻辑页面,视为code不存在视为不合法访问,因为正常访问不会出现没有code。

exit();

}

if(!empty($dlzt))   //上面说了 记录code是否重复提交,此处就是判断这个$dlzt存在了不执行获取用户信息,因为用户信息已经获取过了。

//重要说明:

这里放如果存在二次转向到redirect_uri时,在这里进行第二次跳转的逻辑判断,我此处是进行登录获取用户信息,因为第一次已经登录完成了,登录状态和相关逻辑都已经成功执行一次,第二次我是直接跳入会员中心,就避免了第二次重复登录出现code无限的错误了。

delete_cookie("dlzt");//删除我们设置的$dlzt 这个cookie值,删除好处是,用户重新打开页面或下次访问页面还是第一次访问状态,不会出现因为有值而导致不执行获取微信用户信息出错。

}else

{

//此处是完整的通过code来获取accesstoken 及获取用户资料。

// 通过code 获取 accessToken 和 openid

$res = $this->Weixin_model->getAccessToken($code);//这是我封装的方法你们调用自己的方法。

if(!empty($res['errcode']))//判断是否获取到accesstoken  防止偶尔的错误处理加个判断有好处。

{

redirect('https://open.weixin.qq.com/connect/oauth2/authorize?appid=********&redirect_uri=http://www.baidu.com&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect');

exit();

}

$token=$res['access_token'];

$openid=$res['openid'];

//------ 检测accesstoken是否有效

if (!$this->Weixin_model->checkAccessToken($token, $openid))

{

// (假设token过期需要从小获取自己去判断)

$restk = $this->Weixin_model->refreshToken($res['refresh_token']);

$token=$restk['access_token'];

}

//获取用户信息  (scope为 snsapi_userinfo)

$userInfo = $this->Weixin_model->getUserInfo($token, $openid);

$nickname=$userInfo['nickname'];//昵称

$headimgurl=$userInfo['headimgurl'];//用户头像

$sex=$userInfo['sex'];//性别

$dlzt=$this->Login_model->Openid_login_hy($res['openid'],$nickname,$headimgurl,$sex);

$this->input->set_cookie("dlzt",$dlzt,120);

}

相关文章

  • 网页授权获取微信用户信息错误40029:微信会发出两次提交 不合

    自从学习微信开发就一直遇到大大小小的bug,每次的问题都是绞尽脑汁啊。 最近测试刚完成的网页授权获取微信用户信息功...

  • django: 微信网页授权

    微信网页授权基础知识 网页授权的最终目的就是获取微信的用户信息,微信的网页授权方式有两种 snsapi_base:...

  • 微信公众号开发(二)

    微信公众号开发文档 微信网页授权 微信客户端中访问第三方网页,可通过 微信网页授权机制 来获取用户信息。授权机制:...

  • 微信内置浏览器web开发(登陆 + 支付)

    微信开发技术文档 网页授权——登陆 获取用户信息,需要获取来自微信的授权access_token。获取access...

  • 如何解决微信错误码 48001

    问题描述 前端在做微信网页授权时,调用我们已经运行很久的获取微信用户信息接口时,报微信错误码 48001。 解决办...

  • 获取是否关注公众号

    获取微信用户的信息(普通版) 获取微信用户的信息(包含是否关注公众号信息) 参考链接:微信网页授权登录获取包含是否...

  • 微信网页授权

    微信通过网页授权可以在网页内获取微信用户信息,进而在网页内实现相关的业务逻辑。 微信网页授权的scope有两种,一...

  • php 微信授权登录 40029错误

    php 微信授权登录 40029错误 授权登录是微信高级api,个人开发可以使用微信测试账号进行开发。在授权的过程...

  • 浅析微信支付:微信公众号网页授权

    本文是【浅析微信支付】系列文章的第四篇,主要讲解微信支付前如何获取获取网页授权及用户信息获取。 浅析微信支付系列已...

  • 微信公众号OAuth2页面授权

    如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。 微信...

网友评论

    本文标题:网页授权获取微信用户信息错误40029:微信会发出两次提交 不合

    本文链接:https://www.haomeiwen.com/subject/sdyjsttx.html