401 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			401 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace app\controller;
 | |
| 
 | |
| use app\model\Campaign as CampaignModel;
 | |
| use app\model\CampaignBudget;
 | |
| use Google\ApiCore\ApiException;
 | |
| use support\Request;
 | |
| use app\service\GoogleAdsCampaignService;
 | |
| use app\service\GoogleAdsGroupService;
 | |
| use app\service\GoogleAdsAdService;
 | |
| use app\service\GoogleAdsAccountService;
 | |
| 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 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 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);
 | |
|     }
 | |
| 
 | |
|     public function accessibleCustomers(Request $request)
 | |
|     {
 | |
| //        $options = $request->all();
 | |
|         // 继续处理 Google Ads API 操作
 | |
|         return $this->listAccessibleCustomers();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 创建广告系列
 | |
|      * @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]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 关联广告客户ID
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function listAccessibleCustomers(): Response
 | |
|     {
 | |
|         $resourceName = $this->googleAdsAccountService->runListAccessibleCustomers();
 | |
|         return $this->successResponse(['links_resource_name' => $resourceName]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * get campaigns
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function getCampaigns($options): Response
 | |
|     {
 | |
|         $resourceName = $this->googleAdsCampaignService->runListCampaigns($options['customer_id']);
 | |
|         return $this->successResponse(['campaigns_list' => $resourceName]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * get groups
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function getGroups($options): Response
 | |
|     {
 | |
|         $resourceName = $this->googleAdsGroupService->runListGroups($options['customer_id']);
 | |
|         return $this->successResponse(['groups_list' => $resourceName]);
 | |
|     }
 | |
|     /**
 | |
|      * get groups
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function getAds($options): Response
 | |
|     {
 | |
|         $resourceName = $this->googleAdsAdService->runListAds($options['customer_id']);
 | |
|         return $this->successResponse(['groups_list' => $resourceName]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * get date datas
 | |
|      * @throws ApiException
 | |
|      */
 | |
|     public function getDateDatas($options): Response
 | |
|     {
 | |
|         $resourceName = $this->googleAdsCampaignService->runListDateDatas($options['customer_id'], '2024-12-18');
 | |
|         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参数错误');
 | |
|         }
 | |
|         $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
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 |