1

I have downloaded Google APIs Library Client for PHP and am now trying to make a connection with OAuth. However, with the following code in service-account.php:

<?php
/*
 * Copyright 2013 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
session_start();
include_once "templates/base.php";

/************************************************
  Make an API request authenticated with a service
  account.
 ************************************************/
set_include_path("../src/" . PATH_SEPARATOR . get_include_path());
require_once 'Google/Client.php';
require_once 'Google/Service/Books.php';

/************************************************
  ATTENTION: Fill in these values! You can get
  them by creating a new Service Account in the
  API console. Be sure to store the key file
  somewhere you can get to it - though in real
  operations you'd want to make sure it wasn't
  accessible from the webserver!
  The name is the email address value provided
  as part of the service account (not your
  address!)
  Make sure the Books API is enabled on this
  account as well, or the call will fail.
 ************************************************/
$client_id = 'CLIENT-ID-GENERATED-FROM-GOOGLE-DEVELOPERS-CONSOLE.apps.googleusercontent.com';
$service_account_name = 'test';
$key_file_location = 'PRIVATE-KEY-FROM-GOOGLE-DEVELOPERS-CONSOLE-privatekey.p12';

echo pageHeader("Service Account Access");
if ($client_id == '<YOUR_CLIENT_ID>'
    || !strlen($service_account_name)
    || !strlen($key_file_location)) {
  echo missingServiceAccountDetailsWarning();
}

$client = new Google_Client();
$client->setApplicationName("Client_Library_Examples");
$service = new Google_Service_Books($client);

/************************************************
  If we have an access token, we can carry on.
  Otherwise, we'll get one with the help of an
  assertion credential. In other examples the list
  of scopes was managed by the Client, but here
  we have to list them manually. We also supply
  the service account
 ************************************************/
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();

/************************************************
  We're just going to make the same call as in the
  simple query as an example.
 ************************************************/
$optParams = array('filter' => 'free-ebooks');
$results = $service->volumes->listVolumes('Henry David Thoreau', $optParams);
echo "<h3>Results Of Call:</h3>";
foreach ($results as $item) {
  echo $item['volumeInfo']['title'], "<br /> \n";
}

echo pageFooter(__FILE__);

I get this error:

Fatal error: Uncaught exception 'Google_Auth_Exception' with message 'Error refreshing the OAuth2 token, message: '{ "error" : "invalid_grant" }'' in /home/texterx1/public_html/google-api-php-client-master/src/Google/Auth/OAuth2.php:327 Stack trace: #0 /home/texterx1/public_html/google-api-php-client-master/src/Google/Auth/OAuth2.php(289): Google_Auth_OAuth2->refreshTokenRequest(Array) #1 /home/texterx1/public_html/google-api-php-client-master/examples/service-account.php(75): Google_Auth_OAuth2->refreshTokenWithAssertion(Object(Google_Auth_AssertionCredentials)) #2 {main} thrown in /home/texterx1/public_html/google-api-php-client-master/src/Google/Auth/OAuth2.php on line 327

What am I doing wrong?

Suspicion

One suspicion I have is that I have copy/pasted the wrong values to $client_id, $service_account_name and $key_file_location. I got $client_id from the field Service account Client ID, $service_account_name I took from Consent screen > product name and $key_file_location from the file name on the .p12 file downloaded to my PC when I clicked to generate a new key below Service Account. I opened the .p12 file on my computer first and followed the guide which did something like importing certificate (not sure if I were supposed to do that).

Community
  • 1
  • 1
user3026192
  • 107
  • 7
  • @Dagon and that answer is exactly correct. – Ohgodwhy May 15 '14 at 02:16
  • @Dagon If I run something like `` I get the same result both on server and locally. Does this mean that the question you linked to won't help me? – user3026192 May 15 '14 at 02:16
  • @Dagon also, in the question you linked to, OP states that the problem never got solved on server, which is where I want it to work too. – user3026192 May 15 '14 at 02:18
  • while i use OAuth2 i have never had this problem, so all i can do is search and point –  May 15 '14 at 02:18
  • @Dagon OK, did you need to do anything manually to refresh the OAuth token, or did you just copy/paste Client-ID and such straight from Google Developers Console and that's it? – user3026192 May 15 '14 at 02:21
  • @Dagon Perhaps the error I get is because I didn't copy/paste the correct values? On `$client_id` I pasted service account client id, on key file location i first opened the key on my computer and then uploaded to the same folder as *service-account.php*, and on `$service_account_name` I wrote 'test' because that's what it says on consent screen > product name (perhaps the last one I got totally wrong?) – user3026192 May 15 '14 at 02:21
  • @Dagon or do you think there could be something else causing the error? – user3026192 May 15 '14 at 02:55

0 Answers0