更新层级账号的是否test、是否经理的判定和采集
This commit is contained in:
parent
bf7b16c1e0
commit
dbdca8658d
@ -8,6 +8,7 @@ use Google\ApiCore\ApiException;
|
|||||||
use support\Request;
|
use support\Request;
|
||||||
use support\Response;
|
use support\Response;
|
||||||
use DI\Annotation\Inject;
|
use DI\Annotation\Inject;
|
||||||
|
|
||||||
//use app\model\ThirdUserAdvertiser;
|
//use app\model\ThirdUserAdvertiser;
|
||||||
|
|
||||||
class CustomerController
|
class CustomerController
|
||||||
@ -55,21 +56,37 @@ class CustomerController
|
|||||||
|
|
||||||
public function accessibleCustomers(Request $request)
|
public function accessibleCustomers(Request $request)
|
||||||
{
|
{
|
||||||
$options = $request->all();
|
$options = $request->all();
|
||||||
|
$options['refresh_token'] = $request->refresh_token;
|
||||||
|
$options['login_customer_id'] = $request->login_customer_id;
|
||||||
// 继续处理 Google Ads API 操作
|
// 继续处理 Google Ads API 操作
|
||||||
return $this->listAccessibleCustomers($options);
|
return $this->listAccessibleCustomers($options);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function accountHierarchy(Request $request)
|
public function accountHierarchy(Request $request)
|
||||||
{
|
{
|
||||||
$options = $request->all();
|
$options = $request->all();
|
||||||
|
|
||||||
|
$options['refresh_token'] = $request->refresh_token;
|
||||||
|
$options['login_customer_id'] = $request->login_customer_id;
|
||||||
// 继续处理 Google Ads API 操作
|
// 继续处理 Google Ads API 操作
|
||||||
return $this->getAccountHierarchy($options);
|
return $this->getAccountHierarchy($options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//管理用户访问权限
|
||||||
|
public function accountAccess(Request $request)
|
||||||
|
{
|
||||||
|
$options = $request->all();
|
||||||
|
|
||||||
/**
|
$options['refresh_token'] = $request->refresh_token;
|
||||||
|
$options['login_customer_id'] = $request->login_customer_id;
|
||||||
|
|
||||||
|
// 继续处理 Google Ads API 操作
|
||||||
|
return $this->getAccountAccess($options);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
* 关联广告客户ID
|
* 关联广告客户ID
|
||||||
* @throws ApiException
|
* @throws ApiException
|
||||||
*/
|
*/
|
||||||
@ -85,10 +102,23 @@ class CustomerController
|
|||||||
*/
|
*/
|
||||||
public function getAccountHierarchy($options): Response
|
public function getAccountHierarchy($options): Response
|
||||||
{
|
{
|
||||||
|
// dump($options);
|
||||||
$resourceName = $this->googleAdsAccountService->runGetAccountHierarchy($options);
|
$resourceName = $this->googleAdsAccountService->runGetAccountHierarchy($options);
|
||||||
return $this->successResponse(['links_resource_name' => $resourceName]);
|
return $this->successResponse(['links_resource_name' => $resourceName]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 管理用户访问权限
|
||||||
|
* @throws ApiException
|
||||||
|
*/
|
||||||
|
public function getAccountAccess($options): Response
|
||||||
|
{
|
||||||
|
// dump($options);
|
||||||
|
|
||||||
|
$resourceName = $this->googleAdsAccountService->runGetAccountAccess($options);
|
||||||
|
return $this->successResponse(['links_resource_name' => $resourceName]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 可以加入一些公共方法
|
// 可以加入一些公共方法
|
||||||
protected function successResponse($data): Response
|
protected function successResponse($data): Response
|
||||||
|
@ -107,7 +107,7 @@ class GoogleAdsController
|
|||||||
if($options['asset_type'] == 2){
|
if($options['asset_type'] == 2){
|
||||||
return $this->getVideoAssetRelations($options);
|
return $this->getVideoAssetRelations($options);
|
||||||
}elseif($options['asset_type'] == 4){
|
}elseif($options['asset_type'] == 4){
|
||||||
$this->getAssetRelations($options);
|
return $this->getAssetRelations($options);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -287,8 +287,11 @@ class GoogleAdsController
|
|||||||
*/
|
*/
|
||||||
public function getAssetRelations($options): Response
|
public function getAssetRelations($options): Response
|
||||||
{
|
{
|
||||||
|
// dump($options);
|
||||||
$resourceName = $this->googleAdsAssetRelationService->runListAssetRelations($options['customer_id']);
|
$resourceName = $this->googleAdsAssetRelationService->runListAssetRelations($options['customer_id']);
|
||||||
return $this->successResponse(['assets_relation_list' => $resourceName]);
|
// dump($resourceName);
|
||||||
|
// return $this->successResponse($resourceName);
|
||||||
|
return $this->successResponse(['assets_list' => $resourceName]);
|
||||||
// return $this->successResponse(['assets_relation_list' => 'succeed added']);
|
// return $this->successResponse(['assets_relation_list' => 'succeed added']);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -309,7 +312,9 @@ class GoogleAdsController
|
|||||||
*/
|
*/
|
||||||
public function getDateDatas($options): Response
|
public function getDateDatas($options): Response
|
||||||
{
|
{
|
||||||
$resourceName = $this->googleAdsCampaignService->runListDateDatas($options['customer_id'], '2024-12-18');
|
$options['login_customer_id'] = 1509096882;
|
||||||
|
$options['refresh_token'] = '1//0eOTBBKbP-sPACgYIARAAGA4SNwF-L9Irg1hApAtVpZfvSCKX_pSSV2CJ7Fye3m1p3Nw12VbCjJ2Ey2D02dVy5iDhCET79TfWY0s';
|
||||||
|
$resourceName = $this->googleAdsCampaignService->runListDateDatas($options['customer_id'],$options, '2025-01-04');
|
||||||
return $this->successResponse(['date_datas_list' => $resourceName]);
|
return $this->successResponse(['date_datas_list' => $resourceName]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -390,6 +395,7 @@ class GoogleAdsController
|
|||||||
if (!in_array($options['status'], $adGroupStatus)) {
|
if (!in_array($options['status'], $adGroupStatus)) {
|
||||||
return $this->errorResponse(101, 'status参数错误');
|
return $this->errorResponse(101, 'status参数错误');
|
||||||
}
|
}
|
||||||
|
// dump($options['status'],$adGroupStatus);
|
||||||
$resourceName = $this->googleAdsAdService->runUpdateAd($options);
|
$resourceName = $this->googleAdsAdService->runUpdateAd($options);
|
||||||
return $this->successResponse(['ad_updated' => $resourceName]);
|
return $this->successResponse(['ad_updated' => $resourceName]);
|
||||||
}
|
}
|
||||||
|
@ -101,10 +101,10 @@ class OAuthController
|
|||||||
// $customerId = isset($requestData['customer_id']) ? $requestData['customer_id'] : getenv('GOOGLE_ADS_CUSTOMER_ID');
|
// $customerId = isset($requestData['customer_id']) ? $requestData['customer_id'] : getenv('GOOGLE_ADS_CUSTOMER_ID');
|
||||||
// $customerId = getenv('GOOGLE_ADS_CUSTOMER_ID'); //临时指定
|
// $customerId = getenv('GOOGLE_ADS_CUSTOMER_ID'); //临时指定
|
||||||
|
|
||||||
$uid = $request->input('user_id');
|
$uid = $request->input('user_id') ?? $request->jwtClaims['uid'];
|
||||||
|
|
||||||
// 通过 advertiser_id 查询 ThirdUserAdvertiser,联表查询 ThirdUser 数据
|
// 通过 advertiser_id 查询 ThirdUserAdvertiser,联表查询 ThirdUser 数据
|
||||||
$thirdUser = ThirdUser::where('user_id', $uid)->find(); // 获取第一个结果
|
$thirdUser = ThirdUser::where('user_id', $uid)->where('third_type', 'google')->find(); // 获取第一个结果
|
||||||
// dump($thirdUser); return ($uid);
|
// dump($thirdUser); return ($uid);
|
||||||
if (!$thirdUser) {
|
if (!$thirdUser) {
|
||||||
return $this->errorResponse(300, '未授权');
|
return $this->errorResponse(300, '未授权');
|
||||||
@ -120,7 +120,7 @@ class OAuthController
|
|||||||
|
|
||||||
|
|
||||||
//保存某个主体的全部access广告账号
|
//保存某个主体的全部access广告账号
|
||||||
function saveAdvertisers(Request $request)
|
public function saveAdvertisers(Request $request)
|
||||||
{
|
{
|
||||||
$customerIds = $request->input('third_user_list_customers'); // customer_id_list每个元素包含advertiser_id
|
$customerIds = $request->input('third_user_list_customers'); // customer_id_list每个元素包含advertiser_id
|
||||||
|
|
||||||
|
@ -57,7 +57,10 @@ class GoogleAdsAds
|
|||||||
$customers = $this->googleOAuthService->getGoogleAdCustomers([]);
|
$customers = $this->googleOAuthService->getGoogleAdCustomers([]);
|
||||||
foreach ($customers as $customer) {
|
foreach ($customers as $customer) {
|
||||||
$googleAdsAdService = new GoogleAdsAdService($customer['customer_id']);
|
$googleAdsAdService = new GoogleAdsAdService($customer['customer_id']);
|
||||||
$resourceName = $googleAdsAdService->runListAds($customer['customer_id'],$customer);
|
if ($customer['login_customer_id'] >0){
|
||||||
|
$resourceName = $googleAdsAdService->runListAds($customer['customer_id'],$customer);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// return $this->successResponse(['ads_list' => $resourceName]);
|
// return $this->successResponse(['ads_list' => $resourceName]);
|
||||||
|
@ -58,12 +58,16 @@ class GoogleAdsAssetRelations
|
|||||||
$customers = $this->googleOAuthService->getGoogleAdCustomers([]);
|
$customers = $this->googleOAuthService->getGoogleAdCustomers([]);
|
||||||
foreach ($customers as $customer) {
|
foreach ($customers as $customer) {
|
||||||
// dump($customer);
|
// dump($customer);
|
||||||
$googleAdsAssetRelationService = new GoogleAdsAssetRelationService($customer['customer_id']);
|
|
||||||
$resourceName = $googleAdsAssetRelationService->runListAssetRelations($customer['customer_id']);
|
if ($customer['login_customer_id'] > 0) {
|
||||||
|
$googleAdsAssetRelationService = new GoogleAdsAssetRelationService($customer['customer_id']);
|
||||||
|
$resourceName = $googleAdsAssetRelationService->runListAssetRelations($customer['customer_id']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// return $this->successResponse(['ads_list' => $resourceName]);
|
return $this->successResponse(['ads_list' => $resourceName]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get asset relations
|
* get asset relations
|
||||||
* @throws ApiException
|
* @throws ApiException
|
||||||
@ -73,7 +77,7 @@ class GoogleAdsAssetRelations
|
|||||||
$customers = $this->googleOAuthService->getGoogleAdCustomers([]);
|
$customers = $this->googleOAuthService->getGoogleAdCustomers([]);
|
||||||
foreach ($customers as $customer) {
|
foreach ($customers as $customer) {
|
||||||
$googleAdsAssetRelationService = new GoogleAdsAssetRelationService($customer['customer_id']);
|
$googleAdsAssetRelationService = new GoogleAdsAssetRelationService($customer['customer_id']);
|
||||||
$resourceName = $googleAdsAssetRelationService->runListVideoAssetRelations($customer['customer_id']);
|
$resourceName = $googleAdsAssetRelationService->runListVideoAssetRelations($customer['customer_id']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// return $this->successResponse(['ads_list' => $resourceName]);
|
// return $this->successResponse(['ads_list' => $resourceName]);
|
||||||
|
@ -57,7 +57,10 @@ class GoogleAdsAssets
|
|||||||
$customers = $this->googleOAuthService->getGoogleAdCustomers([]);
|
$customers = $this->googleOAuthService->getGoogleAdCustomers([]);
|
||||||
foreach ($customers as $customer) {
|
foreach ($customers as $customer) {
|
||||||
$googleAdsAssetService = new GoogleAdsAssetService($customer['customer_id']);
|
$googleAdsAssetService = new GoogleAdsAssetService($customer['customer_id']);
|
||||||
$resourceName = $googleAdsAssetService->runListAssets($customer['customer_id'],$customer);
|
if ($customer['login_customer_id'] >0){
|
||||||
|
$resourceName = $googleAdsAssetService->runListAssets($customer['customer_id'],$customer);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// return $this->successResponse(['ads_list' => $resourceName]);
|
// return $this->successResponse(['ads_list' => $resourceName]);
|
||||||
|
@ -62,7 +62,10 @@ class GoogleAdsCampaigns
|
|||||||
// dump($customers);
|
// dump($customers);
|
||||||
foreach ($customers as $customer) {
|
foreach ($customers as $customer) {
|
||||||
$googleAdsCampaignService = new googleAdsCampaignService($customer['customer_id']);
|
$googleAdsCampaignService = new googleAdsCampaignService($customer['customer_id']);
|
||||||
$resourceName = $googleAdsCampaignService->runListCampaigns($customer['customer_id'],$customer);
|
if ($customer['login_customer_id'] >0){
|
||||||
|
$resourceName = $googleAdsCampaignService->runListCampaigns($customer['customer_id'],$customer);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// return $this->successResponse(['campaigns_list' => $resourceName]);
|
// return $this->successResponse(['campaigns_list' => $resourceName]);
|
||||||
}
|
}
|
||||||
|
@ -55,25 +55,38 @@ class GoogleAdsCustomers
|
|||||||
{
|
{
|
||||||
// dump($options);
|
// dump($options);
|
||||||
$thirdUser = ThirdUser::where('is_default', 'f')->where('third_type', 'google')
|
$thirdUser = ThirdUser::where('is_default', 'f')->where('third_type', 'google')
|
||||||
->find();
|
->find();
|
||||||
if (getenv('GOOGLE_DEVELOP_TOKEN_LEVEL') === 'test') {
|
if (!$thirdUser || !$thirdUser->access_token) {
|
||||||
$option['manager_customer_id'] = '1401879025'; //开发者
|
dump('not found third user');
|
||||||
$option['login_customer_id'] = '1401879025';
|
return;
|
||||||
}
|
}
|
||||||
$option['refresh_token'] = $thirdUser->access_token;
|
$option['refresh_token'] = $thirdUser->access_token;
|
||||||
// dump($option);
|
// dump($option);
|
||||||
|
$listAccessibleCustomers = $this->googleAdsAccountService->runListAccessibleCustomers($option);
|
||||||
|
// dump($listAccessibleCustomers);
|
||||||
|
if (getenv('GOOGLE_DEVELOP_TOKEN_LEVEL') === 'test') {
|
||||||
|
if (in_array(1509096882, $listAccessibleCustomers)) {
|
||||||
|
// $listAccessibleCustomers = [1509096882];
|
||||||
|
$option['manager_customer_id'] = 1509096882; //开发者
|
||||||
|
$option['login_customer_id'] = 1509096882;
|
||||||
|
}
|
||||||
|
if (in_array(1401879025, $listAccessibleCustomers)) {
|
||||||
|
// $listAccessibleCustomers = [1401879025];
|
||||||
|
$option['manager_customer_id'] = 1401879025; //开发者
|
||||||
|
$option['login_customer_id'] = 1401879025;
|
||||||
|
}
|
||||||
|
}
|
||||||
$allRootAccounts = $this->googleAdsAccountService->runGetAccountHierarchy($option);
|
$allRootAccounts = $this->googleAdsAccountService->runGetAccountHierarchy($option);
|
||||||
// dump($allRootAccounts);
|
// dump($allRootAccounts);
|
||||||
foreach ($allRootAccounts as $rootAccountId => $accounts) {
|
foreach ($allRootAccounts as $rootAccountId => $accounts) {
|
||||||
// dump($rootAccountId, $accounts);
|
|
||||||
foreach ($accounts as $account) {
|
foreach ($accounts as $account) {
|
||||||
$customerId = $account['customer_id'];
|
// $customerId = $account['customer_id'];
|
||||||
$customerName = $account['descriptive_name'];
|
// dump($customerId, $thirdUser->id, $rootAccountId, $account);
|
||||||
// dump($customerId, $customerName, $thirdUser->id);
|
// if($account['customer_id'] == 1509096882)continue;
|
||||||
$this->googleOAuthService->saveThirdUserAdvertiser($customerId, $thirdUser->id,$rootAccountId, $customerName);
|
$this->googleOAuthService->saveThirdUserAdvertiser($account['customer_id'], $thirdUser->id, $rootAccountId, $account);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
$this->googleOAuthService->updateThirdUserDefault($thirdUser->id, 't');
|
||||||
// return $this->successResponse($allAccounts);
|
// return $this->successResponse($allAccounts);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,6 @@ class GoogleAdsDateDatas
|
|||||||
private $googleOAuthService;
|
private $googleOAuthService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//微博热榜地址
|
//微博热榜地址
|
||||||
// const url = 'https://library.tiktok.com/api/v1/search?region=GB&type=1&start_time=1666540800&end_time=1666627200';
|
// const url = 'https://library.tiktok.com/api/v1/search?region=GB&type=1&start_time=1666540800&end_time=1666627200';
|
||||||
|
|
||||||
@ -43,8 +42,6 @@ class GoogleAdsDateDatas
|
|||||||
const countries = ["GB", "BE"];
|
const countries = ["GB", "BE"];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public function listCampaigns(Request $request)
|
public function listCampaigns(Request $request)
|
||||||
{
|
{
|
||||||
$options = $request->all();
|
$options = $request->all();
|
||||||
@ -60,9 +57,14 @@ class GoogleAdsDateDatas
|
|||||||
public function getDateDatas($options)
|
public function getDateDatas($options)
|
||||||
{
|
{
|
||||||
$customers = $this->googleOAuthService->getGoogleAdCustomers([]);
|
$customers = $this->googleOAuthService->getGoogleAdCustomers([]);
|
||||||
foreach ($customers as $customerId) {
|
// dump($customers);
|
||||||
$googleAdsCampaignService = new googleAdsCampaignService($customerId);
|
foreach ($customers as $customer) {
|
||||||
$googleAdsCampaignService->runListDateDatas($customerId, $options['date']);
|
if ($customer['login_customer_id'] > 0 && ((isset($customer['manager']) && $customer['manager'] === false)) ) {
|
||||||
|
// dump($customer);
|
||||||
|
$googleAdsCampaignService = new googleAdsCampaignService($customer['customer_id']);
|
||||||
|
// dump($customer['customer_id'],$customer, $options['date']);
|
||||||
|
$googleAdsCampaignService->runListDateDatas($customer['customer_id'],$customer, $options['date']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// $this->googleAdsCampaignService->runListDateDatas($options['customer_id'], $options['date']);
|
// $this->googleAdsCampaignService->runListDateDatas($options['customer_id'], $options['date']);
|
||||||
|
@ -60,7 +60,9 @@ class GoogleAdsGroups
|
|||||||
|
|
||||||
foreach ($customers as $customer) {
|
foreach ($customers as $customer) {
|
||||||
$googleAdsGroupService = new GoogleAdsGroupService($customer['customer_id']);
|
$googleAdsGroupService = new GoogleAdsGroupService($customer['customer_id']);
|
||||||
$resourceName = $googleAdsGroupService->runListGroups($customer['customer_id'],$customer);
|
if ($customer['login_customer_id'] >0){
|
||||||
|
$resourceName = $googleAdsGroupService->runListGroups($customer['customer_id'],$customer);
|
||||||
|
}
|
||||||
|
|
||||||
// return $this->successResponse(['groups_list' => $resourceName]);
|
// return $this->successResponse(['groups_list' => $resourceName]);
|
||||||
}
|
}
|
||||||
|
@ -19,9 +19,8 @@ class OauthCheck implements MiddlewareInterface
|
|||||||
$uid = $request->jwtClaims['uid'];
|
$uid = $request->jwtClaims['uid'];
|
||||||
// 查询指定 user_id 的 ThirdUser
|
// 查询指定 user_id 的 ThirdUser
|
||||||
$thirdUser = ThirdUser::where('user_id', $uid)->where('third_type', 'google')->find();
|
$thirdUser = ThirdUser::where('user_id', $uid)->where('third_type', 'google')->find();
|
||||||
// dump($uid, $thirdUser);
|
|
||||||
|
|
||||||
if ($thirdUser) {
|
if ($thirdUser && $thirdUser->access_token) {
|
||||||
// 获取 access_token
|
// 获取 access_token
|
||||||
$request->refresh_token = $thirdUser->access_token;
|
$request->refresh_token = $thirdUser->access_token;
|
||||||
|
|
||||||
@ -33,11 +32,12 @@ class OauthCheck implements MiddlewareInterface
|
|||||||
$request->login_customer_id = $advertiser->google_login_customer_id;
|
$request->login_customer_id = $advertiser->google_login_customer_id;
|
||||||
// dump( $request->access_token,$request->login_customer_id);
|
// dump( $request->access_token,$request->login_customer_id);
|
||||||
} else {
|
} else {
|
||||||
return Json([
|
|
||||||
'code' => 0,
|
// return Json([
|
||||||
'msg' => 'Ads Data is ready to collect,please wait',
|
// 'code' => 0,
|
||||||
'data' => []
|
// 'msg' => 'Ads Data is ready to collect,please wait',
|
||||||
]);
|
// 'data' => []
|
||||||
|
// ]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return Json([
|
return Json([
|
||||||
|
@ -24,42 +24,46 @@ class UpdateGoogleAdsTask
|
|||||||
|
|
||||||
|
|
||||||
// 每15分钟执行一次
|
// 每15分钟执行一次
|
||||||
new Crontab('10 */15 * * * *', function () {
|
new Crontab('10 */3 * * * *', function () {
|
||||||
|
|
||||||
// $dayBeforeYesterdayStart = date('Y-m-d', strtotime('-2 day'));
|
$dayBeforeYesterdayStart = date('Y-m-d', strtotime('-2 day'));
|
||||||
// dump($dayBeforeYesterdayStart . '更新' . GoogleAdsDateDatas::type . '开始');
|
dump($dayBeforeYesterdayStart . '更新' . GoogleAdsDateDatas::type . '开始');
|
||||||
// Event::emit(GoogleAdsDateDatas::type, ['date' => $dayBeforeYesterdayStart]);
|
Event::emit(GoogleAdsDateDatas::type, ['date' => $dayBeforeYesterdayStart]);
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// 每15分钟执行一次
|
// 每15分钟执行一次
|
||||||
new Crontab('20 */15 * * * *', function () {
|
new Crontab('20 */3 * * * *', function () {
|
||||||
// $yesterdayStart = date('Y-m-d', strtotime('-1 day'));
|
$yesterdayStart = date('Y-m-d', strtotime('-1 day'));
|
||||||
// dump($yesterdayStart . '更新' . GoogleAdsDateDatas::type . '开始');
|
dump($yesterdayStart . '更新' . GoogleAdsDateDatas::type . '开始');
|
||||||
// Event::emit(GoogleAdsDateDatas::type, ['date' => $yesterdayStart]);
|
Event::emit(GoogleAdsDateDatas::type, ['date' => $yesterdayStart]);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// 每15分钟执行一次
|
// 每15分钟执行一次
|
||||||
new Crontab('30 */15 * * * *', function () {
|
new Crontab('30 */3 * * * *', function () {
|
||||||
//获取今天的 0 点的YYYY-MM-DD格式
|
//获取今天的 0 点的YYYY - MM - DD格式
|
||||||
// $todayStart = date('Y-m-d', strtotime('0 day'));
|
$todayStart = date('Y-m-d', strtotime('0 day'));
|
||||||
// dump($todayStart . '更新' . GoogleAdsDateDatas::type . '开始');
|
dump($todayStart . '更新' . GoogleAdsDateDatas::type . '开始');
|
||||||
// Event::emit(GoogleAdsDateDatas::type, ['date' => $todayStart]);
|
Event::emit(GoogleAdsDateDatas::type, ['date' => $todayStart]);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
// 每15分钟执行一次
|
// 每15分钟执行一次
|
||||||
new Crontab('15 */10 * * * *', function () {
|
new Crontab('15 */3 * * * *', function () {
|
||||||
dump(date('Y-m-d H:i:s') . '更新' . GoogleAdsCampaigns::type . '开始');
|
|
||||||
Event::emit(GoogleAdsCampaigns::type, []);
|
dump(date('Y-m-d H:i:s') . '更新' . GoogleAdsAssetRelations::IMAGEASSET . '开始');
|
||||||
|
Event::emit(GoogleAdsAssetRelations::IMAGEASSET, []);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// 每15分钟执行一次
|
// 每15分钟执行一次
|
||||||
new Crontab('30 */10 * * * *', function () {
|
new Crontab('30 */3 * * * *', function () {
|
||||||
dump(date('Y-m-d H:i:s') . '更新' . GoogleAdsGroups::type . '开始');
|
dump(date('Y-m-d H:i:s') . '更新' . GoogleAdsGroups::type . '开始');
|
||||||
Event::emit(GoogleAdsGroups::type, []);
|
Event::emit(GoogleAdsGroups::type, []);
|
||||||
|
|
||||||
|
dump(date('Y-m-d H:i:s') . '更新' . GoogleAdsCampaigns::type . '开始');
|
||||||
|
Event::emit(GoogleAdsCampaigns::type, []);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -77,10 +81,10 @@ class UpdateGoogleAdsTask
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
new Crontab('* */20 * * * *', function () {
|
// new Crontab('* */2 * * * *', function () {
|
||||||
dump(date('Y-m-d H:i:s') . '更新' . GoogleAdsAssetRelations::IMAGEASSET . '开始');
|
// dump(date('Y-m-d H:i:s') . '更新' . GoogleAdsAssetRelations::IMAGEASSET . '开始');
|
||||||
Event::emit(GoogleAdsAssetRelations::IMAGEASSET, []);
|
// Event::emit(GoogleAdsAssetRelations::IMAGEASSET, []);
|
||||||
});
|
// });
|
||||||
|
|
||||||
new Crontab('55 */51 * * * *', function () {
|
new Crontab('55 */51 * * * *', function () {
|
||||||
dump(date('Y-m-d H:i:s') . '更新' . GoogleAdsAssetRelations::VIDEOASSET . '开始');
|
dump(date('Y-m-d H:i:s') . '更新' . GoogleAdsAssetRelations::VIDEOASSET . '开始');
|
||||||
@ -88,14 +92,13 @@ class UpdateGoogleAdsTask
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
new Crontab('0 */3 * * * *', function () {
|
new Crontab('0 */1 * * * *', function () {
|
||||||
dump(date('Y-m-d H:i:s') . '更新' . GoogleAdsCustomers::CUSTOMERADD . '开始');
|
dump(date('Y-m-d H:i:s') . '更新' . GoogleAdsCustomers::CUSTOMERADD . '开始');
|
||||||
Event::emit(GoogleAdsCustomers::CUSTOMERADD,[]);
|
Event::emit(GoogleAdsCustomers::CUSTOMERADD, []);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 每15分钟执行一次
|
// 每15分钟执行一次
|
||||||
// new Crontab('58 */15 * * * *', function () {
|
// new Crontab('58 */15 * * * *', function () {
|
||||||
// dump(date('Y-m-d H:i:s') . '更新' . GoogleAdsCampaigns::type . '开始');
|
// dump(date('Y-m-d H:i:s') . '更新' . GoogleAdsCampaigns::type . '开始');
|
||||||
|
@ -12,13 +12,18 @@ use Google\Ads\GoogleAds\Lib\V18\GoogleAdsException;
|
|||||||
use Google\Ads\GoogleAds\Lib\V18\GoogleAdsServerStreamDecorator;
|
use Google\Ads\GoogleAds\Lib\V18\GoogleAdsServerStreamDecorator;
|
||||||
use Google\Ads\GoogleAds\Util\FieldMasks;
|
use Google\Ads\GoogleAds\Util\FieldMasks;
|
||||||
use Google\Ads\GoogleAds\Util\V18\ResourceNames;
|
use Google\Ads\GoogleAds\Util\V18\ResourceNames;
|
||||||
|
use Google\Ads\GoogleAds\V18\Enums\AccessRoleEnum\AccessRole;
|
||||||
use Google\Ads\GoogleAds\V18\Enums\ManagerLinkStatusEnum\ManagerLinkStatus;
|
use Google\Ads\GoogleAds\V18\Enums\ManagerLinkStatusEnum\ManagerLinkStatus;
|
||||||
use Google\Ads\GoogleAds\V18\Errors\GoogleAdsError;
|
use Google\Ads\GoogleAds\V18\Errors\GoogleAdsError;
|
||||||
use Google\Ads\GoogleAds\V18\Resources\CustomerClient;
|
use Google\Ads\GoogleAds\V18\Resources\CustomerClient;
|
||||||
|
use Google\Ads\GoogleAds\V18\Resources\CustomerUserAccess;
|
||||||
use Google\Ads\GoogleAds\V18\Services\Client\CustomerServiceClient;
|
use Google\Ads\GoogleAds\V18\Services\Client\CustomerServiceClient;
|
||||||
|
|
||||||
//use Google\Ads\GoogleAds\V18\Services\CustomerServiceClient;
|
//use Google\Ads\GoogleAds\V18\Services\CustomerServiceClient;
|
||||||
|
use Google\Ads\GoogleAds\V18\Services\CustomerUserAccessOperation;
|
||||||
use Google\Ads\GoogleAds\V18\Services\GoogleAdsRow;
|
use Google\Ads\GoogleAds\V18\Services\GoogleAdsRow;
|
||||||
use Google\Ads\GoogleAds\V18\Services\ListAccessibleCustomersRequest;
|
use Google\Ads\GoogleAds\V18\Services\ListAccessibleCustomersRequest;
|
||||||
|
use Google\Ads\GoogleAds\V18\Services\MutateCustomerUserAccessRequest;
|
||||||
use Google\Ads\GoogleAds\V18\Services\SearchGoogleAdsStreamRequest;
|
use Google\Ads\GoogleAds\V18\Services\SearchGoogleAdsStreamRequest;
|
||||||
use Google\Ads\GoogleAds\V18\Resources\CustomerClientLink;
|
use Google\Ads\GoogleAds\V18\Resources\CustomerClientLink;
|
||||||
use Google\Ads\GoogleAds\V18\Resources\CustomerManagerLink;
|
use Google\Ads\GoogleAds\V18\Resources\CustomerManagerLink;
|
||||||
@ -287,7 +292,7 @@ class GoogleAdsAccountService extends BaseService
|
|||||||
* @return GoogleAdsClient the created client
|
* @return GoogleAdsClient the created client
|
||||||
*/
|
*/
|
||||||
// public function createGoogleAdsClientWithloginCustomerId(int $thirdUserId,int $loginCustomerId)
|
// public function createGoogleAdsClientWithloginCustomerId(int $thirdUserId,int $loginCustomerId)
|
||||||
public function createGoogleAdsClientWithloginCustomerId($refreshToken,int $loginCustomerId)
|
public function createGoogleAdsClientWithloginCustomerId($refreshToken, int $loginCustomerId)
|
||||||
{
|
{
|
||||||
// $advertiserId = getenv('GOOGLE_ADS_CUSTOMER_ID');
|
// $advertiserId = getenv('GOOGLE_ADS_CUSTOMER_ID');
|
||||||
|
|
||||||
@ -333,20 +338,152 @@ class GoogleAdsAccountService extends BaseService
|
|||||||
// Issues a request for listing all accessible customers.
|
// Issues a request for listing all accessible customers.
|
||||||
$accessibleCustomers =
|
$accessibleCustomers =
|
||||||
$customerServiceClient->listAccessibleCustomers(new ListAccessibleCustomersRequest());
|
$customerServiceClient->listAccessibleCustomers(new ListAccessibleCustomersRequest());
|
||||||
print 'Total results: ' . count($accessibleCustomers->getResourceNames()) . PHP_EOL;
|
|
||||||
|
|
||||||
$resourceNameArray = [];
|
$accessibleCustomerIds = [];
|
||||||
// Iterates over all accessible customers' resource names and prints them.
|
foreach ($accessibleCustomers->getResourceNames() as $customerResourceName) {
|
||||||
foreach ($accessibleCustomers->getResourceNames() as $resourceName) {
|
$customer = CustomerServiceClient::parseName($customerResourceName)['customer_id'];
|
||||||
/** @var string $resourceName */
|
print $customer . PHP_EOL;
|
||||||
printf("Customer resource name: '%s'%s", $resourceName, PHP_EOL);
|
$accessibleCustomerIds[] = intval($customer);
|
||||||
$resourceNameArray[] = $resourceName;
|
|
||||||
}
|
}
|
||||||
return $resourceNameArray;
|
return $accessibleCustomerIds;
|
||||||
|
|
||||||
|
// print 'Total results: ' . count($accessibleCustomers->getResourceNames()) . PHP_EOL;
|
||||||
|
|
||||||
|
// $resourceNameArray = [];
|
||||||
|
// // Iterates over all accessible customers' resource names and prints them.
|
||||||
|
// foreach ($accessibleCustomers->getResourceNames() as $resourceName) {
|
||||||
|
// /** @var string $resourceName */
|
||||||
|
// printf("Customer resource name: '%s'%s", $resourceName, PHP_EOL);
|
||||||
|
// $resourceNameArray[] = $resourceName;
|
||||||
|
// }
|
||||||
|
// return $resourceNameArray;
|
||||||
}
|
}
|
||||||
// [END list_accessible_customers]
|
// [END list_accessible_customers]
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Runs the example.
|
||||||
|
*
|
||||||
|
* @param GoogleAdsClient $googleAdsClient the Google Ads API client
|
||||||
|
* @param int $customerId the customer ID
|
||||||
|
* @param string $emailAddress the email address of the user whose access role should be updated
|
||||||
|
* @param string $accessRole the updated access role
|
||||||
|
*/
|
||||||
|
public function runGetAccountAccess(
|
||||||
|
$option)
|
||||||
|
{
|
||||||
|
$managerCustomerId = isset($option['manager_customer_id']) ? (int)$option['manager_customer_id'] : null;
|
||||||
|
$loginCustomerId = isset($option['login_customer_id']) ? (int)$option['login_customer_id'] : null;
|
||||||
|
$refreshToken = isset($option['refresh_token']) ? $option['refresh_token'] : null;
|
||||||
|
// $thirdUserId = (int)$option['third_user_id'];
|
||||||
|
|
||||||
|
// Creates a client with the manager customer ID as login customer ID.
|
||||||
|
$googleAdsClient = $this->createGoogleAdsClientWithloginCustomerId($refreshToken,$loginCustomerId);
|
||||||
|
|
||||||
|
$customerId = 8452924576;
|
||||||
|
$userId = $this->getUserAccess($googleAdsClient, $customerId,'s5O0z@example.com');
|
||||||
|
// if (!is_null($userId)) {
|
||||||
|
// $this->modifyUserAccess($googleAdsClient, $customerId, $userId, $accessRole);
|
||||||
|
// }
|
||||||
|
return $userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the customer user access given an email address.
|
||||||
|
*
|
||||||
|
* @param GoogleAdsClient $googleAdsClient the Google Ads API client
|
||||||
|
* @param int $customerId the customer ID
|
||||||
|
* @param string $emailAddress the email address of the user whose access role should be updated
|
||||||
|
* @return int|null the user ID if a customer is found, or null if no matching customers were
|
||||||
|
* found
|
||||||
|
*/
|
||||||
|
public function getUserAccess(
|
||||||
|
GoogleAdsClient $googleAdsClient,
|
||||||
|
int $customerId,
|
||||||
|
string $emailAddress
|
||||||
|
)
|
||||||
|
{
|
||||||
|
$googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
|
||||||
|
// Creates a query that retrieves all customer user accesses.
|
||||||
|
// Use the LIKE query for filtering to ignore the text case for email address when
|
||||||
|
// searching for a match.
|
||||||
|
// $query = "SELECT customer_user_access.user_id, "
|
||||||
|
// . "customer_user_access.email_address, customer_user_access.access_role,"
|
||||||
|
// . "customer_user_access.access_creation_date_time FROM customer_user_access "
|
||||||
|
// . "WHERE customer_user_access.email_address LIKE '$emailAddress'";
|
||||||
|
$query = "SELECT customer_user_access.user_id, "
|
||||||
|
. "customer_user_access.email_address, customer_user_access.access_role,"
|
||||||
|
. "customer_user_access.access_creation_date_time FROM customer_user_access "
|
||||||
|
. "WHERE customer_user_access.user_id = $customerId";
|
||||||
|
// Issues a search request by to retrieve the customer user accesses.
|
||||||
|
$response =
|
||||||
|
$googleAdsServiceClient->search(SearchGoogleAdsRequest::build($customerId, $query));
|
||||||
|
if (iterator_count($response) > 0) {
|
||||||
|
/** @var CustomerUserAccess $customerUserAccess */
|
||||||
|
$customerUserAccess = $response->getIterator()->current()->getCustomerUserAccess();
|
||||||
|
printf(
|
||||||
|
"Customer user access with User ID = %d, Email Address = "
|
||||||
|
. "'%s', Access Role = '%s' and Creation Time = %s was found in "
|
||||||
|
. "Customer ID: %d.%s",
|
||||||
|
$customerUserAccess->getUserId(),
|
||||||
|
$customerUserAccess->getEmailAddress(),
|
||||||
|
AccessRole::name($customerUserAccess->getAccessRole()),
|
||||||
|
$customerUserAccess->getAccessCreationDateTime(),
|
||||||
|
$customerId,
|
||||||
|
PHP_EOL
|
||||||
|
);
|
||||||
|
return $customerUserAccess->getUserId();
|
||||||
|
} else {
|
||||||
|
print 'No customer user access with requested email was found.' . PHP_EOL;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modifies the user access role to a specified value.
|
||||||
|
*
|
||||||
|
* @param GoogleAdsClient $googleAdsClient the Google Ads API client
|
||||||
|
* @param int $customerId the customer ID
|
||||||
|
* @param int $userId ID of the user whose access role is modified
|
||||||
|
* @param string $accessRole the updated access role
|
||||||
|
*/
|
||||||
|
public function modifyUserAccess(
|
||||||
|
GoogleAdsClient $googleAdsClient,
|
||||||
|
int $customerId,
|
||||||
|
int $userId,
|
||||||
|
string $accessRole
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Creates the modified user access.
|
||||||
|
$customerUserAccess = new CustomerUserAccess([
|
||||||
|
'resource_name' => ResourceNames::forCustomerUserAccess($customerId, $userId),
|
||||||
|
'access_role' => AccessRole::value($accessRole)
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Constructs an operation that will update the customer user access with the specified
|
||||||
|
// resource name, using the FieldMasks utility to derive the update mask. This mask tells
|
||||||
|
// the Google Ads API which attributes of the customer user access you want to change.
|
||||||
|
$customerUserAccessOperation = new CustomerUserAccessOperation();
|
||||||
|
$customerUserAccessOperation->setUpdate($customerUserAccess);
|
||||||
|
$customerUserAccessOperation->setUpdateMask(
|
||||||
|
FieldMasks::allSetFieldsOf($customerUserAccess)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Issues a mutate request to update the customer user access.
|
||||||
|
$customerUserAccessServiceClient = $googleAdsClient->getCustomerUserAccessServiceClient();
|
||||||
|
$response = $customerUserAccessServiceClient->mutateCustomerUserAccess(
|
||||||
|
MutateCustomerUserAccessRequest::build($customerId, $customerUserAccessOperation)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Prints the resource name of the updated customer user access.
|
||||||
|
printf(
|
||||||
|
"Successfully modified customer user access with resource name: '%s'%s",
|
||||||
|
$response->getResult()->getResourceName(),
|
||||||
|
PHP_EOL
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 层级账号信息
|
* 层级账号信息
|
||||||
*
|
*
|
||||||
@ -358,9 +495,9 @@ class GoogleAdsAccountService extends BaseService
|
|||||||
|
|
||||||
self::$rootCustomerClients = []; //初始化静态变量
|
self::$rootCustomerClients = []; //初始化静态变量
|
||||||
|
|
||||||
$managerCustomerId = isset($option['manager_customer_id'])?(int)$option['manager_customer_id']: null;
|
$managerCustomerId = isset($option['manager_customer_id']) ? (int)$option['manager_customer_id'] : null;
|
||||||
$loginCustomerId = isset($option['login_customer_id'])?(int)$option['login_customer_id']: null;
|
$loginCustomerId = isset($option['login_customer_id']) ? (int)$option['login_customer_id'] : null;
|
||||||
$refreshToken = isset($option['refresh_token'])?$option['refresh_token']: null;
|
$refreshToken = isset($option['refresh_token']) ? $option['refresh_token'] : null;
|
||||||
// $thirdUserId = (int)$option['third_user_id'];
|
// $thirdUserId = (int)$option['third_user_id'];
|
||||||
|
|
||||||
// Creates a client with the manager customer ID as login customer ID.
|
// Creates a client with the manager customer ID as login customer ID.
|
||||||
@ -385,7 +522,7 @@ class GoogleAdsAccountService extends BaseService
|
|||||||
// Constructs a map of account hierarchies.
|
// Constructs a map of account hierarchies.
|
||||||
foreach ($rootCustomerIds as $rootCustomerId) {
|
foreach ($rootCustomerIds as $rootCustomerId) {
|
||||||
$customerClientToHierarchy =
|
$customerClientToHierarchy =
|
||||||
$this->createCustomerClientToHierarchy($refreshToken,$loginCustomerId, $rootCustomerId);
|
$this->createCustomerClientToHierarchy($refreshToken, $loginCustomerId, $rootCustomerId);
|
||||||
if (is_null($customerClientToHierarchy)) {
|
if (is_null($customerClientToHierarchy)) {
|
||||||
$accountsWithNoInfo[] = $rootCustomerId;
|
$accountsWithNoInfo[] = $rootCustomerId;
|
||||||
} else {
|
} else {
|
||||||
@ -444,21 +581,21 @@ class GoogleAdsAccountService extends BaseService
|
|||||||
*/
|
*/
|
||||||
public function createCustomerClientToHierarchy(
|
public function createCustomerClientToHierarchy(
|
||||||
string $refreshToken,
|
string $refreshToken,
|
||||||
?int $loginCustomerId,
|
?int $loginCustomerId,
|
||||||
int $rootCustomerId
|
int $rootCustomerId
|
||||||
): ?array
|
): ?array
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
// Creates a client with the manager customer ID as login customer ID.
|
// Creates a client with the manager customer ID as login customer ID.
|
||||||
$googleAdsClient = $this->createGoogleAdsClientWithloginCustomerId($refreshToken,$loginCustomerId ?? $rootCustomerId);
|
$googleAdsClient = $this->createGoogleAdsClientWithloginCustomerId($refreshToken, $loginCustomerId ?? $rootCustomerId);
|
||||||
|
|
||||||
// Creates the Google Ads Service client.
|
// Creates the Google Ads Service client.
|
||||||
$googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
|
$googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
|
||||||
// Creates a query that retrieves all child accounts of the manager specified in search
|
// Creates a query that retrieves all child accounts of the manager specified in search
|
||||||
// calls below.
|
// calls below.
|
||||||
$query = 'SELECT customer_client.client_customer, customer_client.level,'
|
$query = 'SELECT customer_client.client_customer, customer_client.level,'
|
||||||
. ' customer_client.manager, customer_client.descriptive_name,'
|
. ' customer_client.manager,customer_client.test_account, customer_client.descriptive_name,'
|
||||||
. ' customer_client.currency_code, customer_client.time_zone,'
|
. ' customer_client.currency_code, customer_client.time_zone,'
|
||||||
. ' customer_client.id FROM customer_client WHERE customer_client.level <= 1';
|
. ' customer_client.id FROM customer_client WHERE customer_client.level <= 1';
|
||||||
|
|
||||||
@ -566,16 +703,18 @@ class GoogleAdsAccountService extends BaseService
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
if ($depth === 0) {
|
if ($depth === 0) {
|
||||||
print 'Customer ID (Descriptive Name, Currency Code, Time Zone)' . PHP_EOL;
|
print 'Customer ID (Descriptive Name, Currency Code, Time Zone, Manager, Test Account)' . PHP_EOL;
|
||||||
}
|
}
|
||||||
$customerId = $customerClient->getId();
|
$customerId = $customerClient->getId();
|
||||||
print str_repeat('-', $depth * 2);
|
print str_repeat('-', $depth * 2);
|
||||||
printf(
|
printf(
|
||||||
" %d ('%s', '%s', '%s')%s",
|
" %d ('%s', '%s', '%s', '%s', '%s')%s",
|
||||||
$customerId,
|
$customerId,
|
||||||
$customerClient->getDescriptiveName(),
|
$customerClient->getDescriptiveName(),
|
||||||
$customerClient->getCurrencyCode(),
|
$customerClient->getCurrencyCode(),
|
||||||
$customerClient->getTimeZone(),
|
$customerClient->getTimeZone(),
|
||||||
|
$customerClient->getManager(),
|
||||||
|
$customerClient->getTestAccount(),
|
||||||
PHP_EOL
|
PHP_EOL
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -588,29 +727,31 @@ class GoogleAdsAccountService extends BaseService
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static function getAccountHierarchy(
|
private static function getAccountHierarchy(
|
||||||
CustomerClient $customerClient,
|
CustomerClient $customerClient,
|
||||||
array $customerIdsToChildAccounts,
|
array $customerIdsToChildAccounts,
|
||||||
int $depth,
|
int $depth,
|
||||||
array &$result = [] // 这里使用引用传递
|
array &$result = [] // 这里使用引用传递
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// Store the current customer ID and descriptive name in the result array
|
// Store the current customer ID and descriptive name in the result array
|
||||||
$customerId = $customerClient->getId();
|
$customerId = $customerClient->getId();
|
||||||
$result[] = [
|
$result[] = [
|
||||||
'customer_id' => $customerId,
|
'customer_id' => $customerId,
|
||||||
'descriptive_name' => $customerClient->getDescriptiveName(),
|
'descriptive_name' => $customerClient->getDescriptiveName(),
|
||||||
];
|
'manager' => $customerClient->getManager(),
|
||||||
|
'test_account' => $customerClient->getTestAccount(),
|
||||||
|
];
|
||||||
|
|
||||||
// Recursively call this function for all child accounts of $customerClient.
|
// Recursively call this function for all child accounts of $customerClient.
|
||||||
if (array_key_exists($customerId, $customerIdsToChildAccounts)) {
|
if (array_key_exists($customerId, $customerIdsToChildAccounts)) {
|
||||||
foreach ($customerIdsToChildAccounts[$customerId] as $childAccount) {
|
foreach ($customerIdsToChildAccounts[$customerId] as $childAccount) {
|
||||||
// Recursively add the child account information
|
// Recursively add the child account information
|
||||||
$result = self::getAccountHierarchy($childAccount, $customerIdsToChildAccounts, $depth + 1, $result);
|
$result = self::getAccountHierarchy($childAccount, $customerIdsToChildAccounts, $depth + 1, $result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -75,17 +75,18 @@ class GoogleAdsAssetRelationService extends BaseService
|
|||||||
* @return mixed
|
* @return mixed
|
||||||
* @throws ApiException
|
* @throws ApiException
|
||||||
*/
|
*/
|
||||||
public function runListAssetRelations(int $customerId): mixed
|
public function runListAssetRelations(int $customerId): array
|
||||||
{
|
{
|
||||||
// dump($customerId);
|
// dump($customerId);
|
||||||
// Creates a single shared budget to be used by the campaigns added below.
|
// Creates a single shared budget to be used by the campaigns added below.
|
||||||
$assetsResourceName = self::getAssetRelations($customerId);
|
$assetsResourceName = self::getAssetRelations($customerId);
|
||||||
// dump(json_encode($assetsResourceName));
|
|
||||||
if (is_array($assetsResourceName && count($assetsResourceName) > 0)) {
|
if (is_array($assetsResourceName) && count($assetsResourceName) > 0) {
|
||||||
|
// dump($assetsResourceName);
|
||||||
self::saveAssetRelations($assetsResourceName);
|
self::saveAssetRelations($assetsResourceName);
|
||||||
}
|
}
|
||||||
// return $assetsResourceName;
|
return $assetsResourceName;
|
||||||
return 'insert success';
|
// return 'insert success';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -123,7 +124,6 @@ class GoogleAdsAssetRelationService extends BaseService
|
|||||||
VALUES (:asset_id, :ad_id, :ad_group_id, :campaign_id, :date,:month,:season,:year, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
|
VALUES (:asset_id, :ad_id, :ad_group_id, :campaign_id, :date,:month,:season,:year, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
|
||||||
ON CONFLICT (asset_id, ad_id, date)
|
ON CONFLICT (asset_id, ad_id, date)
|
||||||
DO NOTHING"; // 如果 (asset_id, ad_id, date) 存在,忽略插入操作
|
DO NOTHING"; // 如果 (asset_id, ad_id, date) 存在,忽略插入操作
|
||||||
|
|
||||||
ThinkDb::execute($sql, $data);
|
ThinkDb::execute($sql, $data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -250,7 +250,7 @@ class GoogleAdsAssetRelationService extends BaseService
|
|||||||
|
|
||||||
// 提取年和月
|
// 提取年和月
|
||||||
$year = (int)$dateObj->format('Y');
|
$year = (int)$dateObj->format('Y');
|
||||||
$month = (int)$dateObj->format('Ym');
|
$month = (int)$dateObj->format('m');
|
||||||
|
|
||||||
// 计算季度
|
// 计算季度
|
||||||
if ($month >= 1 && $month <= 3) {
|
if ($month >= 1 && $month <= 3) {
|
||||||
@ -262,7 +262,7 @@ class GoogleAdsAssetRelationService extends BaseService
|
|||||||
} else {
|
} else {
|
||||||
$season = (int)$dateObj->format('Y') . '04'; // Q4
|
$season = (int)$dateObj->format('Y') . '04'; // Q4
|
||||||
}
|
}
|
||||||
|
$month = (int)$dateObj->format('Ym');
|
||||||
return [
|
return [
|
||||||
'year' => $year,
|
'year' => $year,
|
||||||
'month' => $month,
|
'month' => $month,
|
||||||
|
@ -7,6 +7,7 @@ use app\model\ThirdUserAdvertiser;
|
|||||||
use app\util\Helper;
|
use app\util\Helper;
|
||||||
use app\util\ArgumentNames;
|
use app\util\ArgumentNames;
|
||||||
use app\util\ArgumentParser;
|
use app\util\ArgumentParser;
|
||||||
|
use DateTime;
|
||||||
use Google\Ads\GoogleAds\Lib\V18\GoogleAdsClient;
|
use Google\Ads\GoogleAds\Lib\V18\GoogleAdsClient;
|
||||||
use Google\Ads\GoogleAds\Lib\V18\GoogleAdsServerStreamDecorator;
|
use Google\Ads\GoogleAds\Lib\V18\GoogleAdsServerStreamDecorator;
|
||||||
use Google\Ads\GoogleAds\Util\FieldMasks;
|
use Google\Ads\GoogleAds\Util\FieldMasks;
|
||||||
@ -217,13 +218,13 @@ class GoogleAdsCampaignService extends BaseService
|
|||||||
* @return mixed
|
* @return mixed
|
||||||
* @throws ApiException
|
* @throws ApiException
|
||||||
*/
|
*/
|
||||||
public function runListDateDatas(int $customerId, $date): mixed
|
public function runListDateDatas($customerId,$options, $date): mixed
|
||||||
{
|
{
|
||||||
|
|
||||||
// $googleAdsClient = $this->googleAdsClient;
|
// $googleAdsClient = $this->googleAdsClient;
|
||||||
$googleAdsClient = new GoogleAdsClientService($customerId);
|
$googleAdsClient = new GoogleAdsClientService($options['refresh_token'], $options['login_customer_id']);
|
||||||
// Creates a single shared budget to be used by the campaigns added below.
|
// Creates a single shared budget to be used by the campaigns added below.
|
||||||
$dayResourceName = self::getDateDatas($googleAdsClient->getGoogleAdsClient(), $customerId, $date);
|
$dayResourceName = self::getDateDatas($googleAdsClient->getGoogleAdsClientWithloginCustomerId(), $customerId, $date);
|
||||||
// dump(json_encode($dayResourceName));
|
// dump(json_encode($dayResourceName));
|
||||||
if (is_array($dayResourceName)) {
|
if (is_array($dayResourceName)) {
|
||||||
self::saveDateDatas($dayResourceName);
|
self::saveDateDatas($dayResourceName);
|
||||||
@ -365,15 +366,15 @@ class GoogleAdsCampaignService extends BaseService
|
|||||||
|
|
||||||
// 计算季度
|
// 计算季度
|
||||||
if ($month >= 1 && $month <= 3) {
|
if ($month >= 1 && $month <= 3) {
|
||||||
$season = (int)$dateObj->format('Ym') . '01'; // Q1
|
$season = (int)$dateObj->format('Y') . '01'; // Q1
|
||||||
} elseif ($month >= 4 && $month <= 6) {
|
} elseif ($month >= 4 && $month <= 6) {
|
||||||
$season = (int)$dateObj->format('Ym') . '02'; // Q2
|
$season = (int)$dateObj->format('Y') . '02'; // Q2
|
||||||
} elseif ($month >= 7 && $month <= 9) {
|
} elseif ($month >= 7 && $month <= 9) {
|
||||||
$season = (int)$dateObj->format('Ym') . '03'; // Q3
|
$season = (int)$dateObj->format('Y') . '03'; // Q3
|
||||||
} else {
|
} else {
|
||||||
$season = (int)$dateObj->format('Ym') . '04'; // Q4
|
$season = (int)$dateObj->format('Y') . '04'; // Q4
|
||||||
}
|
}
|
||||||
|
$month = (int)$dateObj->format('Ym');
|
||||||
return [
|
return [
|
||||||
'year' => $year,
|
'year' => $year,
|
||||||
'month' => $month,
|
'month' => $month,
|
||||||
@ -441,7 +442,7 @@ class GoogleAdsCampaignService extends BaseService
|
|||||||
$sql = "INSERT INTO bps.bps_google_ad_day_data
|
$sql = "INSERT INTO bps.bps_google_ad_day_data
|
||||||
(ad_id, customer_id, ad_name, ad_resource_name, ad_group_id, campaign_id, clicks, cost_micros, conversions, conversions_value, impressions, date, month, season, year)
|
(ad_id, customer_id, ad_name, ad_resource_name, ad_group_id, campaign_id, clicks, cost_micros, conversions, conversions_value, impressions, date, month, season, year)
|
||||||
VALUES (:ad_id, :customer_id, :ad_name, :ad_resource_name, :ad_group_id, :campaign_id, :clicks, :cost_micros, :conversions, :conversions_value, :impressions, :date, :month, :season, :year)
|
VALUES (:ad_id, :customer_id, :ad_name, :ad_resource_name, :ad_group_id, :campaign_id, :clicks, :cost_micros, :conversions, :conversions_value, :impressions, :date, :month, :season, :year)
|
||||||
ON CONFLICT (ad_id, date) -- 假设 (ad_id, date) 为唯一约束
|
ON CONFLICT (ad_id, date)
|
||||||
DO UPDATE SET
|
DO UPDATE SET
|
||||||
customer_id = EXCLUDED.customer_id,
|
customer_id = EXCLUDED.customer_id,
|
||||||
ad_name = EXCLUDED.ad_name,
|
ad_name = EXCLUDED.ad_name,
|
||||||
@ -457,7 +458,7 @@ class GoogleAdsCampaignService extends BaseService
|
|||||||
season = EXCLUDED.season,
|
season = EXCLUDED.season,
|
||||||
year = EXCLUDED.year,
|
year = EXCLUDED.year,
|
||||||
update_at = EXCLUDED.update_at"; // 更新其他字段和更新时间戳
|
update_at = EXCLUDED.update_at"; // 更新其他字段和更新时间戳
|
||||||
|
// dump($sql, $data);
|
||||||
ThinkDb::execute($sql, $data);
|
ThinkDb::execute($sql, $data);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,7 @@ class GoogleOAuthService
|
|||||||
}
|
}
|
||||||
|
|
||||||
//保存或更新某个主体部广告账号
|
//保存或更新某个主体部广告账号
|
||||||
public function saveThirdUserAdvertiser($customer_id, $third_user_id,$login_customer_id,$customer_name = '')
|
public function saveThirdUserAdvertiser($customer_id, $third_user_id,$login_customer_id,$customer)
|
||||||
{
|
{
|
||||||
// 确保 customer_id 和 third_user_id 是字符串
|
// 确保 customer_id 和 third_user_id 是字符串
|
||||||
$customer_id = (string) $customer_id;
|
$customer_id = (string) $customer_id;
|
||||||
@ -97,18 +97,30 @@ class GoogleOAuthService
|
|||||||
$data = [
|
$data = [
|
||||||
'doc_' => $third_user_id,
|
'doc_' => $third_user_id,
|
||||||
'advertiser_id' => $customer_id,
|
'advertiser_id' => $customer_id,
|
||||||
'advertiser_name' => $customer_name,
|
'advertiser_name' => $customer['descriptive_name'],
|
||||||
'google_login_customer_id' => $login_customer_id,
|
'google_login_customer_id' => $login_customer_id,
|
||||||
];
|
];
|
||||||
|
if($customer['manager'] === true){
|
||||||
|
$data['google_manager'] = 't';
|
||||||
|
}else{
|
||||||
|
$data['google_manager'] = 'f';
|
||||||
|
}
|
||||||
|
if($customer['test_account'] === true){
|
||||||
|
$data['google_test_account'] = 't';
|
||||||
|
}else{
|
||||||
|
$data['google_test_account'] = 'f';
|
||||||
|
}
|
||||||
|
// dump($data);
|
||||||
$sql = "
|
$sql = "
|
||||||
INSERT INTO {$tableName}
|
INSERT INTO {$tableName}
|
||||||
(advertiser_id,advertiser_name, doc_,google_login_customer_id)
|
(advertiser_id,advertiser_name, doc_,google_login_customer_id,google_manager,google_test_account)
|
||||||
VALUES (:advertiser_id, :advertiser_name,:doc_,:google_login_customer_id)
|
VALUES (:advertiser_id, :advertiser_name,:doc_,:google_login_customer_id,:google_manager,:google_test_account)
|
||||||
ON CONFLICT (advertiser_id,doc_)
|
ON CONFLICT (advertiser_id,doc_)
|
||||||
DO UPDATE SET
|
DO UPDATE SET
|
||||||
advertiser_name = EXCLUDED.advertiser_name,
|
advertiser_name = EXCLUDED.advertiser_name,
|
||||||
google_login_customer_id = EXCLUDED.google_login_customer_id
|
google_login_customer_id = EXCLUDED.google_login_customer_id,
|
||||||
|
google_manager = EXCLUDED.google_manager,
|
||||||
|
google_test_account = EXCLUDED.google_test_account
|
||||||
";
|
";
|
||||||
// dump($sql,$data);
|
// dump($sql,$data);
|
||||||
ThinkDb::execute($sql, $data);
|
ThinkDb::execute($sql, $data);
|
||||||
@ -130,17 +142,17 @@ class GoogleOAuthService
|
|||||||
ThinkDb::execute($sql, $data);
|
ThinkDb::execute($sql, $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function updateThirdUser($state, $refreshToken): void
|
public function updateThirdUserDefault($third_user_id, $is_default = 't'): void
|
||||||
{
|
{
|
||||||
$tableName = 'bps_third_user';
|
$tableName = 'bps_third_user';
|
||||||
$tableName = getenv('DB_PG_SCHEMA') ? getenv('DB_PG_SCHEMA') . '.' . $tableName : 'bps' . $tableName;
|
$tableName = getenv('DB_PG_SCHEMA') ? getenv('DB_PG_SCHEMA') . '.' . $tableName : 'bps' . $tableName;
|
||||||
$data = [
|
$data = [
|
||||||
'access_token' => $refreshToken,
|
'is_default' => $is_default,
|
||||||
'random_code' => $state,];
|
'id' => $third_user_id,];
|
||||||
$sql = "
|
$sql = "
|
||||||
UPDATE {$tableName}
|
UPDATE {$tableName}
|
||||||
SET access_token = :access_token
|
SET is_default = :is_default
|
||||||
WHERE random_code = :random_code
|
WHERE id = :id
|
||||||
";
|
";
|
||||||
ThinkDb::execute($sql, $data);
|
ThinkDb::execute($sql, $data);
|
||||||
}
|
}
|
||||||
@ -158,14 +170,14 @@ class GoogleOAuthService
|
|||||||
// $thirdUser->save();
|
// $thirdUser->save();
|
||||||
$data = [
|
$data = [
|
||||||
'access_token' => $refreshToken,
|
'access_token' => $refreshToken,
|
||||||
'is_default' => 't',
|
'is_default' => 'f',
|
||||||
'third_type' => 'google',
|
'third_type' => 'google',
|
||||||
];
|
];
|
||||||
$tableName = 'bps_third_user';
|
$tableName = 'bps_third_user';
|
||||||
$tableName = getenv('DB_PG_SCHEMA') ? getenv('DB_PG_SCHEMA') . '.' . $tableName : 'bps' . $tableName;
|
$tableName = getenv('DB_PG_SCHEMA') ? getenv('DB_PG_SCHEMA') . '.' . $tableName : 'bps' . $tableName;
|
||||||
if (!empty($state)) {
|
if (!empty($state)) {
|
||||||
|
|
||||||
$thirdUser = ThirdUser::where('user_id', $state)->find(); // 获取第一个结果
|
$thirdUser = ThirdUser::where('user_id', $state)->where('third_type', 'google')->find(); // 获取第一个结果
|
||||||
// dump($thirdUser); return ($uid);
|
// dump($thirdUser); return ($uid);
|
||||||
if ($thirdUser) {
|
if ($thirdUser) {
|
||||||
$data['id'] = $thirdUser->id;
|
$data['id'] = $thirdUser->id;
|
||||||
@ -263,7 +275,7 @@ class GoogleOAuthService
|
|||||||
$customers = ThirdUserAdvertiser::alias('tua')
|
$customers = ThirdUserAdvertiser::alias('tua')
|
||||||
->join('bps.bps_third_user tu', 'tua.doc_ = tu.id') // 连接 bps_third_user 表
|
->join('bps.bps_third_user tu', 'tua.doc_ = tu.id') // 连接 bps_third_user 表
|
||||||
->where('tu.third_type', 'google') // 筛选 third_type 为 google 的记录
|
->where('tu.third_type', 'google') // 筛选 third_type 为 google 的记录
|
||||||
->field('tua.advertiser_id as customer_id,tua.google_login_customer_id as login_customer_id, tu.access_token as refresh_token') // 获取 advertiser_id 字段
|
->field('CAST(tua.advertiser_id AS BIGINT) as customer_id,tua.google_login_customer_id as login_customer_id,tua.google_test_account as test_account,tua.google_manager as manager, tu.access_token as refresh_token') // 获取 advertiser_id 字段
|
||||||
->select(); // 执行查询
|
->select(); // 执行查询
|
||||||
|
|
||||||
// 如果没有找到符合条件的广告主,抛出异常
|
// 如果没有找到符合条件的广告主,抛出异常
|
||||||
|
Loading…
Reference in New Issue
Block a user