2

To upload files to Google Drive using service account, I have written the following code which is from this link: https://developers.google.com/drive/web/service-accounts

My code:

 require_once "google-api-php-client/src/Google_Client.php";
 require_once "google-api-php-client/src/contrib/Google_DriveService.php";
 require_once "google-api-php-client/src/contrib/Google_Oauth2Service.php";

 session_start();

 $DRIVE_SCOPE = 'https://www.googleapis.com/auth/drive';
 $SERVICE_ACCOUNT_EMAIL = '<some-id>@developer.gserviceaccount.com';
 $SERVICE_ACCOUNT_PKCS12_FILE_PATH = '/path/to/<public_key_fingerprint>-privatekey.p12';

/**
 * Build and returns a Drive service object authorized with the service accounts.
 *
 * @return Google_DriveService service object.
 */
 function buildService() {
  $key = file_get_contents($SERVICE_ACCOUNT_PKCS12_FILE_PATH);
  $auth = new Google_AssertionCredentials(
      SERVICE_ACCOUNT_EMAIL,
      array(DRIVE_SCOPE),
      $key);
  $client = new Google_Client();
  $client->setUseObjects(true);
  $client->setAssertionCredentials($auth);
  return new Google_DriveService($client);
 }

 function uploadFile($service, $mime, $src) {
    //Insert a file
    $file = new Google_DriveFile();
    $file->setMimeType($mime);
    $data = file_get_contents($src);

    try {
    //ERROR HERE: cannot insert (upload) file
        $createdFile = $service->files->insert($file,
            array(
                'data' => $data,
                'mimeType' => $mime,
                'convert' => true,
            )
        );

        return $createdFile;    
    } catch (Exception $e) {
        print "An error occurred: " . $e->getMessage();
    }   
 }

 $service = buildService();

When I call the buildService() method, it gives me an error:

Catchable fatal error: Object of class Google_AssertionCredentials could not be converted to string in /opt/lampp/htdocs/ajaxGoogleDrive/google-api-php-client/src/auth/Google_OAuth2.php on line 197

Where am I going wrong?

Pang
  • 9,564
  • 146
  • 81
  • 122
  • I had similair problem. When you use service account, it creates it own google drive for that account. What you need to do is SHARE that folder with service account email. Simply put: share folder with service account, and give it permission to edit. – Ing. Michal Hudak Oct 01 '14 at 10:17

0 Answers0