微信网页授权 通过code获取openid 报错40163 code been used
Posted lewo的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信网页授权 通过code获取openid 报错40163 code been used相关的知识,希望对你有一定的参考价值。
使用好好的微信功能,突然安卓无法正常使用了,苹果的正常。
安卓报错内容:
40163,code been used.
题外话:微信的东西,为何报英文错误呢,装什么13.
实测结果:安卓获取用户信息时 ,触发了两次请求,而苹果只请求一次。
各种搜索,各种尝试,均无效。
沉下来好好想想,再反复测试, 最终发现问题出在获取用户信息的 时候,同一个code在短时间内使用了两次,
public function get_access_token($code){ //基础token // $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret"; //网页授权token $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=$this->appId&secret=$this->appSecret&code=$code&grant_type=authorization_code"; $dc[‘url‘]=$code; D("ticai_request_log")->add($dc); $res = json_decode($this->httpGet($url)); return $res; }
至于多久后才能使用相同的code,还没测试出来,
感觉问题在这里,那就在 上一层开始拦截,也就是,如果出现 相同的code时,不用再获取用户信息了。
关键代码来了:
if (isset($_GET[‘code‘])){ $code=$_GET[‘code‘]; $code_session=session("code"); if($code==$code_session){ //什么都不做 } else{ //缓存起来 session("code",$code,10); //获取用户信息 $access_token=$jssdk->get_access_token($_GET[‘code‘]); 这时获取到的openid要缓存起来,后边的代码会用到的。 } }
思路:
回调后,获取到code,与session比较,如果一样,说明是第二次请求了,什么都不处理,
如果不一样,说明是初次请求,那就调接口获取用户信息吧。
这里好像
只能用session缓存,用cookie无法取到,其实前一天用cookie是没问题的, 不知道为何第二天又不行了,
明天再测试一下session会不会再出问题,坑人的微信。
以上是关于微信网页授权 通过code获取openid 报错40163 code been used的主要内容,如果未能解决你的问题,请参考以下文章