inspiren-sem-tool/app/Console/Commands/GetGoogleAdsRefreshToken.php
brian-inspiren 221d3f8173
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
feat: sem codebase
2026-05-21 11:28:03 +08:00

66 lines
2.3 KiB
PHP

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class GetGoogleAdsRefreshToken extends Command
{
protected $signature = 'google-ads:get-refresh-token';
protected $description = 'Generate a Google Ads API refresh token';
public function handle()
{
$client_id = $this->ask('Enter your Google OAuth Client ID');
$client_secret = $this->ask('Enter your Google OAuth Client Secret');
$redirect_uri = $this->ask('Enter your Redirect URI (e.g., http://localhost/oauth2callback)');
$authUrl = 'https://accounts.google.com/o/oauth2/v2/auth?' . http_build_query([
'scope' => 'https://www.googleapis.com/auth/adwords',
'access_type' => 'offline',
'include_granted_scopes' => 'true',
'response_type' => 'code',
'client_id' => $client_id,
'redirect_uri' => $redirect_uri
]);
$this->info("Open this URL in your browser:");
$this->line($authUrl);
$this->info("After approving access, you will be redirected to your redirect URI with a 'code' parameter.");
$code = $this->ask('Enter the code from the URL');
// Exchange code for refresh token
$response = $this->postToken($client_id, $client_secret, $redirect_uri, $code);
if(isset($response['refresh_token'])) {
$this->info("Success! Your refresh token is:");
$this->line($response['refresh_token']);
} else {
$this->error('Failed to get refresh token.');
$this->line(json_encode($response, JSON_PRETTY_PRINT));
}
return 0;
}
protected function postToken($client_id, $client_secret, $redirect_uri, $code)
{
$ch = curl_init('https://oauth2.googleapis.com/token');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
'code' => $code,
'client_id' => $client_id,
'client_secret' => $client_secret,
'redirect_uri' => $redirect_uri,
'grant_type' => 'authorization_code'
]));
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
}