Загрузить файл через PHP на Google Диск с помощью API без экрана согласия

Следуя инструкциям в этом уроке, я смог загрузить файл на свой Google Дисковод через API, приоритет – загрузить его без подтверждения пользователем согласия.

Как мне разрешить приложение (веб-сайт или установленное) без вмешательства пользователя? (канонический?)

Тем не менее, я заметил, что токен обновления необходимо обновлять каждый раз, и по этой причине я искал другое решение для отправки файлов без экрана согласия, отправляемого пользователю.

Google drive API file upload script

В первые часы все прошло хорошо, однако теперь он не возвращает TOKEN и, следовательно, больше не переносит загрузку.

<?php function get_access_token( $force_refresh=false ) { global $client_id, $client_secret, $refresh_token, $verbose ; if( $verbose ) { echo "> retrieving access token<br />" ; } $token_filename = "/tmp/access_token_" . md5( $client_id . $client_secret . $refresh_token ) ; $access_token = "" ; if( !file_exists($token_filename) || $force_refresh===true ) { // no previous access token, let's get one if( $verbose ) { echo "> getting new one<br />" ; } $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, "https://accounts.google.com/o/oauth2/token" ) ; curl_setopt( $ch, CURLOPT_PORT , 443 ) ; curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ) ; curl_setopt( $ch, CURLOPT_POST, 1 ) ; curl_setopt( $ch, CURLOPT_POSTFIELDS, "client_id={$client_id}&client_secret={$client_secret}&refresh_token={$refresh_token}&grant_type=refresh_token" ) ; curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ) ; curl_setopt( $ch, CURLOPT_HEADER, true ) ; curl_setopt( $ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded") ) ; echo "Curl error: " . curl_error($ch) . "<br />"; $response = curl_exec( $ch ) ; $response = parse_response( $response ) ; // todo: make sure that we got a valid response before retrieving the access token from it $access_token = json_decode( $response["body"] ) ; $access_token = $access_token->access_token ; file_put_contents( $token_filename, $access_token ) ; } else { // we already have something cached, with some luck it's still valid $access_token = file_get_contents( $token_filename ) ; if( $verbose ) { echo "> from cache<br />" ; } } if( $access_token=="" ) { echo "ERROR: problems getting an access token<br />" ; exit( 1 ) ; } return $access_token ; } ?> 

Возможно ли интегрировать мое приложение с Google Диском без экрана согласия и без необходимости постоянно обновлять этот TOKEN?

Я написал ответ, на который вы ссылались.

Вы неправильно поняли, что такое токен обновления. После того, как у вас есть токен обновления, вы должны безопасно хранить его и повторно использовать, когда хотите токен доступа. Ток обновления не истекает – как правило, нет, см. Ниже. Поэтому, когда вы говорите: «Я заметил, что токен обновления нужно обновлять каждый раз», это неверно.

Обычно вы получаете только токен обновления при первом запросе. Последующие запросы возвращают нуль. Пользователь должен будет отозвать авторизацию и повторить авторизацию, чтобы получить еще один токен. Но опять же, вы должны сохранить первый токен обновления, который вы получаете и повторно используете, на неопределенный срок.

При истечении токенов обновления … В то время как токен обновления очень долгое время, они иногда истекли Google. Одна из ситуаций (я полагаю, по слухам) заключается в том, что токены могут быть истекли, если пользователь меняет свой пароль. Это имеет смысл, поскольку сохраненный токен обновления примерно аналогичен сохраненному имени пользователя / паролю. Я также видел, что токены истекают без видимой причины, через 6 месяцев после создания.