Я написал скрипт, который успешно запрашивает у Google токен доступа с помощью PHP SDK.
Мой код,
require_once('_/libs/google/apiclient/autoload.php');
$client_id = '<MY_ID>';
$client_secret = '<MY_SECRET>';
$redirect_uri = '<REDIRECT_URL>';
// Config my apps information
$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
$client->addScope("https://mail.google.com/");
// When google redirects with code swap for access token
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
<------------- Try to get both tokens ----------------->
$_SESSION['access_token'] = $client->getAccessToken();
$_SESSION['refresh_token'] = $client->getRefreshToken();$redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
}
Как только я получаю код аутентификации, как показано выше, и запрашиваю токен доступа через getAccessToken();
возвращается со временем создания и истечения.
Однако, когда я запрашиваю токен обновления через getRefreshToken();
ничего не возвращает при выводе на экран.
Был задан похожий вопрос Вот
Кажется, проблема в том, что Google сообщает, что вам нужен автономный доступ, однако ответы на этот вопрос нельзя перенести в PHP SDK.
Хотя я использовал JavaScript, я только что прошел через ту же самую проблему. Я решил это, добавив параметр redirect_uri к начальному вызову запроса токена.
Вот мой так пост и мое решение: Google API — поток аутентификации Oauth 2.0
Чтобы прояснить процесс, чтобы получить токен обновления, вам нужно сделать запрос на получение «кода» от Google (таким образом, мой параметр 'response_type': 'code'
), а затем вы делаете еще один вызов с этим кодом, чтобы получить токен доступа и обновить токен.
Других решений пока нет …