Carica file su Google Drive utilizzando il token di accesso, quale ambito di authentication è richiesto?

Sto cercando di caricare un file su Google Drive con PHP.

Per il codice di authorization, sto usando i seguenti ambiti:

https://www.googleapis.com/auth/drive https://docs.google.com/feeds/ https://docs.googleusercontent.com/ https://spreadsheets.google.com/feeds/ 

Ho già ricevuto un refresh_token valido e sono in grado di usarlo per recuperare un nuovo access_token each volta che desidero.

Ora il problema è quando sto provando a eseguire il caricamento usando questo access_token ( non è estemporaneo, e non è ancora usato ) dice:

 stdClass Object ( [error] => stdClass Object ( [errors] => Array ( [0] => stdClass Object ( [domain] => global [reason] => required [message] => Login Required [locationType] => header [location] => Authorization ) ) [code] => 401 [message] => Login Required ) ) 

Sto usando curl con la seguente intestazione:

 Array ( [0] => Content-Type: text/plain [1] => Content-Length: 503242 [2] => Authorization: Bearer ya29.AHES6ZRWXZkZDDi6AFV9PK2QonHp93nIfJbYqipXFT1uCsg [3] => GData-Version: 3.0 ) 

E seguente URL:

 https://www.googleapis.com/upload/drive/v2/files?uploadType=media 

Il command CURL è come:

 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADERS, $headers); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents($file)); $return = curl_exec($ch); curl_close($ch); 

Qualsiasi aiuto sarà apprezzato da tutti … Grazie in anticipo …

L'unico ambito OAuth necessario per caricare un file su Drive è https://www.googleapis.com/auth/drive.file .

Per tutti gli ambiti possibili, consultare la documentazione: https://developers.google.com/drive/scopes

A proposito, l'API di Drive non è basata su GData, quindi non è necessario aggiungere l'intestazione di GData-Version alle tue richieste.

Ti consiglio anche di confrontare le tue richieste con quelle inviate dal Playground OAuth 2.0 in modo che sia facile individuare l'errore:

https://developers.google.com/oauthplayground/

Prova a utilizzare il seguente ambito: https://www.googleapis.com/auth/drive.file

Verificare inoltre di aver seguito attentamente i passaggi forniti nella documentazione

https://developers.google.com/drive/about-auth

Se non vuoi usare l'arricciatura. Puoi utilizzare il metodo di inserimento di Googlephpclientlibarary per l'inserimento dei file.

Altrimenti confronta la richiesta con OauthPlayground come menzionato da Claudio

CURLOPT_HTTPHEADER, non CURLOPT_HTTPHEADERS