465 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			465 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace app\controller;
 | |
| 
 | |
| use Google\ApiCore\ApiException;
 | |
| use support\Request;
 | |
| use app\service\GoogleAdsCampaignService;
 | |
| use app\service\GoogleAdsGroupService;
 | |
| use app\service\GoogleAdsAdService;
 | |
| use app\service\GoogleAdsAssetService;
 | |
| use app\service\GoogleAdsAssetRelationService;
 | |
| use app\service\GoogleAdsAccountService;
 | |
| //use app\service\GoogleOAuthService;
 | |
| use support\Response;
 | |
| use DI\Annotation\Inject;
 | |
| use think\facade\Db as ThinkDb;
 | |
| 
 | |
| class GoogleAdsController
 | |
| {
 | |
|     /**
 | |
|      * @Inject
 | |
|      * @var GoogleAdsCampaignService
 | |
|      */
 | |
| 
 | |
|     private $googleAdsCampaignService;
 | |
| 
 | |
|     /**
 | |
|      * @Inject
 | |
|      * @var GoogleAdsGroupService
 | |
|      */
 | |
|     private $googleAdsGroupService;
 | |
| 
 | |
|     /**
 | |
|      * @Inject
 | |
|      * @var GoogleAdsAdService
 | |
|      */
 | |
|     private $googleAdsAdService;
 | |
| 
 | |
|     /**
 | |
|      * @Inject
 | |
|      * @var GoogleAdsAssetService
 | |
|      */
 | |
|     private $googleAdsAssetService;
 | |
| 
 | |
|     /**
 | |
|      * @Inject
 | |
|      * @var GoogleAdsAssetRelationService
 | |
|      */
 | |
|     private $googleAdsAssetRelationService;
 | |
| 
 | |
|     /**
 | |
|      * @Inject
 | |
|      * @var GoogleAdsAccountService
 | |
|      */
 | |
|     private $googleAdsAccountService;
 | |
| 
 | |
| 
 | |
|     public function __construct()
 | |
|     {
 | |
| 
 | |
|     }
 | |
| 
 | |
|     public function createCampaign(Request $request)
 | |
|     {
 | |
|         $options = $request->all();
 | |
| 
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         return $this->addCampaign($options);
 | |
|     }
 | |
| 
 | |
|     public function listCampaigns(Request $request)
 | |
|     {
 | |
|         $options = $request->all();
 | |
| 
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         return $this->getCampaigns($options);
 | |
|     }
 | |
| 
 | |
|     public function listGroups(Request $request)
 | |
|     {
 | |
|        $options = $request->all();
 | |
| 
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         return $this->getGroups($options);
 | |
|     }
 | |
| 
 | |
|     public function listAds(Request $request)
 | |
|     {
 | |
|         $options = $request->all();
 | |
| 
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         return $this->getAds($options);
 | |
|     }
 | |
| 
 | |
|     public function listAssets(Request $request)
 | |
|     {
 | |
|         $options = $request->all();
 | |
| 
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         return $this->getAssets($options);
 | |
|     }
 | |
|     public function listAssetRelations(Request $request)
 | |
|     {
 | |
|         $options = $request->all();
 | |
| 
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         if($options['asset_type'] == 2){
 | |
|             return $this->getVideoAssetRelations($options);
 | |
|         }elseif($options['asset_type'] == 4){
 | |
|           return  $this->getAssetRelations($options);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function listDateDatas(Request $request)
 | |
|     {
 | |
|         $options = $request->all();
 | |
|         return $this->getDateDatas($options);
 | |
|     }
 | |
| 
 | |
|     public function listCampaignsNext(Request $request)
 | |
|     {
 | |
|         $options = $request->all();
 | |
| 
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         return $this->getCampaignsNext($options);
 | |
|     }
 | |
| 
 | |
|     public function deleteCampaign(Request $request)
 | |
|     {
 | |
|         $options = $request->all();
 | |
| 
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         return $this->removeCampaign($options);
 | |
|     }
 | |
| 
 | |
|     public function updateCampaign(Request $request)
 | |
|     {
 | |
|         $options = $request->all();
 | |
| 
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         return $this->modifyCampaign($options);
 | |
|     }
 | |
| 
 | |
|     public function createCampaignBudget(Request $request)
 | |
|     {
 | |
|         $options = $request->all();
 | |
| //        return json(['code' => 0, 'msg' => getenv('GOOGLE_ADS_CUSTOMER_ID'),'data'=>$options]);
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         return $this->addCampaignBudget($options);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     public function createGroup(Request $request)
 | |
|     {
 | |
|         $options = $request->all();
 | |
| 
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         return $this->addGroup($options);
 | |
|     }
 | |
| 
 | |
|     public function updateGroup(Request $request)
 | |
|     {
 | |
|         $options = $request->all();
 | |
| 
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         return $this->modifyGroup($options);
 | |
|     }
 | |
| 
 | |
|     public function updateAd(Request $request)
 | |
|     {
 | |
|         $options = $request->all();
 | |
| 
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         return $this->modifyAd($options);
 | |
|     }
 | |
| 
 | |
|     public function updateResponsiveSearchAd(Request $request)
 | |
|     {
 | |
|         $options = $request->all();
 | |
| 
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         return $this->modifyResponsiveSearchAd($options);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     public function listResponsiveSearchAds(Request $request)
 | |
|     {
 | |
|         $options = $request->all();
 | |
| 
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         return $this->getResponsiveSearchAds($options);
 | |
|     }
 | |
| 
 | |
|     public function listGoogleAdsFields(Request $request)
 | |
|     {
 | |
|         $options = $request->all();
 | |
| 
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         return $this->searchForGoogleAdsFields($options);
 | |
|     }
 | |
| 
 | |
|     public function createLinkManagerToClient(Request $request)
 | |
|     {
 | |
|         $options = $request->all();
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         return $this->addLinkManagerToClient($options);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * 创建广告系列
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function addCampaign($options): Response
 | |
|     {
 | |
|         // 使用 $options 数组中的数据进行 Google Ads API 的调用
 | |
|         // 例如使用 $options['customer_id'] 和 $options['feed_id']
 | |
|         // 调用相应的 Google Ads 服务
 | |
| //        $budgetResourceName   = $this->googleAdsCampaignBudgetService->createCampaignBudget();
 | |
|         $resourceName = $this->googleAdsCampaignService->runAddCampaign(4060397299, $options);
 | |
|         return $this->successResponse(['campaign_resource_name' => $resourceName]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 创建广告预算
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function addCampaignBudget($options): Response
 | |
|     {
 | |
|         $resourceName = $this->googleAdsCampaignService->runAddCampaignBudget(0, $options);
 | |
|         return $this->successResponse(['budget_resource_name' => $resourceName]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 关联广告客户ID
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function addLinkManagerToClient($options): Response
 | |
|     {
 | |
|         $resourceName = $this->googleAdsAccountService->runLinkManagerToClient($options);
 | |
|         return $this->successResponse(['link_resource_name' => $resourceName]);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * get campaigns
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function getCampaigns($options): Response
 | |
|     {
 | |
|                 $options['login_customer_id'] = 1401879025;
 | |
|         $options['refresh_token'] = '1//0eeLHHxVH5EK1CgYIARAAGA4SNwF-L9Irjf3gV-k7bjIeT7WWpbNrvvJQU2cM9OTPUnG4aBYIJDntlUzQ8T1egKkQco5lNtg28FA';
 | |
|         $resourceName = $this->googleAdsCampaignService->runListCampaigns($options['customer_id'], $options);
 | |
|         return $this->successResponse(['campaigns_list' => $resourceName]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * get groups
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function getGroups($options): Response
 | |
|     {
 | |
|         $resourceName = $this->googleAdsGroupService->runListGroups($options['customer_id'], $options);
 | |
|         return $this->successResponse(['groups_list' => $resourceName]);
 | |
|     }
 | |
|     /**
 | |
|      * get groups
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function getAds($options): Response
 | |
|     {
 | |
| //                $options['login_customer_id'] = 1401879025;
 | |
|         $options['refresh_token'] = '1//0eeLHHxVH5EK1CgYIARAAGA4SNwF-L9Irjf3gV-k7bjIeT7WWpbNrvvJQU2cM9OTPUnG4aBYIJDntlUzQ8T1egKkQco5lNtg28FA';
 | |
| 
 | |
|         $resourceName = $this->googleAdsAdService->runListAds($options['customer_id'],$options);
 | |
|         return $this->successResponse(['groups_list' => $resourceName]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * get assets
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function getAssets($options): Response
 | |
|     {
 | |
|                         $options['login_customer_id'] = 1401879025;
 | |
|         $options['refresh_token'] = '1//0en4AWGamrTnOCgYIARAAGA4SNwF-L9IrMOw2DkHF2y3DL2kDiEmOUzk5KTsR1f1iU_axBNi-LgxfT_76JHK4AY1KChZWfyNc0Qs';
 | |
|         $resourceName = $this->googleAdsAssetService->runListCreatives($options['customer_id'],$options);
 | |
| //        return $this->successResponse(['assets_list' => $resourceName]);
 | |
|         return $this->successResponse(['assets_list' => 'succeed added']);
 | |
|     }
 | |
|     /**
 | |
|      * get assets
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function getAssetRelations($options): Response
 | |
|     {
 | |
| //        dump($options);
 | |
|         $resourceName = $this->googleAdsAssetRelationService->runListAssetRelations($options['customer_id']);
 | |
| //        dump($resourceName);
 | |
| //        return $this->successResponse($resourceName);
 | |
|         return $this->successResponse(['assets_list' => $resourceName]);
 | |
| //        return $this->successResponse(['assets_relation_list' => 'succeed added']);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * get assets
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function getVideoAssetRelations($options): Response
 | |
|     {
 | |
|         $resourceName = $this->googleAdsAssetRelationService->runListVideoAssetRelations($options['customer_id']);
 | |
|         return $this->successResponse(['assets_relation_list' => $resourceName]);
 | |
| //        return $this->successResponse(['assets_relation_list' => 'succeed added']);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * get date datas
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function getDateDatas($options): Response
 | |
|     {
 | |
|          $todayStart = date('Y-m-d', strtotime('0 day'));
 | |
|         $options['login_customer_id'] = 1401879025;
 | |
|         $options['refresh_token'] = '1//0en4AWGamrTnOCgYIARAAGA4SNwF-L9IrMOw2DkHF2y3DL2kDiEmOUzk5KTsR1f1iU_axBNi-LgxfT_76JHK4AY1KChZWfyNc0Qs';
 | |
| //        dump($todayStart);
 | |
|         $resourceName = $this->googleAdsCampaignService->runListDateDatas($options['customer_id'],$options, '2025-01-09');
 | |
|         return $this->successResponse(['date_datas_list' => $resourceName]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * get campaigns Next
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function getCampaignsNext($options): Response
 | |
|     {
 | |
|         $data = $this->googleAdsCampaignService->runListCampaignsNext($options);
 | |
|         return $this->successResponse($data);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 删除广告系列
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function removeCampaign($options): Response
 | |
|     {
 | |
|         $resourceName = $this->googleAdsCampaignService->runRemoveCampaign($options);
 | |
|         return $this->successResponse(['campaign_deleted' => $resourceName]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 更新广告系列
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function modifyCampaign($options): Response
 | |
|     {
 | |
|         $resourceName = $this->googleAdsCampaignService->runUpdateCampaign($options);
 | |
|         return $this->successResponse(['campaign_updated' => $resourceName]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 新增广告组
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function addGroup($options): Response
 | |
|     {
 | |
|         $resourceName = $this->googleAdsGroupService->runAddGroup($options);
 | |
|         return $this->successResponse(['groups_created' => $resourceName]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 更新广告组
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function modifyGroup($options): Response
 | |
|     {
 | |
|         $adGroupStatus               = [
 | |
|             0,  // UNSPECIFIED
 | |
|             1,  // UNKNOWN
 | |
|             2,  // ENABLED
 | |
|             3,  // PAUSED
 | |
|             4   // REMOVED
 | |
|         ];
 | |
|         $options['bid_micro_amount'] = $options['amount'] * 1000000 < 0 ? 0 : $options['amount'] * 1000000;
 | |
|         if (!in_array($options['status'], $adGroupStatus)) {
 | |
|             return $this->errorResponse(101, 'status参数错误');
 | |
|         }
 | |
|         $resourceName = $this->googleAdsGroupService->runUpdateGroup($options);
 | |
|         return $this->successResponse(['group_updated' => $resourceName]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 更新广告
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function modifyAd($options): Response
 | |
|     {
 | |
|         $adGroupStatus = [
 | |
|             0,  // UNSPECIFIED
 | |
|             1,  // UNKNOWN
 | |
|             2,  // ENABLED
 | |
|             3,  // PAUSED
 | |
|             4   // REMOVED
 | |
|         ];
 | |
|         if (!in_array($options['status'], $adGroupStatus)) {
 | |
|             return $this->errorResponse(101, 'status参数错误');
 | |
|         }
 | |
| //        dump($options['status'],$adGroupStatus);
 | |
|         $resourceName = $this->googleAdsAdService->runUpdateAd($options);
 | |
|         return $this->successResponse(['ad_updated' => $resourceName]);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * get campaigns
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function getResponsiveSearchAds($options): Response
 | |
|     {
 | |
|         $resourceName = $this->googleAdsAdService->runGetResponsiveSearchAds($options);
 | |
|         return $this->successResponse(['ads_list' => $resourceName]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * get campaigns
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function searchForGoogleAdsFields($options): Response
 | |
|     {
 | |
|         $googleAdsFieldData = $this->googleAdsAdService->runSearchForGoogleAdsFields($options);
 | |
|         return $this->successResponse(['ads_fields' => $googleAdsFieldData]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * get campaigns
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function modifyResponsiveSearchAd($options): Response
 | |
|     {
 | |
|         $resourceName = $this->googleAdsAdService->runUpdateResponsiveSearchAd($options);
 | |
|         return $this->successResponse(['ad_updated' => $resourceName]);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     // 可以加入一些公共方法
 | |
|     protected function successResponse($data): Response
 | |
|     {
 | |
|         return Json([
 | |
|             'code' => 0,
 | |
|             'msg' => 'ok',
 | |
|             'data' => $data,
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
|     protected function errorResponse($code, $message, $data = []): Response
 | |
|     {
 | |
|         return Json([
 | |
|             'code' => $code,
 | |
|             'msg' => $message ?: 'error',
 | |
|             'data' => $data
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | 
