简体   繁体   中英

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM