84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
在授权成功的页面刷新一次就会出报错{"errmsg":"code been used, hints: [ req_id: Rwakxa0262th10 ]","errcode":40163}
小伙看你根骨奇佳,潜力无限,来学PHP伐。
这个问题我解决。大概是这么一会儿事儿。微信授权的时候,微信官方让你用一个引导地址(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去获取用户信息。希望我说的对你有帮助!
提示很清楚code已经被使用了,code只能被使用一次。
code
你授权的处理部分有问题,授权拿到用户信息之后就保存到session里面去 你授权之后没有保存到session中,导致刷新页面后,session中没有用户信息,但是地址中还带有code参数,于是就拿着code去拿授权,但是这个code已经用过了,code只能用一次的
是这样,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重复使用了。
关注一下,是否连续进行了两次请求(使用同样code换取用户信息),导致第二次使用该code出现该错误
你点过微信支付了吗,那个 支付 按钮只能点一次,调起来支付后,如果取消支付,再去点击 支付,就报错了,只能退出当前页面,重新进!
楼主解决 了吗,我也遇到同样的问题了 ?
这个问题我解决。
大概是这么一会儿事儿。
微信授权的时候,微信官方让你用一个引导地址(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去获取用户信息。
希望我说的对你有帮助!
提示很清楚
code
已经被使用了,code
只能被使用一次。你授权的处理部分有问题,授权拿到用户信息之后就保存到session里面去
你授权之后没有保存到session中,导致刷新页面后,session中没有用户信息,但是地址中还带有code参数,于是就拿着code去拿授权,但是这个code已经用过了,code只能用一次的
是这样,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重复使用了。
关注一下,是否连续进行了两次请求(使用同样code换取用户信息),导致第二次使用该code出现该错误
你点过微信支付了吗,那个 支付 按钮只能点一次,调起来支付后,如果取消支付,再去点击 支付,就报错了,只能退出当前页面,重新进!
楼主解决 了吗,我也遇到同样的问题了 ?