背景:微信网站开发

  昨天我负责的一个项目忽然出现了一个十分诡异的bug,进行微信授权登录的时候请求code的时候安卓手机会多次重定向调转我的接口接收code的接口(redirect_uri 微信请求调转接收code的的接口,加了Url.encode()),也就是我这边默认请求了多次这个接口,然而苹果手机没有问题,于是我写了日志看了下没错,有时候会请求两次或者更多次这个重定向的接口地址,所以导致了与用户登录进去以后,报  {“errcode”:40163,"errmsg":"code been used"} 这里提示已经非常的明白,code已经被使用过了,为何这个项目上线后了三四个月了,才会出现这个问题,然后我其他的项目也是使用同样的微信授权登录的写法都完全没毛病。

  结合这个问题我到网上查找了一些解决方案,有人说使用缓冲把第一次获取的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的时候不仅仅只去找程序的代码是否有问题,还应该从服务器,网络环境等多个方面去寻找,不能在一棵树上吊死!!

微信公众平台网页登录授权多次重定向跳转,导致code使用多次问题的更多相关文章

  1. 微信公众平台网页获取用户OpenID方法

    下面我们一起来看看关于微信公众平台网页获取用户OpenID方法,有需要了解的朋友可以一起来看看吧.用户点击微信自定义菜单view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值 (即网页链接 ...

  2. 微信公众平台网页开发实战--3.利用JSSDK在网页中获取地理位置(HTML5+jQuery)

    复制一份JSSDK环境,创建一份index.html文件,结构如图7.1所示. 图7.1  7.1节文件结构 在location.js中,封装“getLocation”接口,如下: 01 wxJSSD ...

  3. 微信公众平台网页授权登陆access_token误区

    公众平台里显示 每日获取access_token上线2000次,此access_token并非网页授权登陆的access_token大家不要混淆 1,网页授权登陆的access_token是没有上线的 ...

  4. 微信公众平台OAuth2.0授权

    1. 配置授权回调页面域名 进入微信公众平台后台后,依次进入开发者中心-权限表,找到网页授权获取用户基本信息,点击右侧的修改. 授权回调域名配置规范为全域名并且不带http,比如需要网页授权的域名为: ...

  5. js 微信公众号网页用户授权,获取微信code,access_tocken,用户信息

    第一次做微信网页授权,过程有点艰难,主要是不知道redirect_uri的地址要怎么写,刚开始我以为就是授权结束后要跳转到的首页地址,于是写成了uri = 'http://18i194c049.ias ...

  6. 微信公众平台--网页授权获取用户基本信息(snsapi_base方式)

    关于snsapi_base网页授权的说明 以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的.用户感知的就是直接进入了回调 ...

  7. 微信公众平台--网页授权获取用户基本信息(snsapi_userinfo方式)

    关于snsapi_userinfo网页授权的说明 以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的.但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注, ...

  8. 总结微信公众平台网页开发中遇到的ios的兼容问题

    1. ios中音频不自动播放: 原因:出于节省流量的初衷,ios系统禁止音视频自动播放. 解决方案:使用微信的JS-SDK. DEMO: 先引入微信的JS-SDK, <script src=&q ...

  9. ***微信公众平台开发: 获取用户基本信息+OAuth2.0网页授权

    本文介绍如何获得微信公众平台关注用户的基本信息,包括昵称.头像.性别.国家.省份.城市.语言.本文的方法将囊括订阅号和服务号以及自定义菜单各种场景,无论是否有高级接口权限,都有办法来获得用户基本信息, ...

随机推荐

  1. spring boot sso

    https://hellokoding.com/hello-single-sign-on-sso-with-json-web-token-jwt-spring-boot/ https://github ...

  2. 《Hadoop金融大数据分析》读书笔记

    <Hadoop金融大数据分析> Hadoop for Finance Essentials 使用Hadoop,是因为数据量大数据量如此之多,以至于无法用传统的数据处理工具和应用来处理的数据 ...

  3. Java基础系列--冒泡排序

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9064218.html 1.算法简介 冒牌排序是很耳熟的排序方式,虽然它使用的很少,但是经 ...

  4. 跨域问题实践总结! 上(JSONP/document.domain/window.name)

    1. JSONP 首先要介绍的跨域方法必然是 JSONP. 现在你想要获取其他网站上的 JavaScript 脚本,你非常高兴的使用 XMLHttpRequest 对象来获取.但是浏览器一点儿也不配合 ...

  5. 给xmpphp添加了几个常用的方法

    给xmpphp添加给了以下的常用方法: registerNewUser            //注册一个新用户 addRosterContact           //发送添加好友的请求 acce ...

  6. app后端设计(11)-- 系统架构(2014.12.05更新)

    个人认为,在小型的创业团队中,特别是以应用产品为主,在架构后台的时候,需要集中精力解决自身业务上的问题,不是花时间解决第三方已经解决的问题,简单点来说,就是能用第三方服务就使用第三方的服务.基于这个原 ...

  7. Java Script中常见操作

    字符串常见操作:obj.length 长度obj.trim() 移除空白obj.trimLeft()obj.trimRight)obj.charAt(n) 返回字符串中的第n个字符obj.concat ...

  8. ApplicationContextAware 接口的作用

    接口说明:当一个类实现了这个接口之后,这个类就可以方便地获得 ApplicationContext 中的所有bean.换句话说,就是这个类可以直接获取Spring配置文件中,所有有引用到的bean对象 ...

  9. NSQ源码剖析之nsqd

    NSQ简介 NSQ 是实时的分布式消息处理平台,其设计的目的是用来大规模地处理每天数以十亿计级别的消息.NSQ 具有分布式和去中心化拓扑结构,该结构具有无单点故障.故障容错.高可用性以及能够保证消息的 ...

  10. BZOJ_3238_[Ahoi2013]差异_后缀自动机

    BZOJ_3238_[Ahoi2013]差异_后缀自动机 Description Input 一行,一个字符串S Output 一行,一个整数,表示所求值 Sample Input cacao Sam ...