From 907be771abf87a1dd19baee368d765618b464512 Mon Sep 17 00:00:00 2001 From: huangguancheng Date: Mon, 17 Feb 2025 21:24:14 +0800 Subject: [PATCH] =?UTF-8?q?googleAds=E5=B9=BF=E5=91=8A=E8=B4=A6=E5=8F=B7-?= =?UTF-8?q?=E6=8E=88=E6=9D=83-=E7=BB=91=E5=AE=9A-=E6=BF=80=E6=B4=BB?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E6=9B=B4=E6=96=B0=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controller/CustomerController.php | 9 ++--- app/controller/OAuthController.php | 12 +++++-- app/event/GoogleAdsCustomers.php | 17 ++++++--- app/service/GoogleOAuthService.php | 52 ++++++++++++++++----------- 4 files changed, 59 insertions(+), 31 deletions(-) diff --git a/app/controller/CustomerController.php b/app/controller/CustomerController.php index f043cf3..465c380 100644 --- a/app/controller/CustomerController.php +++ b/app/controller/CustomerController.php @@ -186,11 +186,11 @@ class CustomerController 'account_id' => $account['account_id'], 'name' => $account['account_name'], 'currency' => $account['currency'], - 'bind' => $account['is_unbind'] == 't'? 0 : 1, + 'bind' => $account['is_unbind'], ]; } } else { - return $this->successResponse(['ad_accounts' => [], 'total_count' => 0]); + return $this->successResponse(['ad_accounts' => [], 'total_count' => 0]); } // dump($ad_accounts); return $this->successResponse(['ad_accounts' => $ad_accounts, 'total_count' => count($ad_accounts)]); @@ -229,10 +229,11 @@ class CustomerController // 遍历 bind_accounts,保存或更新到 bps_ads_merchant_relation 表 foreach ($bindAccounts as $account) { $data = [ + 'merchant_id' => $options['jwtClaims']['merchant_id'], // 假设merchant_id从jwtClaims中获取 + 'user_id' => $options['jwtClaims']['uid'], 'account_id' => $account['account_id'], 'account_name' => $account['name'], 'currency' => $account['currency'], - 'merchant_id' => $options['jwtClaims']['merchant_id'], // 假设merchant_id从jwtClaims中获取 'access_token' => $refresh_token, 'refresh_token' => $refresh_token, 'is_unbind' => 'f' // 假设默认绑定状态为 'f' @@ -241,7 +242,7 @@ class CustomerController //ext_info是jsonb 存放 $account['login_customer_id']的键值对 // 'ext_info' => json_encode(['login_customer_id' => $account['login_customer_id']]), ]; - $this->googleOAuthService->saveThirdUserAdvertiserNew($data,1); + $this->googleOAuthService->saveThirdUserAdvertiserNew($data, 1); //授权回来先不初始化广告数据 // 查找是否已经存在该账号的绑定记录 // $existingRelation = \App\Models\AdsMerchantRelation::where('account_id', $account['account_id']) // ->where('merchant_id', $options['jwtClaims']['merchant_id']) diff --git a/app/controller/OAuthController.php b/app/controller/OAuthController.php index 79685a8..46ab910 100644 --- a/app/controller/OAuthController.php +++ b/app/controller/OAuthController.php @@ -73,6 +73,7 @@ class OAuthController // $state = $request->input('state') ?? $request->jwtClaims['uid']; $state = $request->input('state') ?? $request->jwtClaims['merchant_id']; $merchantId = $request->jwtClaims['merchant_id']; + $userId = $request->jwtClaims['uid']; $code = $request->input('code'); // 授权码 if (!$state) { @@ -83,6 +84,13 @@ class OAuthController $tokens = $googleOAuthService->getRefreshToken($code); +// $tokens = [ +// 'access_token' => 'ya29.a0AXeO80QFiuV13I4ZCB4I8NQBVI2rnJsHlyBluSbbe0AUtqK3GDTeg50ktAXsqbG6YiY4paIqdlkTJgzzQZ0qZj1Nwz4wcx91XALOAtjJQC28xIruDc2ngt5a64IETQ_-ItbWdHW75tIUVcfKv7uaYYMSYs6juTJZ8zzLcy_2aCgYKAVgSARMSFQHGX2Mi2SLHpao46UhAg0Gy6LXLkg0175', +// 'refresh_token' => '1//0gZUuWDXHT45KCgYIARAAGBASNwF-L9IrRsKsk2dWR0jVvwji_pmDBtyvjbl1KCJ-btzLcfy4q4cRYvFebFmtqMDZAv1vdtbY470', +// 'id_token' => 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjVkMTJhYjc4MmNiNjA5NjI4NWY2OWU0OGFlYTk5MDc5YmI1OWNiODYiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI4MTIxNzg3ODI5MTMtaTNkZTBodDN0Ymw1azBrNDhhbG1qams3MXE3bjhiNW4uYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI4MTIxNzg3ODI5MTMtaTNkZTBodDN0Ymw1azBrNDhhbG1qams3MXE3bjhiNW4uYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTc3MjM1MDcwMTEyNTkyMjM2MDUiLCJlbWFpbCI6Ijc3NjY4OEBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiYXRfaGFzaCI6InhscUhkazR2OW9WdHpYUGZJUkpONGciLCJuYW1lIjoiTGVvIiwicGljdHVyZSI6Imh0dHBzOi8vbGgzLmdvb2dsZXVzZXJjb250ZW50LmNvbS9hL0FDZzhvY0tIYjJCdTVFQVhkQ2lvdl8tYmg4ZWNvc1VaMHlELTVYbHZfUUdXSHJzbVF4aGx1dz1zOTYtYyIsImdpdmVuX25hbWUiOiJMZW8iLCJpYXQiOjE3Mzk3ODMwMDcsImV4cCI6MTczOTc4NjYwN30.IxsMOMF4aHvSn7Ug65PcGnK3X5nnRKzshcHgwGT5RCC9lcCnXmAaXMjjQWOtXOFcrRMCPG-HM3SmaCsrC-ThzvUoCzXl6ArQkZxpS3JA5b-KdmWK8KxnK9Lr63G9xvbr56ys_RIPXNyNuzlmY1Xzc3Pr920fJl43haJDp3HOx9DlRYQctC53mw6t6DoqfhCKItZ7jON65JWG4CJhqxZiFJNW7RaKAKzUncVoen_D1SphLlOMda0m6YBgj8UDcyo5U0X7dZM7f_oMMjHkuS252XG9mJ2QH74K-7tlO0GPUEWuUkprvFSay5LU5TzJIJCM9EkoD4hvyYB24oCHgqUiHA', +// +// ]; + if (!isset($tokens['refresh_token'])) { if (isset($tokens['access_token'])) { return $this->errorResponse(300, 'Google Ads Account is Authorized'); @@ -90,7 +98,7 @@ class OAuthController return $this->errorResponse(300, 'Refresh Token getting failed'); } else { // $googleOAuthService->saveRefreshToken($tokens['refresh_token'], $state); //作废2025-2-13 - $googleOAuthService->saveRefreshTokenNew($tokens['refresh_token'], $merchantId); + $googleOAuthService->saveRefreshTokenNew($tokens['refresh_token'],$tokens['access_token'], $merchantId,$userId); // 生成 UUID $uuid = $this->generateUuid(); @@ -103,7 +111,7 @@ class OAuthController // // 触发事件 return $this->successResponse(['token' => $uuid], $request); } - return $this->successResponse($tokens, $request); +// return $this->successResponse($tokens, $request); } diff --git a/app/event/GoogleAdsCustomers.php b/app/event/GoogleAdsCustomers.php index 967e781..9258e64 100644 --- a/app/event/GoogleAdsCustomers.php +++ b/app/event/GoogleAdsCustomers.php @@ -96,16 +96,22 @@ class GoogleAdsCustomers public function addRootCustomersNew($options) { $refresh_token = $options['refresh_token']; + $access_token = $options['access_token']; $merchant_id = $options['merchant_id']; - + $user_id = $options['user_id']; +//dump($refresh_token,$merchant_id,$access_token,9999999); $googleAdsAccounts = $this->getAccountHierarchyForBind($options); +// dump($googleAdsAccounts, 555); // 初始化返回结果数组 $ad_accounts = []; //广告主体的profile信息 通过请求api返回 - $googleAccountInfo = $this->googleOAuthService->getGoogleAccountInfo($refresh_token); + $googleAccountInfo = $this->googleOAuthService->getGoogleAccountInfo($access_token); + +// dump($googleAccountInfo,333); foreach ($googleAdsAccounts as $login_customer_id => $accounts) { +// dump($login_customer_id, $accounts,66); if (!empty($accounts[$login_customer_id])) { foreach ($accounts[$login_customer_id] as $account) { $data = [ @@ -113,15 +119,17 @@ class GoogleAdsCustomers 'account_name' => $account['account_name'], 'currency' => $account['currency'], 'merchant_id' => $merchant_id, + 'user_id' => $user_id, 'access_token' => $refresh_token, 'refresh_token' => $refresh_token, 'platform_user_id' => $googleAccountInfo['id'], 'platform_user_name' => $googleAccountInfo['name'], 'is_unbind' => 't', //ext_info是jsonb 存放 $account['login_customer_id']的键值对 - 'ext_info' => json_encode(['login_customer_id' => $account['login_customer_id']]), + 'ext_info' => json_encode(['login_customer_id' => $login_customer_id]), ]; - $this->googleOAuthService->saveThirdUserAdvertiserNew($data, 0); +// dump($data); + $this->googleOAuthService->saveThirdUserAdvertiserNew($data, 1); } } } @@ -155,6 +163,7 @@ class GoogleAdsCustomers continue; } } +// dump($resourceName,222); return $resourceName; } diff --git a/app/service/GoogleOAuthService.php b/app/service/GoogleOAuthService.php index 0ebdcc8..c7b7b57 100644 --- a/app/service/GoogleOAuthService.php +++ b/app/service/GoogleOAuthService.php @@ -29,26 +29,26 @@ class GoogleOAuthService // 'family_name' => '用户的姓氏', // 'picture' => '用户头像的URL', // 'locale' => '用户的语言偏好', - - $client = new Client(); - try { - // 调用Google的userinfo API - $response = $client->get('https://www.googleapis.com/oauth2/v2/userinfo', [ - 'headers' => [ + + $options = [ + "headers" => [ 'Authorization' => 'Bearer ' . $accessToken, ], - ]); - - // 解析API返回的JSON数据 - $userInfo = json_decode($response->getBody(), true); - - // 返回用户信息 + ]; + $userInfo = json_decode($client->request('Get', 'https://www.googleapis.com/oauth2/v2/userinfo', $options)->getBody()->getContents(), true); +// // Process user info... +// dump($userInfo,666); return $userInfo; + } catch (\GuzzleHttp\Exception\ClientException $e) { + error_log('Client error: ' . $e->getMessage()); + if ($e->hasResponse()) { + error_log('Response: ' . $e->getResponse()->getBody()); + } } catch (\Exception $e) { - // 处理异常情况 - throw new \Exception("Failed to fetch Google account info: " . $e->getMessage()); + // Handle other exceptions + error_log('Error: ' . $e->getMessage()); } } @@ -129,7 +129,7 @@ class GoogleOAuthService // ->where('bamr.is_unbind', 'f') ->where('bamr.is_del', 'f') ->where('bamr.platform', 2) - ->field('bamr.account_id, bamr.account_name,bamr.currency') + ->field('bamr.account_id, bamr.account_name,bamr.is_unbind,bamr.currency') // ->field('') ->select(); // 执行查询 // dump($customers,555); @@ -193,6 +193,7 @@ class GoogleOAuthService // 确保 account_id 和 merchant_id 是字符串 $data['account_id'] = (string)$data['account_id']; $data['merchant_id'] = (string)$data['merchant_id']; + $data['user_id'] = (string)$data['user_id']; $tableName = 'bps_ads_merchant_relation'; $tableName = getenv('DB_PG_SCHEMA') ? getenv('DB_PG_SCHEMA') . '.' . $tableName : 'bps.' . $tableName; @@ -201,6 +202,7 @@ class GoogleOAuthService $insertData = [ 'platform' => 2, // 假设google平台值为2,根据实际情况调整 'merchant_id' => $data['merchant_id'], + 'user_id' => $data['user_id'], 'account_id' => $data['account_id'], 'access_token' => $data['access_token'], 'refresh_token' => $data['refresh_token'], @@ -211,14 +213,15 @@ class GoogleOAuthService 'is_unbind' => $data['is_unbind']??'f', 'ext_info' => $data['ext_info']??'{}', ]; - +// dump($insertData,2525); // 构造SQL语句 $sql = " INSERT INTO {$tableName} - (platform, merchant_id, access_token, refresh_token,account_id, account_name, currency, ext_info,platform_user_id, platform_user_name) - VALUES (:platform, :merchant_id, :access_token, :refresh_token, :account_id, :account_name, :currency, :ext_info,:platform_user_id, :platform_user_name) - ON CONFLICT (account_id, merchant_id) + (platform, merchant_id, user_id,access_token, refresh_token,account_id, account_name, currency, ext_info,platform_user_id, platform_user_name,is_unbind) + VALUES (:platform, :merchant_id,:user_id, :access_token, :refresh_token, :account_id, :account_name, :currency, :ext_info,:platform_user_id, :platform_user_name,:is_unbind) + ON CONFLICT (platform,merchant_id,account_id) DO UPDATE SET + user_id = EXCLUDED.user_id, account_name = EXCLUDED.account_name, access_token = EXCLUDED.access_token, refresh_token = EXCLUDED.refresh_token, @@ -228,6 +231,7 @@ class GoogleOAuthService // 执行SQL语句 ThinkDb::execute($sql, $insertData); +// dump(ThinkDb::getLastSql(),2525); //如果要异步更新改广告账号数据的话。 if($sendMq == 1){ @@ -235,6 +239,8 @@ class GoogleOAuthService $options = []; $options['merchant_id'] = $data['merchant_id']; $options['account_id'] = $data['account_id']; +// $options['refresh_token'] = $data['refresh_token']; +// $options['login_customer_id'] = json_decode($data['ext_info'],true)['login_customer_id']??''; $this->queueNew($options); } } @@ -309,18 +315,22 @@ class GoogleOAuthService $this->queue($options); } - public function saveRefreshTokenNew($refreshToken, $merchantId) + public function saveRefreshTokenNew($refreshToken,$accessToken, $merchantId,$userId) { $data = [ 'refresh_token' => $refreshToken, + 'access_token' => $accessToken, 'merchant_id' => $merchantId, + 'user_id' => $userId, // 'is_default' => 'f', // 'third_type' => 'google', ]; $options = []; $options['refresh_token'] = $refreshToken; + +// dump($data,$options); Event::emit(GoogleAdsCustomers::add_queue, $data); - $this->queue($options); +// $this->queue($options); } public function initNewGoogleAdsAccountData($refreshToken)