Задать вопрос
@Pyhon3x

Google OAuth2.0 возвращает invalid_grant?

Вот мой код:
<?php
if (!empty($_GET['code'])) {
	// Отправляем код для получения токена (POST-запрос).
  $params = array(
		'client_id'     => '782016323201-ktsn3*****oogleusercontent.com',
		'client_secret' => 'nbaAc****TIaCpo',
		'redirect_uri'  => 'https://test-server.tsecret.net/AUTH-2/redirect.php',
		'grant_type'    => 'authorization_code',
		'code'          => $_GET['code'],
    'access_type'   => 'offline'
	);
  var_dump($params);

	$ch = curl_init('https://accounts.google.com/o/oauth2/token');
  var_dump($ch);
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_HEADER, false);
	$data = curl_exec($ch);
	curl_close($ch);

	$data = json_decode($data, true);
  var_dump($data);
	if (!empty($data['access_token'])) {
		// Токен получили, получаем данные пользователя.
		$params = array(
			'access_token' => $data['access_token'],
			'id_token'     => $data['id_token'],
			'token_type'   => 'Bearer',
			'expires_in'   => 3599
		);

		$info = file_get_contents('https://www.googleapis.com/oauth2/v1/userinfo?' . urldecode(http_build_query($params)));
		$info = json_decode($info, true);
		print_r($info);
	}
}


После такого я получаю ошибку, как исправить?
P.S.
Да, в Google я искал. Как исправить не нашел
  • Вопрос задан
  • 696 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
Spartak-2205
@Spartak-2205
Разработка и создание сайтов
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

Замените на
curl_setopt($ch, CURLOPT_POSTFIELDS, urldecode(http_build_query($params)));


И это
$params = array(
      'access_token' => $data['access_token'],
      'id_token'     => $data['id_token'],
      'token_type'   => 'Bearer',
      'expires_in'   => 3599
    );

На это
$params = array('access_token' => $data['access_token']);

* (для получения инфы о юзере нужен только токен)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы