I'm trying to get the Customer ID but I get this error:
PHP Fatal error: Uncaught exception 'Google\\AdsApi\\AdWords\\v201702\\cm\\ApiException' with message '[AuthenticationError.CLIENT_CUSTOMER_ID_IS_REQUIRED @ ; trigger:'<null>']' in /var/www/html/adwords/vendor/googleads/googleads-php-lib/src/Google/AdsApi/Common/Util/Reflection.php:39\nStack trace:\n#0 /var/www/html/adwords/vendor/googleads/googleads-php-lib/src/Google/AdsApi/Common/Util/Reflection.php(39): ReflectionClass->newInstanceArgs(Array)\n#1 /var/www/html/adwords/vendor/googleads/googleads-php-lib/src/Google/AdsApi/Common/AdsSoapClient.php(162): Google\\AdsApi\\Common\\Util\\Reflection->createInstance('Google\\\\AdsApi\\\\A...', '[Authentication...')\n#2 /var/www/html/adwords/vendor/googleads/googleads-php-lib/src/Google/AdsApi/Common/AdsSoapClient.php(126): Google\\AdsApi\\Common\\AdsSoapClient->parseApiExceptionFromSoapFault(Object(SoapFault))\n#3 /var/www/html/adwords/vendor/googleads/googleads-php-lib/src/Google/AdsApi/AdWords/v201702/mcm/ManagedCustomerService.php(103): Google\\AdsApi\\Common\\AdsSoapClient->__soapCall('get', Array)\n#4 in /var/www/html/adwords/vendor/googleads/googleads-php-lib/src/Google/AdsApi/Common/Util/Reflection.php on line 39
The code I use is the one bellow. Any help would be appreciated.
namespace Google\AdsApi\Examples\AdWords\v201702\AccountManagement;
require_once __DIR__.'/vendor/autoload.php';
use Google\Auth\OAuth2;
session_start();
$oauth2 = new OAuth2([
'clientId' => 'xxx',
'clientSecret' => 'xxx',
]);
if (!isset($_GET['code'])) {
// Create a 'state' token to prevent request forgery.
// Store it in the session for later validation.
$oauth2->setState(sha1(openssl_random_pseudo_bytes(1024)));
$_SESSION['oauth2state'] = $oauth2->getState();
// Redirect the user to the authorization URL.
$config = [
// Set to 'offline' if you require offline access.
'access_type' => 'offline'
];
header('Location: ' . $oauth2->buildFullAuthorizationUri($config));
exit;
// Check given state against previously stored one to mitigate CSRF attack.
}elseif (empty($_GET['state'])
|| ($_GET['state'] !== $_SESSION['oauth2state'])) {
unset($_SESSION['oauth2state']);
exit('Invalid state.');
}
else {
$oauth2->setCode($_GET['code']);
$authToken = $oauth2->fetchAuthToken();
// echo 'successfully connected';
}
?><form method="post" action="report.php"><select name="account"><?php
use Google\AdsApi\AdWords\v201702\mcm\ManagedCustomerService;
use Google\AdsApi\AdWords\AdWordsServices;
use Google\AdsApi\AdWords\AdWordsSessionBuilder;
use Google\AdsApi\Common\OAuth2TokenBuilder;
use Google\AdsApi\AdWords\v201702\cm\CampaignService;
use Google\AdsApi\AdWords\v201702\cm\OrderBy;
use Google\AdsApi\AdWords\v201702\cm\Paging;
use Google\AdsApi\AdWords\v201702\cm\Selector;
use Google\AdsApi\AdWords\v201702\cm\SortOrder;
use Google\AdsApi\AdWords\v201702\cm\Predicate;
use Google\AdsApi\AdWords\v201702\cm\PredicateOperator;
$session = (new AdWordsSessionBuilder())
->fromFile()
->withOAuth2Credential($oauth2)
->build();
$adWordsServices = new AdWordsServices();
$managedCustomerService = $adWordsServices->get($session, ManagedCustomerService::class);
$selector = new Selector();
$selector->setFields(['CustomerId', 'Name']);
$selector->setPredicates([new Predicate('CanManageClients', PredicateOperator::EQUALS, ['false'])]); // exclude MCC top accounts
$page = $managedCustomerService->get($selector);
foreach ($page->getEntries() as $account) {
echo ('<option value="' . $account->getCustomerId().' ">'.$account->getCustomerId() . ' - ' . $account->getName().'</option>');
}
?> </select><input type='submit' name='submit'/>