(PHP)微信公众号基础接口access_token的获取与缓存

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。

猜你喜欢

转载自www.cnblogs.com/PER10/p/11136017.html