Нет описания

JuxingAdAccount.php 4.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace App\Models;
  3. use App\Support\EmailQueue;
  4. use App\Support\Log;
  5. use Illuminate\Database\Eloquent\Model;
  6. use Illuminate\Support\Facades\Cache;
  7. class JuxingAdAccount extends Model
  8. {
  9. public $timestamps = false;
  10. protected $table = 'juxing_ad_account';
  11. protected static $unguarded = true;
  12. # token 缓存
  13. const JUXING_AD_USER_ACCESS_TOKEN_PRE = 'juxingAdUserAccessToken:';
  14. # 获取星视频数据advertiserId队列
  15. const JUXING_STAR_VIDEO_SYNC_ADVID_LIST = 'juxingStarVideoSyncAdvidList';
  16. # 获取星直播数据advertiserId队列
  17. const JUXING_STAR_LIVE_SYNC_ADVID_LIST = 'juxingStarLiveSyncAdvidList';
  18. # 获取星任务视频数据advertiserId队列
  19. const JUXING_QTASK_VIDEO_SYNC_ADVID_LIST = 'juxingQtaskVideoSyncAdvidList';
  20. # 获取星任务直播数据advertiserId队列
  21. const JUXING_QTASK_LIVE_SYNC_ADVID_LIST = 'juxingQtaskLiveSyncAdvidList';
  22. # 获取流量助推-星任务-视频数据advertiserId队列
  23. const JUXING_FLOW_QTASK_VIDEO_SYNC_ADVID_LIST = 'juxingFlowQtaskVideoSyncAdvidList';
  24. # 获取流量助推-星视频数据advertiserId队列
  25. const JUXING_FLOW_STAR_VIDEO_SYNC_ADVID_LIST = 'juxingFlowStarVideoSyncAdvidList';
  26. # 获取流量助推-星直播数据advertiserId队列
  27. const JUXING_FLOW_STAR_LIVE_SYNC_ADVID_LIST = 'juxingFlowStarLiveSyncAdvidList';
  28. # 获取流量助推-星视频每日数据advertiserId队列
  29. const JUXING_FLOW_STAR_VIDEO_DAILY_SYNC_ADVID_LIST = 'juxingFlowStarVideoDailySyncAdvidList';
  30. /**
  31. * 获取access_token
  32. * @param $advertiser_id
  33. * @return mixed
  34. */
  35. public static function getAccessToken($advertiser_id)
  36. {
  37. try{
  38. $cacheKey = self::JUXING_AD_USER_ACCESS_TOKEN_PRE.$advertiser_id;
  39. $accessToken = Cache::get($cacheKey);
  40. // Log::info('获取access_token', ['advertiser_id' => $advertiser_id, 'access_token' => $accessToken], 'getAccessToken');
  41. if(empty($accessToken)){
  42. // 从数据库获取 token_id
  43. $tokenId = self::query()->where('advertiser_id', $advertiser_id)->where('enable', 1)->value('token_id');
  44. if (empty($tokenId)) {
  45. Log::error('获取access_token异常-tokenid为空', ['advertiser_id' => $advertiser_id], 'getAccessToken');
  46. return null;
  47. }
  48. // 从数据库获取 access_token
  49. $accessTokenInfo = JuxingAccountInfo::query()->where('id', $tokenId)->first();
  50. $accessToken = $accessTokenInfo->access_token ?? null;
  51. if (empty($accessTokenInfo->access_token)) {
  52. Log::error('获取access_token异常-access_token为空', ['advertiser_id' => $advertiser_id], 'getAccessToken');
  53. return null;
  54. }
  55. // 判定refresh_token是否过期,若已过期则将账户禁用
  56. if( $accessTokenInfo->refresh_token_expires_at < date('Y-m-d H:i:s')) {
  57. self::query()->where('advertiser_id', $advertiser_id)->update(['enable' => 0]);
  58. Log::info('账户refresh_token过期,将账户禁用, 账户:【'.$advertiser_id.'】,过期时间:【'.$accessTokenInfo->refresh_token_expires_at.'】', [],
  59. 'disableJuxingAccount');
  60. }
  61. // $accessToken 会在过期前1小时更新,所以可以保证有效期永远大于10分钟
  62. Cache::put($cacheKey, $accessToken, 600); //缓存10分钟
  63. }
  64. return $accessToken;
  65. } catch (\Exception $exception) {
  66. EmailQueue::rPush('获取access_token程序异常', json_encode(['advertiser_id' => $advertiser_id, 'file' => $exception->getFile(), 'line' => $exception->getLine()
  67. , 'message' => $exception->getMessage()], 256), ['song.shen@kuxuan-inc.com'], '聚星');
  68. Log::error('获取access_token程序异常', [ 'advertiser_id' => $advertiser_id, 'file' => $exception->getFile(), 'line' => $exception->getLine(),
  69. 'message' => $exception->getMessage(), 'trace' => $exception->getTraceAsString()], 'getAccessTokenError');
  70. }
  71. }
  72. }