https://www.cnblogs.com/king2016/p/6096776.html
注意:
1)公众号开发文档中说过,用中控服务器来获取和缓存、提供access_token。其他业务逻辑点统一访问中控服务器以获取。不建议在各个业务逻辑点分别获取access_token,防止频繁获取而超过公众号所规定的获取次数。(思路的本质:在一个地方统一判断是否超时,超时则统一获取一次access_token——统一判断,统一获取)
2)各个业务逻辑点最好在调用接口后判断是否因access_token过时而产生异常,因为中控获取的access_token可能因自身的不良时间差(如读取时间慢)而导致获取的是过时的access_token。
业务逻辑点中的关键代码(带判断):
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url); //$url:带有access_token参数的接口地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$a = curl_exec($ch);
$strjson=json_decode($a);
//var_dump($strjson); //开启可调试
if (!empty($strjson-> errcode))
{
switch ($strjson-> errcode){
case 40001: //access_token过时
//在这里重新获取中控的access_token
break;
case 41001:
//缺少access_token参数
break;
default:
throw new Exception($strjson->errmsg); //其他错误,抛出
break;
}
}
个人新想法:如果简单设计,可以考虑用一个静态类来代替中控服务器,各个业务逻辑访问这个静态类。前提:所有业务逻辑必须单线程访问静态类,多线程则静态类必须加读写锁,防止多个业务逻辑同时访问静态类而导致频繁获取access_token。