webman_ad/app/service/GoogleAdsService.php
2024-12-11 18:30:32 +08:00

132 lines
4.6 KiB
PHP

<?php
namespace app\service;
use Google\Ads\GoogleAds\Lib\V18\GoogleAdsClient;
use Google\Ads\GoogleAds\V18\Services\AdGroupOperation;
use Google\Ads\GoogleAds\V18\Services\AdOperation;
use Google\Ads\GoogleAds\V18\Services\CampaignBudgetOperation;
use Google\Ads\GoogleAds\V18\Services\CampaignOperation;
class GoogleAdsService
{
protected $googleAdsClient;
public function __construct()
{
$config = include __DIR__ . '/../../config/google_ads_php.ini';
$this->googleAdsClient = new GoogleAdsClient([
'developerToken' => $config['developer_token'],
'clientId' => $config['client_id'],
'clientSecret' => $config['client_secret'],
'refreshToken' => $config['refresh_token'],
]);
}
// 创建广告预算
public function createCampaignBudget($customerId, $budgetName, $amountMicros)
{
$campaignBudgetService = $this->googleAdsClient->getCampaignBudgetServiceClient();
$campaignBudget = new \Google\Ads\GoogleAds\V18\Resources\CampaignBudget([
'name' => $budgetName,
'amountMicros' => $amountMicros,
'deliveryMethod' => 'STANDARD',
'status' => 'ENABLED',
]);
$operation = new CampaignBudgetOperation();
$operation->setCreate($campaignBudget);
try {
$response = $campaignBudgetService->mutateCampaignBudgets($customerId, [$operation]);
return $response->getResults()[0]->getResourceName();
} catch (\Google\Ads\GoogleAds\Errors\GoogleAdsException $e) {
return $e->getMessage();
}
}
// 创建广告系列
public function createCampaign($customerId, $budgetId, $campaignName)
{
$campaignService = $this->googleAdsClient->getCampaignServiceClient();
$campaign = new \Google\Ads\GoogleAds\V18\Resources\Campaign([
'name' => $campaignName,
'advertisingChannelType' => 'SEARCH',
'status' => 'PAUSED',
'startDate' => '2024-12-01',
'endDate' => '2024-12-31',
'manualCpc' => new \Google\Ads\GoogleAds\V18\Resources\ManualCpc([
'enhancedCpcEnabled' => true
]),
'campaignBudget' => "customers/{$customerId}/campaignBudgets/{$budgetId}"
]);
$operation = new CampaignOperation();
$operation->setCreate($campaign);
try {
$response = $campaignService->mutateCampaigns($customerId, [$operation]);
return $response->getResults()[0]->getResourceName();
} catch (\Google\Ads\GoogleAds\Errors\GoogleAdsException $e) {
return $e->getMessage();
}
}
// 创建广告组
public function createAdGroup($customerId, $campaignId, $adGroupName, $cpcBidMicros)
{
$adGroupService = $this->googleAdsClient->getAdGroupServiceClient();
$adGroup = new \Google\Ads\GoogleAds\V18\Resources\AdGroup([
'name' => $adGroupName,
'campaign' => "customers/{$customerId}/campaigns/{$campaignId}",
'status' => 'PAUSED',
'cpcBidMicros' => $cpcBidMicros,
'startDate' => '2024-12-01',
'endDate' => '2024-12-31',
]);
$operation = new AdGroupOperation();
$operation->setCreate($adGroup);
try {
$response = $adGroupService->mutateAdGroups($customerId, [$operation]);
return $response->getResults()[0]->getResourceName();
} catch (\Google\Ads\GoogleAds\Errors\GoogleAdsException $e) {
return $e->getMessage();
}
}
// 创建广告
public function createAd($customerId, $adGroupId, $adName, $headline, $description, $finalUrls)
{
$adService = $this->googleAdsClient->getAdServiceClient();
// 创建文本广告
$textAd = new \Google\Ads\GoogleAds\V18\Resources\AdTextAdInfo([
'headline' => $headline,
'description' => $description,
'finalUrls' => $finalUrls,
]);
$ad = new \Google\Ads\GoogleAds\V18\Resources\Ad([
'name' => $adName,
'adGroup' => "customers/{$customerId}/adGroups/{$adGroupId}",
'status' => 'PAUSED',
'textAd' => $textAd,
]);
$operation = new AdOperation();
$operation->setCreate($ad);
try {
$response = $adService->mutateAds($customerId, [$operation]);
return $response->getResults()[0]->getResourceName();
} catch (\Google\Ads\GoogleAds\Errors\GoogleAdsException $e) {
return $e->getMessage();
}
}
}