网页授权获取微信用户信息错误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。

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

===========================================================================

下面贴一张我获取微信用户信息的流程图,请教各位这个流程是不是存在什么问题呢?改怎么改善一下?

图片描述

阅读 105.2k
17 个回答
新手上路,请多包涵

请问有答案吗?

新手上路,请多包涵

我这也是40029错误,根据日志中数据分析,不止是2次,基本是个位数,然后最多的就是123、78、70、65(只是一天的数据4台机器),时间点是10:37:04~16:11:06(偏差在5分钟内),我也是醉了,不知道有没有人可解答

我最后选择了在用户关注微信公众号的时候一次获取用户信息,保存数据库,然后用户访问页面的时候静默获取openid,再根据openid从数据库中读取用户的相关信息。

静默获取也偶尔会有这样的问题,结果用户自己结束微信程序再登录就好了,很奇怪有没有人知道为什么

新手上路,请多包涵

我也遇到了这个问题,有没有人知道,求分享

新手上路,请多包涵

请问要如何解决呢

同求 40029错误

现在正常是没问题的,但一段时间(几个小时后) 就会出现40029, 是所有用户都会出现40029

我只有重启服务器就好了, 我是nodejs服务器+nginx

由于是为了使用微信支付, 生成统一订单是需要openid, 我把openid保存到数据库里面, 以获取过openid的用户不再通过code获取, 但 如果出现过40029, 不通过code获取, 用数据库中的openid生成统一订单过不去.

很奇怪,openid 应该是唯一的,不知道是为什么

类似,我这儿是进入页面时拿到CODE,然后用$.ajax()方法去验证改用户openid是否已经获取过了

注释掉这个$.ajax()方法,则一切正常,利用CODE可以获取到aceess_token,不注释,则获得的CODE获取acccess_token时提示40029

原因不明

跳转到微信网页授权地址时,try-catch一下,如果出现报错,重新获取授权就行

新手上路,请多包涵

奇怪的是,在ios设备的微信中,我们会遇到比较多这种情况。通过code获取不到静默授权的微信openid。
可能的原因是:
1)微信打开了多个页面, 每个页面都带了一个相同的code,因此将code验证了许多次,在第一次以后的验证,都是失效的code, 获取不了openid。
2)微信给的code就不是合法的code,从服务器的日志可以查到,同一个code,只请求了一次,也会有失败的情况发生,出现错误代码40029。

新手上路,请多包涵

我是这样处理的,重新授权登录一次,redirect_uri加个参数?no=随机数

新手上路,请多包涵

请问问题解决了吗,分享一下

新手上路,请多包涵

用楼主的授权登录逻辑成功获取openid,先是后台重置secret然后后台的路径写成了小程序的路径,改成公众号,问题解决。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏