0

Here is my code:

<?php
error_reporting(E_ALL); ini_set('display_errors', '1');
include_once __DIR__ . '/vendor/autoload.php';
include_once "templates/base.php";

echo pageHeader("File Upload - Uploading a simple file");

/*************************************************
 * Ensure you've downloaded your oauth credentials
 ************************************************/
if (!$oauth_credentials = getOAuthCredentialsFile()) {
  echo missingOAuth2CredentialsWarning();
  return;
}

/************************************************
 * The redirect URI is to the current page, e.g:
 * http://localhost:8080/simple-file-upload.php
 ************************************************/
$redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];

$client = new Google_Client();
$client->setAuthConfig($oauth_credentials);
$client->setRedirectUri($redirect_uri);
$client->addScope("https://www.googleapis.com/auth/drive");
$service = new Google_Service_Drive($client);

// add "?logout" to the URL to remove a token from the session
if (isset($_REQUEST['logout'])) {
  unset($_SESSION['upload_token']);
}

/************************************************
 * If we have a code back from the OAuth 2.0 flow,
 * we need to exchange that with the
 * Google_Client::fetchAccessTokenWithAuthCode()
 * function. We store the resultant access token
 * bundle in the session, and redirect to ourself.
 ************************************************/
if ($client->isAccessTokenExpired()) {
    echo "test";
    $refresh = $client->getRefreshToken();
}
if (isset($_GET['code'])) {
  $token = $client->fetchAccessTokenWithAuthCode($_GET['code']);
  $client->setAccessToken($token);

  // store in the session also
  $_SESSION['upload_token'] = $token;

  // redirect back to the example
  header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}

// set the access token as part of the client
if (!empty($_SESSION['upload_token'])) {
  $client->setAccessToken($_SESSION['upload_token']);
  if ($client->isAccessTokenExpired()) {
    unset($_SESSION['upload_token']);
  }
} else {
  $authUrl = $client->createAuthUrl();
}

/************************************************
 * If we're signed in then lets try to upload our
 * file. For larger files, see fileupload.php.
 ************************************************/
if ($client->getAccessToken()) {
  // We'll setup an empty 1MB file to upload.
  DEFINE("TESTFILE", 'test-test-test.csv');

  // Now lets try and send the metadata as well using multipart!
  $file = new Google_Service_Drive_DriveFile();
  $file->setName("test-test-test.csv");


  $result2 = $service->files->create(
      $file,
      array(
        'data' => file_get_contents('test-test-test.csv'),
        'mimeType' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
      )
  );
}
?>

<div class="box">
<?php if (isset($authUrl)): ?>
  <div class="request">
    <a class='login' href='<?= $authUrl ?>'>Connect Me!</a>
  </div>
<?php endif ?>
<div class="shortened">
    <p>Your call was successful! Check your drive for the following files:</p>
    <ul>
      <!-- <li><a href="https://drive.google.com/open?id=<?= $result->id ?>" target="_blank"><?= $result->name ?></a></li> -->
      <li><a href="https://drive.google.com/open?id=<?= $result2->id ?>" target="_blank"><?= $result2->name ?></a></li>
    </ul>
  </div>
</div>

I've been trying to generate refresh token but couldn't do that. I have already set: 'access_type' => 'offile', 'approval_prompt' => 'force',

but still not able to fix the issue. Please help. I need to implement it in magento extension.

Linda Lawton - DaImTo
  • 106,405
  • 32
  • 180
  • 449
Manish Joy
  • 476
  • 3
  • 17
  • Can you try removing the app from [connected apps](https://myaccount.google.com/permissions) clear cookies and then try again. – Morfinismo Jan 20 '17 at 16:29

1 Answers1

0

Please see Using OAuth 2.0 for Web Server Applications for a more detailed information.

You may want to check and make sure that you have the required credentials that identify the application to the OAuth 2.0 server.

Here are the steps on how to obtain application credentials for your project:

  1. Open the Credentials page in the API Console.
  2. If you haven't done so already, create your OAuth 2.0 credentials by clicking Create new Client ID under the OAuth heading. Next, look for your application's client ID and client secret in the relevant table.
  3. You can also create and edit redirect URIs from this page, by clicking a client ID. Redirect URIs are the URIs to your application's auth endpoints, which handle responses from the OAuth 2.0 server. You must change this value from the default example to the URI of your application's auth endpoint before you can use OAuth 2.0.

Download the client_secrets.json file and securely store it in a location that only your application can access.

Please also check how to handle the OAuth 2.0 server response.

In addition to that, suggested solution in this related SO post might also help. The given code shows how to authenticate and upload a test file.

Community
  • 1
  • 1
Teyam
  • 7,686
  • 3
  • 15
  • 22