redis; $storeId = RedisConfig::WECHAT_ACCESS_TOKEN_PREFIX . $appId; // access_token 应该全局存储与更新, $data = false; if ($redis->exists($storeId)) { $data = json_decode($redis->get($storeId)); } if (!isset($data->access_token) || !isset($data->expire_time)) { $data = new stdClass(); $data->expire_time = 0; $data->access_token = ''; } $time = time(); //如果当前日期已经超过了过期时间,那么重新获取access token if ($time > $data->expire_time || true == $forceRefresh) { // 如果是企业号用以下URL获取access_token // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={$this->appId}&corpsecret={$this->appSecret}"; $url = self::TOKEN_URL."&appid={$appId}&secret={$appSecret}"; $res = json_decode(Http::get($url)); if (isset($res->access_token)) { $data->expire_time = $time + 7000; $data->access_token = $res->access_token; $redis->set($storeId, json_encode($data)); $redis->expireat($storeId, $data->expire_time); // 到期自动删除 // 跟踪日志 if ($forceRefresh) { self::myLog("AccessToken强制刷新: access_token=[" . $data->access_token . "], expire_time=[" . $data->expire_time . "], 修改时间=[" . date("Y-m-d H:i:s", time()) . "], storeId[" . $storeId . "]"); } else { self::myLog("AccessToken正常刷新: access_token=[" . $data->access_token . "], expire_time=[" . $data->expire_time . "], 修改时间=[" . date("Y-m-d H:i:s", time()) . "], storeId[" . $storeId . "]"); } return $data->access_token; } else { Yii::getLogger()->log(json_encode($res), Logger::LEVEL_ERROR); } } else { return $data->access_token; } } }