Загрузите файл на Google Диск с помощью токена доступа. Какая область проверки подлинности требуется?

Я пытаюсь загрузить файл на Google Диск с помощью PHP.

Для кода авторизации я использую следующие области:

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

Я уже получил действительный refresh_token , и я могу использовать его для получения нового access_token любое время.

Теперь проблема заключается в том, что когда я пытаюсь выполнить загрузку с помощью этого access_token ( он не выражен и еще не используется ), он говорит:

 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 ) ) 

Я использую curl со следующим заголовком:

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

И следующий URL:

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

Команда CURL выглядит так:

 $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); 

Любая помощь будет сердечно оценена … Спасибо заранее …

Единственной областью OAuth, которую необходимо загрузить на диск, является https://www.googleapis.com/auth/drive.file .

Для всех возможных областей применения проверьте документацию: https://developers.google.com/drive/scopes

Кстати, API-интерфейс Drive не основан на GData, поэтому вам не нужно добавлять заголовок GData-Version в свои запросы.

Я также рекомендую вам сравнить ваши запросы с отправленными на OAuth 2.0 Playground, чтобы было легко обнаружить ошибку:

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

Попробуйте использовать следующую область: https://www.googleapis.com/auth/drive.file

Также убедитесь, что вы прошли через шаги, указанные в документации, тщательно

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

Если вы не хотите использовать curl.You можете использовать метод вставки Googlephpclientlibarary для вставки файлов.

В противном случае сравните запрос с OauthPlayground, как упомянуто Claudio

CURLOPT_HTTPHEADER, а не CURLOPT_HTTPHEADERS