I'm trying to run the Google API PHP simple-query example from here: https://github.com/google/google-api-php-client/blob/master/examples/service-account.php My goal is to test OAuth2 and to create a server-to-server connection between my web app and a google spreadsheet that has been shared to me.
here's what I have:
$client_id = 'XXX.apps.googleusercontent.com'; //Client ID
$service_account_name = 'XXX@developer.gserviceaccount.com'; //Email Address
$key_file_location = 'C:/Users/Hp/Downloads/cMessage-638a8a247351.p12';
if ($client_id == '' || !strlen($service_account_name) || !strlen($key_file_location)) {
echo missingServiceAccountDetailsWarning();
}
$client = new Google_Client();
$client->setApplicationName("cMessage");
$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/books'), $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";
}
I try to run this and I get this:
Error calling GET https://www.googleapis.com/books/v1/volumes?q=Henry+David+Thoreau&filter=free-ebooks: (403) Insufficient Permission
I've double checked my credentials, timezone, and I have enabled Google's Books API in my developer console.
I don't know what else I am missing. Please help. Thanks.
Okay, I got it to work! Here's what I did in case anybody comes across this:
In the Google Developer's Console, under APIs & AUTH >> APIs, I had to turn on a few APIs and SDK. I'm not quite sure which made the trick though, but here are the APIs and SDKs I have turned on:
Admin SDK
BigQuery API
Books API
Debuglet Controller API
Drive API
Drive SDK
Google Apps Marketplace SDK
Google Cloud SQL
Google Cloud Storage
Google Cloud Storage JSON API
Google+ API