133 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace app\service;
 | |
| 
 | |
| use GuzzleHttp\Client;
 | |
| 
 | |
| class MetaBusinessService
 | |
| {
 | |
|     protected $client;
 | |
|     protected $accessToken;
 | |
|     protected $businessId;
 | |
| 
 | |
|     public function __construct()
 | |
|     {
 | |
|         $this->client = new Client();
 | |
|         $this->accessToken = getenv('META_ACCESS_TOKEN');
 | |
|         $this->businessId = getenv('META_BUSINESS_ID');
 | |
|     }
 | |
| 
 | |
|     // 获取广告账户
 | |
|     public function getBusinessAccounts()
 | |
|     {
 | |
|         $url = "https://graph.facebook.com/v15.0/{$this->businessId}/owned_ad_accounts";
 | |
|         $response = $this->client->get($url, [
 | |
|             'query' => [
 | |
|                 'access_token' => $this->accessToken,
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         return json_decode($response->getBody()->getContents(), true)['data'] ?? [];
 | |
|     }
 | |
| 
 | |
|     // 保存广告账户到数据库
 | |
|     public function saveBusinessAccounts($accounts)
 | |
|     {
 | |
|         foreach ($accounts as $account) {
 | |
|             // 假设你已经定义了 MetaBusinessAccount 模型
 | |
|             MetaBusinessAccount::create([
 | |
|                 'account_name' => $account['name'],
 | |
|                 'account_id' => $account['id'],
 | |
|                 'status' => $account['status'],
 | |
|             ]);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // 获取广告系列
 | |
|     public function getCampaigns()
 | |
|     {
 | |
|         $url = "https://graph.facebook.com/v15.0/{$this->businessId}/campaigns";
 | |
|         $response = $this->client->get($url, [
 | |
|             'query' => [
 | |
|                 'access_token' => $this->accessToken,
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         return json_decode($response->getBody()->getContents(), true)['data'] ?? [];
 | |
|     }
 | |
| 
 | |
|     // 创建广告系列
 | |
|     public function createCampaign($name, $objective, $status)
 | |
|     {
 | |
|         $url = "https://graph.facebook.com/v15.0/{$this->businessId}/campaigns";
 | |
|         $response = $this->client->post($url, [
 | |
|             'json' => [
 | |
|                 'name' => $name,
 | |
|                 'objective' => $objective,
 | |
|                 'status' => $status,
 | |
|                 'access_token' => $this->accessToken,
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         return json_decode($response->getBody()->getContents(), true);
 | |
|     }
 | |
| 
 | |
|     // 获取广告组
 | |
|     public function getAdGroups($campaignId)
 | |
|     {
 | |
|         $url = "https://graph.facebook.com/v15.0/{$campaignId}/adsets";
 | |
|         $response = $this->client->get($url, [
 | |
|             'query' => [
 | |
|                 'access_token' => $this->accessToken,
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         return json_decode($response->getBody()->getContents(), true)['data'] ?? [];
 | |
|     }
 | |
| 
 | |
|     // 创建广告组
 | |
|     public function createAdGroup($campaignId, $name, $status)
 | |
|     {
 | |
|         $url = "https://graph.facebook.com/v15.0/{$this->businessId}/adsets";
 | |
|         $response = $this->client->post($url, [
 | |
|             'json' => [
 | |
|                 'name' => $name,
 | |
|                 'status' => $status,
 | |
|                 'campaign_id' => $campaignId,
 | |
|                 'access_token' => $this->accessToken,
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         return json_decode($response->getBody()->getContents(), true);
 | |
|     }
 | |
| 
 | |
|     // 获取广告
 | |
|     public function getAds($adGroupId)
 | |
|     {
 | |
|         $url = "https://graph.facebook.com/v15.0/{$adGroupId}/ads";
 | |
|         $response = $this->client->get($url, [
 | |
|             'query' => [
 | |
|                 'access_token' => $this->accessToken,
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         return json_decode($response->getBody()->getContents(), true)['data'] ?? [];
 | |
|     }
 | |
| 
 | |
|     // 创建广告
 | |
|     public function createAd($adGroupId, $name, $status)
 | |
|     {
 | |
|         $url = "https://graph.facebook.com/v15.0/{$this->businessId}/ads";
 | |
|         $response = $this->client->post($url, [
 | |
|             'json' => [
 | |
|                 'name' => $name,
 | |
|                 'status' => $status,
 | |
|                 'adset_id' => $adGroupId,
 | |
|                 'access_token' => $this->accessToken,
 | |
|             ]
 | |
|         ]);
 | |
| 
 | |
|         return json_decode($response->getBody()->getContents(), true);
 | |
|     }
 | |
| }
 |