微信获取多次获取全局的access_token冲突导致无效?(算是解决)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了微信获取多次获取全局的access_token冲突导致无效?(算是解决),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3584字,纯文字阅读大概需要6分钟。
内容图文
![微信获取多次获取全局的access_token冲突导致无效?(算是解决)](/upload/InfoBanner/zyjiaocheng/149/d68fb73ebf884cd6862746063fc4d8c5.jpg)
token默认是7200秒过期,如果有第二地方也请求同一个token的话,那么第一个token会在5分钟之内过期。也就是说我第二次请求的时候如果时间过短会引起冲突。
刚刚学习微信开发,代码写的不是很完美。只过了是否大于7200生存期的判断,看到有人说可以判断每分钟读取,不知道各位大大对我的代码有什么优化建议?谢谢
function getWxAccessToken(){
if ( $_SESSION['access_token'] && $_SESSION['expire_time'] > time() ) {
//未过期
return $_SESSION['access_token'];
}else {
$appid = "wx3bbf9ae731a6eb07";
$appsecret = "2b14a75fa48825ef3c76c8949b5e030f";
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
$res =$this->https_request($url,'get','json');
$access_token = $res["access_token"];
//将重新获取到的access_token存到session里
$_SESSION['access_token']=$access_token;
$_SESSION['expire_time']=time()+7200;
return $access_token;
}
}
起冲突的是同一个控制器下的一个方法,每次调用都是用
$access_token=$this->getWxAccessToken();
报错信息如下
array(2) {
["errcode"] => int(40001)
["errmsg"] => string(81) "invalid credential, access_token is invalid or not latest hint: [pd4MfA0688vr40!]"
}
看到官方说的
0.0官方的意思就是不要用业务逻辑点去刷新token,我这么写好像就是属于用业务逻辑刷新,用第三方中控什么意思呢
把方法的绝对路径放在二维码生成器里,扫描。这样调试的结果比浏览器直接访问正确点感觉。
多数情况下,浏览器打开如果报40001,基本上程序是没问题的
回复内容:
token默认是7200秒过期,如果有第二地方也请求同一个token的话,那么第一个token会在5分钟之内过期。也就是说我第二次请求的时候如果时间过短会引起冲突。
刚刚学习微信开发,代码写的不是很完美。只过了是否大于7200生存期的判断,看到有人说可以判断每分钟读取,不知道各位大大对我的代码有什么优化建议?谢谢
function getWxAccessToken(){
if ( $_SESSION['access_token'] && $_SESSION['expire_time'] > time() ) {
//未过期
return $_SESSION['access_token'];
}else {
$appid = "wx3bbf9ae731a6eb07";
$appsecret = "2b14a75fa48825ef3c76c8949b5e030f";
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
$res =$this->https_request($url,'get','json');
$access_token = $res["access_token"];
//将重新获取到的access_token存到session里
$_SESSION['access_token']=$access_token;
$_SESSION['expire_time']=time()+7200;
return $access_token;
}
}
起冲突的是同一个控制器下的一个方法,每次调用都是用
$access_token=$this->getWxAccessToken();
报错信息如下
array(2) {
["errcode"] => int(40001)
["errmsg"] => string(81) "invalid credential, access_token is invalid or not latest hint: [pd4MfA0688vr40!]"
}
看到官方说的
0.0官方的意思就是不要用业务逻辑点去刷新token,我这么写好像就是属于用业务逻辑刷新,用第三方中控什么意思呢
把方法的绝对路径放在二维码生成器里,扫描。这样调试的结果比浏览器直接访问正确点感觉。
多数情况下,浏览器打开如果报40001,基本上程序是没问题的
建议将access_token存储到数据库,这样各处业务都使用同一个token,这样就不会发生每个业务逻辑点各自请求access_token的情况了;
官方文档的意思是如果业务逻辑在多台服务器上,由于access_token和expire_time存储在session中,服务器之间不会共享session,就会导致每台服务器上的业务都会发起请求,如果其中一台服务器上的access_token尚未超时,而另一台服务器重新请求了access_token,使得第一台服务器上的access_token失效,继而使用过期的access_token去请求服务,导致服务不稳定
使用中控服务器存储access_token,这样统一服务,不会发生业务之间的冲突,保证了数据的一致性
access_token对所有的调用是通用的,没必要放session,每个人的session又不一样,一般放缓存里面,要不然你就放数据库就好了。
每次用到的时候都去数据库里面差有效期内的话,直接用,失效的话重新获取,再插入数据库。
session是基于用户的,你这样每个用户访问一次就刷一次了。
建议放到缓存或者数据库,定期刷新。
内容总结
以上是互联网集市为您收集整理的微信获取多次获取全局的access_token冲突导致无效?(算是解决)全部内容,希望文章能够帮你解决微信获取多次获取全局的access_token冲突导致无效?(算是解决)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。