Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zeekinteractive/laravel-googleads
Simplifies using the google-ads-php client library and Google Ads Query Language in Laravel
https://github.com/zeekinteractive/laravel-googleads
gaql gaql-builder google-ads google-ads-api laravel laravel-package
Last synced: 16 days ago
JSON representation
Simplifies using the google-ads-php client library and Google Ads Query Language in Laravel
- Host: GitHub
- URL: https://github.com/zeekinteractive/laravel-googleads
- Owner: ZeekInteractive
- License: mit
- Created: 2024-02-29T17:03:21.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-03-01T18:47:45.000Z (10 months ago)
- Last Synced: 2024-12-17T02:23:27.357Z (17 days ago)
- Topics: gaql, gaql-builder, google-ads, google-ads-api, laravel, laravel-package
- Language: PHP
- Homepage:
- Size: 13.7 KB
- Stars: 5
- Watchers: 7
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# laravel-googleads
Simplifies using the google-ads-php client library and Google Ads Query Language in Laravel## Installation
```bash
composer require zeek/laravel-googleads
```## Configuration
```bash
php artisan vendor:publish --provider="Zeek\GoogleAds\GoogleAdsServiceProvider"
```Modify the `config/googleads.php` file to include your Google Ads credentials and other settings. You will need the following:
- `developerToken` - Your Google Ads developer token, see https://developers.google.com/google-ads/api/docs/get-started/dev-token & https://developers.google.com/google-ads/api/docs/best-practices/test-accounts
- `clientId` & `clientSecret` - Your Google API Console OAuth2 Client ID & Secret, see https://developers.google.com/google-ads/api/docs/get-started/oauth-cloud-project
- `refreshToken` - The refresh token for the account you to access, see the usage example below for how you can use Socialite to obtain this.
- `clientCustomerId` - The customer ID of the account you want to access, see https://developers.google.com/google-ads/api/docs/best-practices/test-accounts>**WARNING**: The Developer Token will be PERMANENTLY associated with the OAuth2 Client ID upon first use. If you need to change the Developer Token you will need to create a new Google Cloud Project & new OAuth2 credentials.
>**NOTE:** Ensure that your Google Cloud Project has the Google Ads API enabled.
## Notes
### Google Ads does not have a read-only scope
See https://groups.google.com/g/adwords-api/c/B0VVHqNOLYs, the only oauth scope available is `https://www.googleapis.com/auth/adwords` which is read-write. In order to protect against accidental writes, you should use a separate Google Ads account for read-only access.
## Usage
### Get the Google Ads client
```php
$googleAds = App::make('google-ads');
```or
```php
use Zeek\GoogleAds\GoogleAds;$googleAds = new GoogleAds([
'developerToken' => env('GOOGLE_ADS_DEVELOPER_TOKEN'),
'clientCustomerId' => env('GOOGLE_ADS_CLIENT_CUSTOMER_ID'),
'loginCustomerId' => env('GOOGLE_ADS_LOGIN_CUSTOMER_ID'),
'clientId' => env('GOOGLE_ADS_CLIENT_ID'),
'clientSecret' => env('GOOGLE_ADS_CLIENT_SECRET'),
'refreshToken' => env('GOOGLE_ADS_REFRESH_TOKEN'),
]);
```### List all customers that the authenticated user has access to
```php
$ads = new GoogleAds([
'clientId' => config('services.google.client_id'),
'clientSecret' => config('services.google.client_secret'),
'developerToken' => config('services.google.ads_dev_token'),
'refreshToken' => $user->google_refresh_token,
]);$ads->listCustomers(); // ['customerId' => 'Descriptive Name']
```### Google Ads Query Language
>**NOTE:** This is not implemented yet.
```php
$googleAds = App::make('google-ads');
$googleAds->query('SELECT campaign.id, campaign.name FROM campaign');
```### Use Socialite to obtain a refresh token
[Laravel Socialite](https://laravel.com/docs/10.x/socialite) makes it easy to work with OAuth providers. Here's an example of how you can use it to obtain a refresh token for a Google Ads account:
>**NOTE:** Ensure that your application hostname is added to the Authorized JavaScript origins in the Google API Console and that the redirect URI is added to the Authorized redirect URIs. (i.e. `https://example.com` and `https://example.com/oauth-redirect`)
`routes/web.php`:
```php
Route::get('google-auth', [GoogleController::class, 'redirectToGoogle'])
->name('google-auth.init');Route::get('oauth-redirect', [GoogleController::class, 'handleGoogleCallback']);
````App\Http\Controllers\GoogleController.php`:
>**NOTE:** `Record` is a model where you will be storing your refresh token.
```php
class GoogleController extends Controller
{
/**
* Create a new controller instance.
*/
public function redirectToGoogle(Request $request, Record $record)
{
$driver = Socialite::driver('google');$driver->scopes($this->getScopes())
->with([
'access_type' => 'offline',
'prompt' => 'consent select_account',
]);Session::put('record_id', $record->id);
Session::forget('google-connection-error');return $driver->redirect();
}public function handleGoogleCallback(Request $request)
{
$record = Record::find(Session::get('record_id'));try {
$driver = Socialite::driver('google');
$oauth = $driver->user();// Update record info with oauth provider's info
$campaign->update([
'google_id' => $oauth->id,
'google_refresh_token' => $oauth->refreshToken,
]);
} catch (ClientException $e) {
}Session::forget('google-connection-error');
return redirect(route('records.edit', $record))->with('status', 'Select your Google Ads customer account.');
}private function getScopes(): array
{
return [
'https://www.googleapis.com/auth/adwords',
];
}
}
```## Related Resources:
- [Google Ads API PHP Client Library](https://github.com/googleads/google-ads-php) & [Documentation](https://developers.google.com/google-ads/api/docs/client-libs/php)
- [Google Ads Query Language](https://developers.google.com/google-ads/api/docs/query/overview)
- [Google Ads API PHP Client Library Examples](https://github.com/googleads/google-ads-php/tree/main/examples)