Update accesstoken.lib.php

src
pfspx4a7z 6 months ago
parent becdac8a66
commit 2be7e3d181

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