$advertiser_id, 'access_token' => $accessToken], 'getAccessToken'); if(empty($accessToken)){ // 从数据库获取 token_id $tokenId = self::query()->where('advertiser_id', $advertiser_id)->where('enable', 1)->value('token_id'); if (empty($tokenId)) { Log::error('获取access_token异常-tokenid为空', ['advertiser_id' => $advertiser_id], 'getAccessToken'); return null; } // 从数据库获取 access_token $accessTokenInfo = JuxingAccountInfo::query()->where('id', $tokenId)->first(); $accessToken = $accessTokenInfo->access_token ?? null; if (empty($accessTokenInfo->access_token)) { Log::error('获取access_token异常-access_token为空', ['advertiser_id' => $advertiser_id], 'getAccessToken'); return null; } // 判定refresh_token是否过期,若已过期则将账户禁用 if( $accessTokenInfo->refresh_token_expires_at < date('Y-m-d H:i:s')) { self::query()->where('advertiser_id', $advertiser_id)->update(['enable' => 0]); Log::info('账户refresh_token过期,将账户禁用, 账户:【'.$advertiser_id.'】,过期时间:【'.$accessTokenInfo->refresh_token_expires_at.'】', [], 'disableJuxingAccount'); } // $accessToken 会在过期前1小时更新,所以可以保证有效期永远大于10分钟 Cache::put($cacheKey, $accessToken, 600); //缓存10分钟 } return $accessToken; } catch (\Exception $exception) { EmailQueue::rPush('获取access_token程序异常', json_encode(['advertiser_id' => $advertiser_id, 'file' => $exception->getFile(), 'line' => $exception->getLine() , 'message' => $exception->getMessage()], 256), ['song.shen@kuxuan-inc.com'], '聚星'); Log::error('获取access_token程序异常', [ 'advertiser_id' => $advertiser_id, 'file' => $exception->getFile(), 'line' => $exception->getLine(), 'message' => $exception->getMessage(), 'trace' => $exception->getTraceAsString()], 'getAccessTokenError'); } } }