微信登陆,报40029,invalid code原因和处理办法(通过内存解决)。

时间:2024-04-14 12:21:40

最近要做一个企业微信登陆功能,按照企业微信sdk一步步书写代码,但在登陆后通过code获取微信openId的时候总是报错invalid code,错误码40029,一度让我怀疑自己是不是什么地方配置出错了。但几经检查感觉都是正确的。

问题原因:
在网上搜寻答案后,说是微信会引导客户机重定向两次到我们服务器上,而带的参数code是相同的,而code的使用过一次就会失效了。通过微信开发者工具测试,却有其事。所以我们的机器上会报invalid code,就是因为这是我们第二次使用该code了。
吐槽的话不说了,直接上处理办法。

处理办法
办法其实很简单,在我们第一次收到用户重定向过来的请求时,使用code取获取用户的信息是成功的。但第二次收到请求,继续通过该code去获取就会40029了,那么我们在第一次获取成功的时候通过键值对把它保存到内存中,然后第二次获取失败报40029的时候去内存中取就可以了,取到后删掉内存中的这一份数据,为了保险起见,也应该写一个定时器,定时删除第一次登陆时保存下的那些数据。
示例代码:
微信登陆,报40029,invalid code原因和处理办法(通过内存解决)。
注意!!!因为此处微信引导的两次重定向中间的间隔是很短的,所以要考虑第二次重定向去取值时,第一次重定向还没把值set进去的问题,此处可以通过线程等待,锁或者重复获取等方法解决。