没有任何广告账号则自动解绑授权

This commit is contained in:
huangguancheng 2025-02-22 18:56:53 +08:00
parent c076d26cbb
commit 4dbc21ebfa

View File

@ -4,6 +4,7 @@ namespace app\controller;
use app\service\GoogleOAuthService; use app\service\GoogleOAuthService;
use app\service\BpsAdAccountService; use app\service\BpsAdAccountService;
use app\service\GoogleAdsAccountService;
use support\Request; use support\Request;
use support\Response; use support\Response;
use DI\Annotation\Inject; use DI\Annotation\Inject;
@ -32,6 +33,12 @@ class OAuthController
*/ */
private $bpsAdAccountService; private $bpsAdAccountService;
/**
* @Inject
* @var GoogleAdsAccountService
*/
private $googleAdsAccountService;
public function getAuthCode(Request $request) public function getAuthCode(Request $request)
{ {
@ -71,10 +78,10 @@ class OAuthController
public function handleCallback(Request $request) public function handleCallback(Request $request)
{ {
// $state = $request->input('state') ?? $request->jwtClaims['uid']; // $state = $request->input('state') ?? $request->jwtClaims['uid'];
$state = $request->input('state') ?? $request->jwtClaims['merchant_id']; $state = $request->input('state') ?? $request->jwtClaims['merchant_id'];
$merchantId = $request->jwtClaims['merchant_id']; $merchantId = $request->jwtClaims['merchant_id'];
$userId = $request->jwtClaims['uid']; $userId = $request->jwtClaims['uid'];
$code = $request->input('code'); // 授权码 $code = $request->input('code'); // 授权码
if (!$state) { if (!$state) {
return $this->errorResponse(300, 'Invalid state parameter'); return $this->errorResponse(300, 'Invalid state parameter');
@ -97,18 +104,30 @@ class OAuthController
} }
return $this->errorResponse(300, 'Refresh Token getting failed'); return $this->errorResponse(300, 'Refresh Token getting failed');
} else { } else {
//如果这个授权用户名下没有任何广告账号
$option = [];
$option['refresh_token'] = $tokens['refresh_token'];
$listAccessibleCustomers = $this->googleAdsAccountService->runListAccessibleCustomers($option);
if (empty($listAccessibleCustomers)) {
$googleOAuthService = new GoogleOAuthService();
$googleOAuthService->revokeToken($tokens['refresh_token'], $merchantId);
return $this->errorResponse(300, 'has not any google ads account');
}
// $googleOAuthService->saveRefreshToken($tokens['refresh_token'], $state); //作废2025-2-13 // $googleOAuthService->saveRefreshToken($tokens['refresh_token'], $state); //作废2025-2-13
$googleOAuthService->saveRefreshTokenNew($tokens['refresh_token'],$tokens['access_token'], $merchantId,$userId); $googleOAuthService->saveRefreshTokenNew($tokens['refresh_token'], $tokens['access_token'], $merchantId, $userId);
// 生成 UUID // 生成 UUID
$uuid = $this->generateUuid(); $uuid = $this->generateUuid();
// echo $uuid; // 例如f47ac10b-58cc-4372-a567-0e02b2c3d479 // echo $uuid; // 例如f47ac10b-58cc-4372-a567-0e02b2c3d479
$redisKey = self::REDIS_KEY_PREFIX . $uuid; $redisKey = self::REDIS_KEY_PREFIX . $uuid;
//把$tokens['refresh_token']存入redis的redisKey, 并设置过期时间为10分钟 //把$tokens['refresh_token']存入redis的redisKey, 并设置过期时间为10分钟
Redis::setex($redisKey, 600, $tokens['refresh_token']); Redis::setex($redisKey, 600, $tokens['refresh_token']);
// 保存refresh token到数据库 // 保存refresh token到数据库
// $googleOAuthService->saveRefreshToken($tokens['refresh_token'], $state, $uuid); // $googleOAuthService->saveRefreshToken($tokens['refresh_token'], $state, $uuid);
// // 触发事件 // // 触发事件
return $this->successResponse(['token' => $uuid], $request); return $this->successResponse(['token' => $uuid], $request);
} }
// return $this->successResponse($tokens, $request); // return $this->successResponse($tokens, $request);