Search code examples
phpgoogle-client

Google API PHP simple-query example insufficient permission


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.


Solution

  • 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