webman_ad/app/controller/GoogleAdsController.php

327 lines
8.7 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\GoogleAdsAccountService;
use support\Response;
use DI\Annotation\Inject;
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 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]);
}
/**
* 删除广告系列
* @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
]);
}
}