2017-02-07 3 views
1

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

How do I authorise an app (web or installed) without user intervention? (canonical ?)

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

http://ben.akrin.com/?p=2080

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

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

 
\t  // no previous access token, let's get one 
 
\t  if($verbose) { echo "> getting new one<br />" ; } 
 

 
\t  $ch = curl_init(); 
 
\t  curl_setopt($ch, CURLOPT_URL, "https://accounts.google.com/o/oauth2/token") ; 
 
\t  curl_setopt($ch, CURLOPT_PORT , 443) ; 
 
\t \t curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false) ; 
 
\t  curl_setopt($ch, CURLOPT_POST, 1) ; \t  
 
\t  curl_setopt($ch, CURLOPT_POSTFIELDS, "client_id={$client_id}&client_secret={$client_secret}&refresh_token={$refresh_token}&grant_type=refresh_token") ; 
 
\t  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1) ; 
 
\t  curl_setopt($ch, CURLOPT_HEADER, true) ; 
 
\t  curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded")) ; 
 
\t \t 
 
\t \t echo "Curl error: " . curl_error($ch) . "<br />"; 
 

 
\t  $response = curl_exec($ch) ; 
 
\t  $response = parse_response($response) ; 
 

 
\t  // todo: make sure that we got a valid response before retrieving the access token from it 
 

 
\t  $access_token = json_decode($response["body"]) ; 
 
\t  $access_token = $access_token->access_token ; 
 
\t  file_put_contents($token_filename, $access_token) ; 
 
\t } else { 
 

 
\t \t // we already have something cached, with some luck it's still valid 
 
\t  $access_token = file_get_contents($token_filename) ; 
 
\t  if($verbose) { echo "> from cache<br />" ; } 
 
\t } 
 

 
\t if($access_token=="") { 
 
\t \t echo "ERROR: problems getting an access token<br />" ; 
 
\t \t exit(1) ; 
 
\t } 
 

 
    return $access_token ; 
 
} 
 

 
?>

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

ответ

2

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

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

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

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

+0

Да, я полностью согласен с вами, но моя проблема в том, что он не позволяет мне запускать этот API, мои файлы не поступают на мой Google Диск, как и раньше. Может ли Google сделать какие-то блокировки для моего домена или что-то еще? Я даже изменил все данные на другой аккаунт, и даже тогда проблема продолжалась. –

+1

Вам нужно будет объяснить, что «это не позволяет мне запускать этот API», а также «мои файлы не поступают на мой Google Диск, как и раньше». Возможно, опубликуйте отдельный вопрос, показывающий любые сообщения об ошибках, трассировки http и т. Д. – pinoyyid

+0

Я не знаю, как объяснить это очень хорошо, но он выполнил загрузку, как правило, эти файлы были отображены на Google Диске, теперь они больше не отображаются, поскольку возникает ошибка при отправке файла с помощью этого API. Я использую ваш метод, чтобы получить TOKEN и заполнить его в переменных, которые находятся в этом коде ben.akrin.com/?p=2080. Для каждых действий выполняются возвращает сообщение, в моем случае, это сообщение: > Тип мима обнаружены: изображение/JPEG > получение маркеров доступа > из кэша ERROR: проблемы получения доступа токенов –

Смежные вопросы