背景:微信网站开发

  昨天我负责的一个项目忽然出现了一个十分诡异的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. CSS布局十八般武艺都在这里了

    CSS布局十八般武艺都在这里了 Shelley Lee 4 个月前 布局是CSS中一个重要部分,本文总结了CSS布局中的常用技巧,包括常用的水平居中.垂直居中方法,以及单列布局.多列布局的多种实现方式 ...

  2. 33.APP后端处理视频的方案

    在当前的app应用中,到处都能看到视频的身影,例如,在社交类的app上,用户可以拍摄属于自己的小视频,并发布到相应得栏目,增加和好友们互动的机会. 后台常见的视频处理有以下几种: ·          ...

  3. Python分词模块推荐:jieba中文分词

    一.结巴中文分词采用的算法 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合对于未登录词,采 ...

  4. Asp.Net Core NLog 将日志输出到数据库以及添加LayoutRenderer的支持

    在这之前打算用Apache的Log4Net,但是发现其AdoNetAppender方法已经不存在了,无法使用配置文件直接输出到数据库了,因此我便改用了NLog框架. 一.对项目添加NLog 通过Nug ...

  5. HTTP/HTTPS 学习笔记

    超文本传输协议(HyperText Transfer Protocol) 伴随着计算机网络和浏览器的诞生,HTTP1.0也随之而来,处于计算机网络中的应用层,HTTP是建立在TCP协议之上的. HTT ...

  6. Mac下安装git

    gti下载地址 https://git-scm.com/downloads 一步一步来就完事了.安装完以后执行 git version 查看是否更新到了该版本

  7. 简化异常处理的Throwables类

    简化异常处理的Throwables类 有时候, 当我们我们捕获异常, 并且像把这个异常传递到下一个try/catch块中.Guava提供了一个异常处理工具类, 可以简单地捕获和重新抛出多个异常.例如: ...

  8. CString 转化成 const char* 类型

    写程序的时候经常会遇到无法将“CString”转换为“const char *”的错误,这里我找到了一个解决办法,与大家分享下: CString cs = _T("); ) * ; char ...

  9. BZOJ_3831_[Poi2014]Little Bird_单调队列优化DP

    BZOJ_3831_[Poi2014]Little Bird_单调队列优化DP Description 有一排n棵树,第i棵树的高度是Di. MHY要从第一棵树到第n棵树去找他的妹子玩. 如果MHY在 ...

  10. Volley手写属于自己的万能网络访问框架

    用户在调用层(Activity或Service中),发起一个网络请求,该请求肯定包含url,请求参数(requestParameter),以及我们需要给调用层提供一个请求成功或失败以后回调监听的接口d ...