golobitch
golobitch

Reputation: 1334

PHP Google Analytics API Authorization error

I want to fetch Google Analytics data for my website via Google Analytics API. First, I went to developers console, I enabled Analytics API, then under credentials section I created new ClientID (Service account).

Now, this is my code

include "assets/src/templates/base.php";

require_once 'assets/src/Google/autoload.php';

$client_id = 'xxx.apps.googleusercontent.com'; //Client ID
$service_account_name = '[email protected]'; //Email Address
$key_file_location = 'zzz/key.p12'; //key.p12

echo pageHeader("Service Account Access");
if (strpos($client_id, "googleusercontent") == false
    || !strlen($service_account_name)
    || !strlen($key_file_location)) {
  echo missingServiceAccountDetailsWarning();
  exit;
}

$client = new Google_Client();
$client->setApplicationName("app");
$service = new Google_Service_Analytics($client);


if (isset($_SESSION['service_token'])) {
  $client->setAccessToken($_SESSION['service_token']);
}
$key = file_get_contents($key_file_location);

$cred = new Google_Auth_AssertionCredentials(
    $service_account_name,
    array('https://www.googleapis.com/auth/analytics.readonly'),
    $key
);
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired()) {
  $client->getAuth()->refreshTokenWithAssertion($cred);
}
$_SESSION['service_token'] = $client->getAccessToken();


$result = $service->data_ga->get(
       'ga:AAA',
       '2015-03-03',
       '2015-03-03',
       'ga:sessions');

?>

where AAA is my ViewID. So, my problem is this: When I access this script on server it says

*"Fatal error: Uncaught exception 'Google_Service_Exception' with message 'Error calling GET https://www.googleapis.com/analytics/v3/data/ga?ids=ga%3A91249839&start-date=2015-03-03&end-date=2015-03-03&metrics=ga%3Asessions: (403) User does not have any Google Analytics account.' in C:\xampp\htdocs\test\assets\src\Google\Http\REST.php:110 Stack trace:

0 C:\xampp\htdocs\test\assets\src\Google\Http\REST.php(62): Google_Http_REST::decodeHttpResponse(Object(Google_Http_Request),

Object(Google_Client)) #1 [internal function]: Google_Http_REST::doExecute(Object(Google_Client), Object(Google_Http_Request)) #2 C:\xampp\htdocs\test\assets\src\Google\Task\Runner.php(174): call_user_func_array(Array, Array) #3 C:\xampp\htdocs\test\assets\src\Google\Http\REST.php(46): Google_Task_Runner->run() #4 C:\xampp\htdocs\test\assets\src\Google\Client.php(590): Google_Http_REST::execute(Object(Google_Client), Object(Google_Http_Request)) #5 C:\xampp\htdocs\test\assets\src\Google\Service\Resource.php(231): Google_Client->execute(Object(Google_Htt in C:\xampp\htdocs\test\assets\src\Google\Http\REST.php on line 110"*

Any suggestions?

Thank you in advance!

Regards, golobich

Edit: I've tried Google Books api and auth is working ok. (I've changed that link in $cred ofcourse.

Upvotes: 1

Views: 1892

Answers (1)

Linda Lawton - DaImTo
Linda Lawton - DaImTo

Reputation: 116948

The key error is this:

(403) User does not have any Google Analytics account

You are logging in with a service account. You need to grant the service account access to your Google analytics account.

Solution:

Go to the google analytics website. On the admin section add a new user using the service account email address, at the ACCOUNT LEVEL it must be the ACCOUNT LEVEL give this new user read access only that's all it really needs.

Then try your script again.

Upvotes: 1

Related Questions