You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
2.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

namespace LaneWeChat\Core;
/**
* 微信Access_Token的获取与过期检查
* 创建者Lane
* 用户名lane
* 日期13-12-29
* 时间下午5:54
* 邮箱lixuan868686@163.com
* 网站http://www.lanecn.com
*/
class AccessToken{
/**
* 获取微信Access_Token
* 这个方法首先检查本地是否已经存在有效的access_token如果不存在或已过期则调用_getAccessToken方法从微信服务器获取新的access_token。
*/
public static function getAccessToken(){
//检测本地是否已经拥有access_token并且检测access_token是否过期
$accessToken = self::_checkAccessToken();
if($accessToken === false){
$accessToken = self::_getAccessToken();
}
return $accessToken['access_token'];
}
/**
* 从微信服务器获取微信ACCESS_TOKEN
* 这个方法构造请求微信服务器获取access_token的URL并发起GET请求获取access_token。
* @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;
$accessToken = Curl::callWebServer($url, '', 'GET');
if(!isset($accessToken['access_token'])){
return Msg::returnErrMsg(MsgConstant::ERROR_GET_ACCESS_TOKEN, '获取ACCESS_TOKEN失败');
}
$accessToken['time'] = time();
$accessTokenJson = json_encode($accessToken);
//存入数据库
/**
* 请将变量$accessTokenJson给存起来这个变量是一个字符串
*/
$f = fopen('access_token', 'w+');
fwrite($f, $accessTokenJson);
fclose($f);
return $accessToken;
}
/**
* 检测微信ACCESS_TOKEN是否过期
* 这个方法检查本地存储的access_token是否过期-10是预留的网络延迟时间。
* @return bool 返回access_token是否有效
*/
private static function _checkAccessToken(){
//获取access_token。是上面的获取方法获取到后存起来的。
// $accessToken = YourDatabase::get('access_token');
$data = file_get_contents('access_token');
$accessToken['value'] = $data;
if(!empty($accessToken['value'])){
$accessToken = json_decode($accessToken['value'], true);
if(time() - $accessToken['time'] < $accessToken['expires_in']-10){
return $accessToken;
}
}
return false;
}
}