解决微信网页授权:出现errcode:40163

首先看下流程:

微信内调用网页授权,首先是服务器发起访问一个微信网页授权的地址,带上回调地址。这个发起访问一般都没问题,按照那个文档来就可以,然后微信会主动访问你那个自己服务器的回调地址,并且带上一个参数code,然后自己的服务器接收到这个参数后,就把这个参数组装加密什么的,再去访问相关地址获取access_token,最终获取到用户信息,获取用户信息后,服务器还必须 反一个页面给用户,

那么在接到code到最终反一个页面给用户的过程中,如果本身程序就有错误,特别是在使用了这个code过后的出错,服务器反会错误了,那么这个时候,微信会根据最上面的原理,再次开启另外一个IP来访问,并且同样带和上次一样的code参数。这样你服务器又会去根据这个code参数去完成同样一次申请,这个时候,你表面上看起,就是报40163错误。说code被用了,但实际上是因为微信被迫开启另外一个ip来访问你的。。
 

 但是正常流程微信只会访问一次你的授权接口。

以下是我的解决过程:

1、根据打印日志查看code是否获取到,我的是接口调用两次,第二次和第一次的code打印出来不一样,在网上查了很多,有人说是code被使用,第二次访问就会报此错误,也有人说是你的逻辑代码执行时间太长,超过十秒,微信就会再调用一次你的接口,这时就会报错,但是我打印出来执行时间并没有超过10s.可能这个有用,但是对我的问题来说并没有什么作用

2、会不会是code过期。根据这个想法,我把第一次获取到的code存在redis中,等到用的时候,直接从redis中取,超过5分钟的 则重新获取code(总所周知微信网页授权获取到的 code 只能使用一次 ,5分钟内有效),一旦使用就移除,保证每次使用的code都是有效的。但是这个方法对我的问题还是没有解决。

3、会不会是自己逻辑代码有问题。通过对逻辑代码的打印,查看,结果发现在最后一步返回数据时出了问题,这个简直了,修改后,问题立马解决。瞬间有种想抽死自己的感觉,找了一天的问题居然是这个。

其实报这个错误不是人家微信的错误,与其说别人的错,还不如多看看自己写的代码,没茅台~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章