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。