Keine Beschreibung

RefreshJuxingToken.php 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Models\JuxingAccountInfo;
  4. use App\Models\JuxingAdAccount;
  5. use App\Services\CallbackService;
  6. use App\Support\Log;
  7. use Illuminate\Console\Command;
  8. use Illuminate\Support\Facades\DB;
  9. use kwaiSDK\PubUse;
  10. class RefreshJuxingToken extends Command
  11. {
  12. /**
  13. * The name and signature of the console command.
  14. *
  15. * @var string
  16. */
  17. protected $signature = 'RefreshJuxingToken';
  18. /**
  19. * The console command description.
  20. *
  21. * @var string
  22. */
  23. protected $description = '磁力聚星刷新token';
  24. /**
  25. * Create a new command instance.
  26. *
  27. * @return void
  28. */
  29. public function __construct()
  30. {
  31. parent::__construct();
  32. }
  33. /**
  34. * Execute the console command.
  35. *
  36. * @return int
  37. */
  38. public function handle()
  39. {
  40. DB::disableQueryLog();
  41. $this->info(date('H:i') . ' 开始执行');
  42. $this->start();
  43. $this->info(date('H:i') . ' 结束执行');
  44. return 0;
  45. }
  46. public function start()
  47. {
  48. $tokenIds = JuxingAdAccount::query()
  49. ->where('enable', 1)
  50. ->pluck('token_id');
  51. // 更新有效期小于2小时的账户Token
  52. $refreshLine = date('Y-m-d H:i:s', strtotime("+2 hour"));
  53. $refreshTokenList = JuxingAccountInfo::query()
  54. ->whereIn('id', $tokenIds)
  55. ->where(function ($query) use ($refreshLine) {
  56. $query->where('access_token_expires_at', '<', $refreshLine)
  57. ->where('refresh_token_expires_at', '>', date('Y-m-d H:i:s'));
  58. })
  59. ->pluck('admin_id', 'refresh_token');
  60. if ($refreshTokenList->isEmpty()) return 0;
  61. foreach ($refreshTokenList->all() as $refreshToken => $adminId) {
  62. $this->refreshToken($refreshToken, $adminId);
  63. }
  64. return 0;
  65. }
  66. public function refreshToken($refreshToken, $adminId)
  67. {
  68. try {
  69. $juxingConf = config('kwai')['juxing'];
  70. $pubuse = new PubUse($juxingConf['app_id'], $juxingConf['secret']);
  71. $userAuthorize = $pubuse->authorize()->refreshToken([
  72. 'refresh_token' => $refreshToken
  73. ]);
  74. Log::info('磁力聚星刷新token', [
  75. 'response' => $userAuthorize, 'conf' => $juxingConf, 'refresh_token' => $refreshToken
  76. ], 'RefreshJuxingToken');
  77. if (!isset($userAuthorize['code']) || $userAuthorize['code'] !== 0) {
  78. Log::error('磁力聚星refreshToken失败', $userAuthorize, 'RefreshJuxingToken');
  79. return false;
  80. }
  81. $advertiserList = CallbackService::getApprovalList($juxingConf, $userAuthorize);
  82. $rst = CallbackService::saveJuxingAccount(['admin_id' => $adminId], $userAuthorize, $advertiserList,2);
  83. $msg = $rst ? '磁力聚星refreshToken成功' : '磁力聚星refreshToken失败';
  84. Log::info($msg, $userAuthorize, 'RefreshJuxingToken');
  85. } catch (\Throwable $e) {
  86. Log::error('磁力聚星refreshToken失败 '.$e->getMessage(), [
  87. 'param' => [
  88. 'refresh_token' => $refreshToken,
  89. 'admin_id' => $adminId
  90. ],
  91. 'trace' => $e->getTraceAsString()
  92. ], 'RefreshJuxingToken');
  93. }
  94. return 0;
  95. }
  96. }