昨天我负责的一个项目突然出现了一个十分诡异的bug,进行微信受权登陆的时候请求code的时候安卓手机会屡次重定向调转个人接口接收code的接口(redirect_uri 微信请求调转接收code的的接口,加了Url.encode()
),也就是我这边默认请求了屡次这个接口,然而苹果手机没有问题,因而我写了日志看了下没错,有时候会请求两次或者更屡次这个重定向的接口地址,因此致使了与用户登陆进去之后,报 {“errcode”:40163,"errmsg":"code been used"} 这里提示已经很是的明白,code已经被使用过了,为什么这个项目上线后了三四个月了,才会出现这个问题,而后我其余的项目也是使用一样的微信受权登陆的写法都彻底没毛病。api
结合这个问题我到网上查找了一些解决方案,有人说使用缓冲把第一次获取的code存入缓冲,而后再请请求的时候判断是否存在这个值,这种方法虽然听起来挺合理的,可是彻底不符合开发原谅,而且没有从更本上找到问题。安全
还有一种方式就是在请求连接中加上一个参数:connect_redirect=1 ( 微信请求code的接口:https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_uri=xxx&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect),不少人的屡次请求都加上这个参数解决了,而我发现个人并非这个问题,不过假如大家遇到了这个问题能够试一试也许有用。服务器
最后我发现不管我怎么改动个人代码,微信仍是默认会返回多个一样的code给我,最后我在个人服务器采起网络抓吧,结果终于让我找到了bug的源头,原来是360安全卫士搞得鬼,每次会员请求一次让后360也会模拟一次请求,致使了有时候多吃请求,把360一关闭就行了,真的是太坑了,熬夜整整搞了一天,这个锅终于不用我背了,网站又能够正常运行了。微信
经过此次我知道了,其实有的时候咱们在找bug的时候不单单只去找程序的代码是否有问题,还应该从服务器,网络环境等多个方面去寻找,不能在一棵树上吊死!!网络