java - 微信开发网页授权
问题描述
在授权成功的页面刷新一次就会出报错{'errmsg':'code been used, hints: [ req_id: Rwakxa0262th10 ]','errcode':40163}
问题解答
回答1:这个问题我解决。大概是这么一会儿事儿。微信授权的时候,微信官方让你用一个引导地址(A.action)去重定向到另外一个地址(B.action),在第二个地址(B.action)中可以获取code,用code换取access_token,refresh_token等。多半情况是第一次能拿到用户信息,但是第二次刷新的时候,提示errcode':40163,'errmsg':'code been used。说明code被使用过一次了,官方文档说的很清楚,code只能用一次。当然不管你有没有刷新,只要你是用的code是同一个,而且不是第一次使用就会报上面的错误。我是这么解决的,在B.action中先去判断session中是否存在code换取到的access_token和refresh_token等(最好是封装成实体对象,比较好判断),如果不存在说明code首次被使用(之前页面被关闭了),如果存在则去session中直接获取access_token或者是refresh_token。用获得的access_token和refresh_token去获取用户信息。希望我说的对你有帮助!
回答2:提示很清楚code已经被使用了,code只能被使用一次。
回答3:你授权的处理部分有问题,授权拿到用户信息之后就保存到session里面去 你授权之后没有保存到session中,导致刷新页面后,session中没有用户信息,但是地址中还带有code参数,于是就拿着code去拿授权,但是这个code已经用过了,code只能用一次的
回答4:是这样,OAuth2.0的授权URI指定参数有类似response type,authorization code,state之类的,你调用微信OAuth2.0授权接口,传入了各种appid appsecret,就是为了获取authorization code用的,这个code干嘛的呢,是第三方(也就是你,用户授权你访问他在微信的资源)用来和OAuth授权服务器换取AccessToken用的,也就是调用我开篇讲的授权URI使用的参数,在OAuth2.0规范里,该URI返回的参数包括AccessToken,RefreshToken等等,有了这个AccessToken,你就可以用它和资源服务器进行验证从而拿到用户资源了,那么OAuth2.0规定了,为了安全,这个authorization code只能换取一次AccessToken。
那么微信是怎么实现的呢,他们的授权接口包括了response type,redirect uri,state,appid,appsecret等参数,他们的逻辑就是用户先调用这个授权接口,然后进行授权(或静默授权),当用户确定授权后,此时调用的仍然是微信授权接口,微信授权服务器确认授权后,将请求重定向至你设定的redirect uri,并且在这个uri中添加URL参数code及state,这个code就是authorization code,于是你的服务器就会通过这次重定向收到authorization code,你就可以用这个code去换取AccessToken,进而获取到用户在微信的各种资源了(比如open id)。
所以你说为什么刷新报错,我严重怀疑你刷新的是你自己服务器的url,然后你的代码又获取了一次相同的code,再去兑换,当然就报错code重复使用了。
回答5:关注一下,是否连续进行了两次请求(使用同样code换取用户信息),导致第二次使用该code出现该错误
回答6:你点过微信支付了吗,那个 支付 按钮只能点一次,调起来支付后,如果取消支付,再去点击 支付,就报错了,只能退出当前页面,重新进!
回答7:楼主解决 了吗,我也遇到同样的问题了 ?
相关文章:
1. login.html登录界面为什么和老师讲课的届而不一样?2. javascript - 页面如何获取重定向的url?3. 微信小程序的选项卡中的数据分页加载卡顿问题???4. 利用百度地图API定位及附件商家信息服务5. html按键开关如何提交我想需要的值到数据库6. javascript - 求解答,koa-bodyparser获取到的参数是空对象,为什么?????7. css3 - 如何修改mui-icon图标的大小?8. mysql - 大表和小表连接,应该注意什么,性能上9. mysql优化 - mysql EXPLAIN之后怎么看结果进行优化 ?10. javascript - 百度echarts图表如何修改