1

I have the problem with Google Adsense API. I used Services Account to authen, and this is my code:

require_once dirname(__FILE__) . '/google-api-php-client/Google_Client.php';    
require_once dirname(__FILE__) . '/google-api-php-client/contrib/Google_AdSenseService.php';
require_once dirname(__FILE__) . '/google-api-php-client/contrib/Google_Oauth2Service.php';

$SERVICE_ACCOUNT_PKCS12_FILE_PATH = dirname(__FILE__) . '/keyfile.p12';

// create client object and set app name
$client = new Google_Client();
$client->setApplicationName("XXXX"); // name of your app

// set assertion credentials
$key  = file_get_contents($SERVICE_ACCOUNT_PKCS12_FILE_PATH);
$auth = new Google_AssertionCredentials("YYYYYY@developer.gserviceaccount.com", // email you added to GA
    array('https://www.googleapis.com/auth/adsense.readonly'), $key);

$client->setAssertionCredentials($auth);
$client->getAuth()->refreshTokenWithAssertion();
$accessToken = $client->getAccessToken();
// other settings
$client->setClientId("XYZ.apps.googleusercontent.com"); // from API console
$service   = new Google_AdsenseService($client);
$optParams = array('metric' => array('earnings'), 'dimension' => 'date');
$data      = $service->reports->generate('2013-01-01', '2013-03-03', $optParams);

And then I got this error messege:

Fatal error: Uncaught exception 'Google_ServiceException' with message 'Error calling GET https://www.googleapis.com/adsense/v1.3/reports?startDate=2013-01-01&endDate=2013-03-03&metric=earnings&dimension=date: (403) User does not have an AdSense account.' in /opt/lampp/htdocs/googleads/google-api-php-client/io/Google_REST.php:66 Stack trace: #0 /opt/lampp/htdocs/googleads/google-api-php-client/io/Google_REST.php(36): Google_REST::decodeHttpResponse(Object(Google_HttpRequest)) #1 /opt/lampp/htdocs/googleads/google-api-php-client/service/Google_ServiceResource.php(186): Google_REST::execute(Object(Google_HttpRequest)) #2 /opt/lampp/htdocs/googleads/google-api-php-client/contrib/Google_AdSenseService.php(849): Google_ServiceResource->__call('generate', Array) #3 /opt/lampp/htdocs/googleads/index.php(28): Google_ReportsServiceResource->generate('2013-01-01', '2013-03-03', Array) #4 {main} thrown in /opt/lampp/htdocs/googleads/google-api-php-client/io/Google_REST.php on line 66

Sérgio Gomes
  • 720
  • 5
  • 14
Mai Truong
  • 11
  • 1
  • 2
  • The error message is: *User does not have an AdSense account* Are you sure the information is correct ? – Raptor Aug 30 '13 at 03:42
  • did you enable AdSense from your [Google API Console](https://code.google.com/apis/console/)? just having an AdSense account doesn't automatically give you API access. – roninblade Aug 30 '13 at 03:43
  • Yes, after $accessToken = $client->getAccessToken();, I can get the access token . But I can not call any function to get data report. – Mai Truong Aug 30 '13 at 03:51

1 Answers1

0

Unfortunately at the moment AdSense API doesn't support Service Account, so AdSense data is invisible for API (that's why you getting that error).

Perhaps the best solution is to use "Web application" login: https://developers.google.com/adsense/management/getting_started#auth

Konstantin
  • 18,474
  • 1
  • 14
  • 8