450 lines
12 KiB
PHP
450 lines
12 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){
|
|
$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
|
|
{
|
|
$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'], $options);
|
|
return $this->successResponse(['groups_list' => $resourceName]);
|
|
}
|
|
/**
|
|
* get groups
|
|
* @throws ApiException
|
|
*/
|
|
public function getAds($options): Response
|
|
{
|
|
$resourceName = $this->googleAdsAdService->runListAds($options['customer_id'],$options);
|
|
return $this->successResponse(['groups_list' => $resourceName]);
|
|
}
|
|
|
|
/**
|
|
* get assets
|
|
* @throws ApiException
|
|
*/
|
|
public function getAssets($options): Response
|
|
{
|
|
$resourceName = $this->googleAdsAssetService->runListAssets($options['customer_id']);
|
|
// return $this->successResponse(['assets_list' => $resourceName]);
|
|
return $this->successResponse(['assets_list' => 'succeed added']);
|
|
}
|
|
/**
|
|
* get assets
|
|
* @throws ApiException
|
|
*/
|
|
public function getAssetRelations($options): Response
|
|
{
|
|
$resourceName = $this->googleAdsAssetRelationService->runListAssetRelations($options['customer_id']);
|
|
return $this->successResponse(['assets_relation_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
|
|
{
|
|
$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
|
|
]);
|
|
}
|
|
|
|
}
|
|
|