0
votes
<?php 
   require_once __DIR__ . '/vendor/autoload.php';
   date_default_timezone_set('America/Los_Angeles');

   define('APPLICATION_NAME', 'Google Sheets API PHP Quickstart');
   define('CREDENTIALS_PATH', 'token.json');
   define('CLIENT_SECRET_PATH', __DIR__ . '/client_secret.json');
   define('SHEET_ID', '1Ygd6cEvi0tcGa3GF11hUIZfomh0Ms9r1mZN-MfcqruE');
   define('SCOPES', implode(' ', array(
    Google_Service_Sheets::SPREADSHEETS)
   ));

   function getClient() {
    $client = new Google_Client();
    $client->setApplicationName(APPLICATION_NAME);
    $client->setScopes(SCOPES);
    $client->setAuthConfig(CLIENT_SECRET_PATH);
    $client->setAccessType('offline');
    $credentialsPath = expandHomeDirectory(CREDENTIALS_PATH);
    if (file_exists($credentialsPath)) {
      $accessToken = json_decode(file_get_contents($credentialsPath), true);
    } else {
    $authUrl = $client->createAuthUrl();
    printf("Open the following link in your browser:\n%s\n", $authUrl);
    print 'Enter verification code: ';
    $authCode = trim(fgets(STDIN));
    $accessToken = $client->fetchAccessTokenWithAuthCode($authCode);
    if(!file_exists(dirname($credentialsPath))) {
     mkdir(dirname($credentialsPath), 0700, true);
    }
    file_put_contents($credentialsPath, json_encode($accessToken));
    printf("Credentials saved to %s\n", $credentialsPath);
  }
  $client->setAccessToken($accessToken);
  if ($client->isAccessTokenExpired()) {
    $refreshToken = $client->getRefreshToken();
    $client->refreshToken($refreshToken);
    $newAccessToken = $client->getAccessToken();
    $newAccessToken['refresh_token'] = $refreshToken;
    file_put_contents($credentialsPath, json_encode($newAccessToken));
  }
  return $client;
 }

 function expandHomeDirectory($path) {
  $homeDirectory = getenv('HOME');
  if (empty($homeDirectory)) {
   $homeDirectory = getenv('HOMEDRIVE') . getenv('HOMEPATH');
  }
  return str_replace('~', realpath($homeDirectory), $path);
 }
 $client = getClient();
 $service = new Google_Service_Sheets($client);
 $spreadsheetId = SHEET_ID;
 $range = 'Sales 3!A5:B';

 $values = array(
   array('Appended', 'Row')
 );
 $body = new Google_Service_Sheets_ValueRange(array(
  'values' => $values
 ));
 $params = array(
  'valueInputOption' => "RAW"
 );
 $result = $service->spreadsheets_values->append($spreadsheetId, $range,
  $body, $params);

I'm retreiving permission error:

Fatal error: Uncaught Google_Service_Exception: { "error": { "code": 403, "message": "Request had insufficient authentication scopes.", "errors": [ { "message": "Request had insufficient authentication scopes.", "domain": "global", "reason": "forbidden" } ], "status": "PERMISSION_DENIED" } } in C:\xampp\htdocs\dashboard-redmine.org\vendor\google\apiclient\src\Google\Http\REST.php:118 Stack trace: #0 C:\xampp\htdocs\dashboard-redmine.org\vendor\google\apiclient\src\Google\Http\REST.php(94): Google_Http_REST::decodeHttpResponse(Object(GuzzleHttp\Psr7\Response), Object(GuzzleHttp\Psr7\Request), 'Google_Service_...') #1 C:\xampp\htdocs\dashboard-redmine.org\vendor\google\apiclient\src\Google\Task\Runner.php(176): Google_Http_REST::doExecute(Object(GuzzleHttp\Client), Object(GuzzleHttp\Psr7\Request), 'Google_Service_...') #2 C:\xampp\htdocs\dashboard-redmine.org\vendor\google\apiclient\src\Google\Http\REST.php(58): Google_Task_Runner->run() #3 C:\xampp\htdocs\dashboa in C:\xampp\htdocs\dashboard-redmine.org\vendor\google\apiclient\src\Google\Http\REST.php on line 118

But when I'm using get method It's working correctly and in panel it's working correct too: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/append?apix=true

1

1 Answers

0
votes

To guide you better, check the process you have done and haven't done yet.

1st thing to come first, enable the sheets api to the developer console. Then, you can check the scopes and process of authorization in the documentation if you think you missed something along the way.

Lastly, try to revoke the user save previously from /Users/yourUserName/.credentials/sheets.googleapis.com-projectName/* and re execute again to get a new credentials.