Update accesstoken.lib.php

src
pvfho47bq 7 months ago
parent f8fd1083f4
commit 398209864c

@ -1,6 +1,11 @@
namespace LaneWeChat\Core; <?php
namespace LaneWeChat\Core; // 定义命名空间为 LaneWeChat\Core表示该类属于微信核心功能模块
/** /**
* 微信Access_Token的获取与过期检查 * 微信Access_Token的获取与过期检查
*
* 该类负责管理微信Access_Token的获取和有效期检查确保在使用微信API时始终使用有效的Access_Token。
*
* 创建者Lane * 创建者Lane
* 用户名lane * 用户名lane
* 日期13-12-29 * 日期13-12-29
@ -12,72 +17,71 @@ class AccessToken{
/** /**
* 获取微信Access_Token * 获取微信Access_Token
* 这个方法首先检查本地是否已经存在有效的access_token如果不存在或已过期则调用_getAccessToken方法从微信服务器获取新的access_token。 *
* 该方法首先检查本地缓存中是否存在有效的Access_Token若不存在或已过期则调用私有方法_getAccessToken从微信服务器获取新的Access_Token。
*
* @return string 返回有效的Access_Token字符串
*/ */
public static function getAccessToken() { public static function getAccessToken() {
//检测本地是否已经拥有access_token并且检测access_token是否过期 // 检查本地缓存中是否存在有效的Access_Token
$accessToken = self::_checkAccessToken(); $accessToken = self::_checkAccessToken();
if ($accessToken === false) { if ($accessToken === false) {
//如果本地没有有效的access_token则从微信服务器获取新的access_token // 若本地缓存中不存在有效的Access_Token则从微信服务器获取新的Access_Token
$accessToken = self::_getAccessToken(); $accessToken = self::_getAccessToken();
} }
//返回access_token的值 // 返回有效的Access_Token字符串
return $accessToken['access_token']; return $accessToken['access_token'];
} }
/** /**
* 从微信服务器获取微信ACCESS_TOKEN * 从微信服务器获取Access_Token
* 这个方法构造请求微信服务器获取access_token的URL并发起GET请求获取access_token。 *
* @return Ambigous|bool 返回获取到的access_token数组或者在失败时返回错误信息 * 该方法构造请求微信服务器获取Access_Token的URL并通过HTTP GET请求从微信服务器获取Access_Token。
*
* @return array|bool 返回获取到的Access_Token数组或在获取失败时返回错误信息
*/ */
private static function _getAccessToken() { private static function _getAccessToken() {
//构造请求微信服务器获取access_token的URL // 构造请求微信服务器获取Access_Token的URL
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.WECHAT_APPID.'&secret='.WECHAT_APPSECRET; $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.WECHAT_APPID.'&secret='.WECHAT_APPSECRET;
//使用Curl类的callWebServer方法发起GET请求获取access_token // 发起HTTP GET请求获取Access_Token
$accessToken = Curl::callWebServer($url, '', 'GET'); $accessToken = Curl::callWebServer($url, '', 'GET');
//检查返回的数据中是否包含access_token字段 // 检查返回的数据中是否包含Access_Token字段
if (!isset($accessToken['access_token'])) { if (!isset($accessToken['access_token'])) {
//如果获取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的时间 // 记录获取Access_Token的时间
$accessToken['time'] = time(); $accessToken['time'] = time();
//将access_token数据转换为JSON格式的字符串 // 将Access_Token数据转换为JSON格式的字符串
$accessTokenJson = json_encode($accessToken); $accessTokenJson = json_encode($accessToken);
//存入数据库 // 将Access_Token数据存入文件
/**
* 请将变量$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数据 // 返回获取到的Access_Token数据
return $accessToken; return $accessToken;
} }
/** /**
* 检测微信ACCESS_TOKEN是否过期 * 检测Access_Token是否过期
* 这个方法检查本地存储的access_token是否过期-10是预留的网络延迟时间。 *
* @return bool 返回access_token是否有效 * 该方法检查本地存储的Access_Token是否已过期预留10秒的网络延迟时间以确保在使用Access_Token时不会因过期而导致请求失败。
*
* @return bool|array 返回Access_Token是否有效若有效则返回Access_Token数据否则返回false
*/ */
private static function _checkAccessToken() { private static function _checkAccessToken() {
//获取本地存储的access_token数据 // 获取本地存储的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 = json_decode($data, true);
if(!empty($accessToken['value'])){ if (!empty($accessToken)) {
//将JSON格式的字符串转换为关联数组 // 检查Access_Token是否过期预留10秒的网络延迟时间
$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数据 // 若Access_Token未过期则返回Access_Token数据
return $accessToken; return $accessToken;
} }
} }
//如果access_token不存在或已过期则返回false // 若Access_Token不存在或已过期则返回false
return false; return false;
} }
} }
Loading…
Cancel
Save