diff --git a/core/accesstoken.lib.php b/core/accesstoken.lib.php index 6991fb3..9ef5ab5 100644 --- a/core/accesstoken.lib.php +++ b/core/accesstoken.lib.php @@ -6,7 +6,7 @@ namespace LaneWeChat\Core; * 日期:13-12-29 * 时间:下午5:54 * 邮箱:lixuan868686@163.com - * 网站:http://www.lanecn.com + * 网站:http://www.lanecn.com */ class AccessToken{ @@ -18,8 +18,10 @@ class AccessToken{ //检测本地是否已经拥有access_token,并且检测access_token是否过期 $accessToken = self::_checkAccessToken(); if($accessToken === false){ + //如果本地没有有效的access_token,则从微信服务器获取新的access_token $accessToken = self::_getAccessToken(); } + //返回access_token的值 return $accessToken['access_token']; } @@ -29,20 +31,28 @@ class AccessToken{ * @return Ambigous|bool 返回获取到的access_token数组或者在失败时返回错误信息 */ private static function _getAccessToken(){ - $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.WECHAT_APPID.'&secret='.WECHAT_APPSECRET; + //构造请求微信服务器获取access_token的URL + $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.WECHAT_APPID.'&secret='.WECHAT_APPSECRET; + //使用Curl类的callWebServer方法发起GET请求获取access_token $accessToken = Curl::callWebServer($url, '', 'GET'); + //检查返回的数据中是否包含access_token字段 if(!isset($accessToken['access_token'])){ + //如果获取access_token失败,则返回错误信息 return Msg::returnErrMsg(MsgConstant::ERROR_GET_ACCESS_TOKEN, '获取ACCESS_TOKEN失败'); } + //记录获取access_token的时间 $accessToken['time'] = time(); + //将access_token数据转换为JSON格式的字符串 $accessTokenJson = json_encode($accessToken); //存入数据库 /** * 请将变量$accessTokenJson给存起来,这个变量是一个字符串 */ + //将access_token数据写入文件 $f = fopen('access_token', 'w+'); fwrite($f, $accessTokenJson); fclose($f); + //返回获取到的access_token数据 return $accessToken; } @@ -52,16 +62,22 @@ class AccessToken{ * @return bool 返回access_token是否有效 */ private static function _checkAccessToken(){ - //获取access_token。是上面的获取方法获取到后存起来的。 -// $accessToken = YourDatabase::get('access_token'); + //获取本地存储的access_token数据 + //注释掉的代码是使用数据库获取access_token数据的示例 + // $accessToken = YourDatabase::get('access_token'); $data = file_get_contents('access_token'); + //将获取到的数据转换为关联数组 $accessToken['value'] = $data; if(!empty($accessToken['value'])){ + //将JSON格式的字符串转换为关联数组 $accessToken = json_decode($accessToken['value'], true); + //检查access_token是否过期,预留10秒的网络延迟时间 if(time() - $accessToken['time'] < $accessToken['expires_in']-10){ + //如果access_token未过期,则返回access_token数据 return $accessToken; } } + //如果access_token不存在或已过期,则返回false return false; } } \ No newline at end of file