这是一个坑,一个巨坑,一个恶心的坑
出现这个问题的大概意思就是微信回调了两次登录接口,code使用了两次,而在微信官方文档上写着code只能用一次,用来获取access_token,但我TM看着就糊涂了,只能使用一次,你他妈干嘛回调两我接口。
问题是这样出现滴:我做的是pc微信登录,第一步在java后端我拿到了生成微信登录的code_uri,在页面生成了一个微信登录二维码。
第二步:然后我用手机微信扫描二维码,确认用微信登录。然后微信就会回调我的登录接口传一些参数过来,好让我用这些参数拿到微信用户的信息。
大概流程是这样,然后我用code获取access_token的时候就报了"errcode":40163,"errmsg":"code been used...,发现我打的断点执行了再遍,这他妈很尴尬,百思不得其姐。
解决办法:
网上百度了一大堆,问题呢就是微信回调两次这个接口,然后传过来的code只能用一次来获取access_token,微信第二次回调进来的时候再用这个code去获取access_token就报这个错了。
网上有些人说要用缓存(redis或session)把code当key,access_token当value存起来,第二次进来的时候看有没有这个code,有就返回,来避免第二次使用code获取access_token。
我用redis试了半天,完全没卵用。
最后我把所有断点取消,把此接口中的所有处理代码注释,写了一个最简单的打印代码,TMD再调的时候只打印一遍就过去了,终于发现了问题所在,打上断点控制台打印出来两遍,这就想明白了,打了断点可能是微信那边得不到及时反馈又调了一遍过来。
最后的最后,大大的fuck送上,把此接口断点取消,代码复原就登录成功啦拿到微信用户的数据啦
pc微信扫码登录的小功能,随后会另写一篇笔记,此章只是记录下这个坑