Получить Userinfo из Google OAuth 2.0 PHP API

Я пытаюсь использовать API Google Oauth для получения пользовательской информации. Он отлично работает для API Google Plus, но я пытаюсь создать резервную копию, если у пользователя нет учетной записи google plus. Процесс аутентификации верен, и я даже получаю объект $ userinfo, но как именно я могу получить доступ к свойствам. Я попробовал $ userinfo-> get (), но только возвращает идентификатор пользователя.

Я делаю что-то неправильно? Вот код, который я использую …

require_once '../../src/Google_Client.php'; require_once '../../src/contrib/Google_Oauth2Service.php'; session_start(); $client = new Google_Client(); $client->setApplicationName("Google+ PHP Starter Application"); // Visit https://code.google.com/apis/console to generate your // oauth2_client_id, oauth2_client_secret, and to register your oauth2_redirect_uri. $client->setClientId('*********************'); $client->setClientSecret('**************'); $client->setRedirectUri('***************'); $client->setDeveloperKey('**************'); $plus = new Google_Oauth2Service($client); if (isset($_REQUEST['logout'])) { unset($_SESSION['access_token']); } if (isset($_GET['code'])) { $client->authenticate($_GET['code']); $_SESSION['access_token'] = $client->getAccessToken(); header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']); } if (isset($_SESSION['access_token'])) { $client->setAccessToken($_SESSION['access_token']); } if ($client->getAccessToken()) { $userinfo = $plus->userinfo; print_r($userinfo->get()); } else { $authUrl = $client->createAuthUrl(); } ?> <!doctype html> <html> <head> <meta charset="utf-8"> <link rel='stylesheet' href='style.css' /> </head> <body> <header><h1>Google+ Sample App</h1></header> <div class="box"> <?php if(isset($personMarkup)): ?> <div class="me"><?php print $personMarkup ?></div> <?php endif ?> <?php if(isset($authUrl)) { print "<a class='login' href='$authUrl'>Connect Me!</a>"; } else { print "<a class='logout' href='?logout'>Logout</a>"; } ?> </div> </body> </html> 

Благодаря…

** РЕДАКТИРОВАТЬ * * * Отсутствует Области – Добавлено

  $client->setScopes(array('https://www.googleapis.com/auth/userinfo.email','https://www.googleapis.com/auth/userinfo.profile')); 

работает сейчас …

Related of "Получить Userinfo из Google OAuth 2.0 PHP API"

Отсутствовали области

 $client->setScopes(array('https://www.googleapis.com/auth/userinfo.email','https://www.googleapis.com/auth/userinfo.profile')); 

Сейчас работает как шарм!

Я не уверен, что это помогает, но поскольку обновлен клиент PHP API Google, я получаю userinfo таким образом:

  $oauth = new Google_Service_Oauth2($googleClient); var_dump($oauth->userinfo->get()); 

Клиентская библиотека API API Google изменилась – вот как вы извлекаете информацию о пользователе:

 <?php require_once('google-api-php-client-1.1.7/src/Google/autoload.php'); const TITLE = 'My amazing app'; const REDIRECT = 'https://example.com/myapp/'; session_start(); $client = new Google_Client(); $client->setApplicationName(TITLE); $client->setClientId('REPLACE_ME.apps.googleusercontent.com'); $client->setClientSecret('REPLACE_ME'); $client->setRedirectUri(REDIRECT); $client->setScopes(array(Google_Service_Plus::PLUS_ME)); $plus = new Google_Service_Plus($client); if (isset($_REQUEST['logout'])) { unset($_SESSION['access_token']); } if (isset($_GET['code'])) { if (strval($_SESSION['state']) !== strval($_GET['state'])) { error_log('The session state did not match.'); exit(1); } $client->authenticate($_GET['code']); $_SESSION['access_token'] = $client->getAccessToken(); header('Location: ' . REDIRECT); } if (isset($_SESSION['access_token'])) { $client->setAccessToken($_SESSION['access_token']); } if ($client->getAccessToken() && !$client->isAccessTokenExpired()) { try { $me = $plus->people->get('me'); $body = '<PRE>' . print_r($me, TRUE) . '</PRE>'; } catch (Google_Exception $e) { error_log($e); $body = htmlspecialchars($e->getMessage()); } # the access token may have been updated lazily $_SESSION['access_token'] = $client->getAccessToken(); } else { $state = mt_rand(); $client->setState($state); $_SESSION['state'] = $state; $body = sprintf('<P><A HREF="%s">Login</A></P>', $client->createAuthUrl()); } ?> <!DOCTYPE HTML> <HTML> <HEAD> <TITLE><?= TITLE ?></TITLE> </HEAD> <BODY> <?= $body ?> <P><A HREF="<?= REDIRECT ?>?logout">Logout</A></P> </BODY> </HTML> с <?php require_once('google-api-php-client-1.1.7/src/Google/autoload.php'); const TITLE = 'My amazing app'; const REDIRECT = 'https://example.com/myapp/'; session_start(); $client = new Google_Client(); $client->setApplicationName(TITLE); $client->setClientId('REPLACE_ME.apps.googleusercontent.com'); $client->setClientSecret('REPLACE_ME'); $client->setRedirectUri(REDIRECT); $client->setScopes(array(Google_Service_Plus::PLUS_ME)); $plus = new Google_Service_Plus($client); if (isset($_REQUEST['logout'])) { unset($_SESSION['access_token']); } if (isset($_GET['code'])) { if (strval($_SESSION['state']) !== strval($_GET['state'])) { error_log('The session state did not match.'); exit(1); } $client->authenticate($_GET['code']); $_SESSION['access_token'] = $client->getAccessToken(); header('Location: ' . REDIRECT); } if (isset($_SESSION['access_token'])) { $client->setAccessToken($_SESSION['access_token']); } if ($client->getAccessToken() && !$client->isAccessTokenExpired()) { try { $me = $plus->people->get('me'); $body = '<PRE>' . print_r($me, TRUE) . '</PRE>'; } catch (Google_Exception $e) { error_log($e); $body = htmlspecialchars($e->getMessage()); } # the access token may have been updated lazily $_SESSION['access_token'] = $client->getAccessToken(); } else { $state = mt_rand(); $client->setState($state); $_SESSION['state'] = $state; $body = sprintf('<P><A HREF="%s">Login</A></P>', $client->createAuthUrl()); } ?> <!DOCTYPE HTML> <HTML> <HEAD> <TITLE><?= TITLE ?></TITLE> </HEAD> <BODY> <?= $body ?> <P><A HREF="<?= REDIRECT ?>?logout">Logout</A></P> </BODY> </HTML> 

Не забудь –

  1. Получить идентификатор и секретный ключ веб-клиента в консоли Google API.
  2. Авторизовать https://example.com/myapp/ в одном месте

Вы можете найти официальные примеры на Youtube GitHub .

ОБНОВЛЕНИЕ 2017:

Вы можете добавить поля для поиска:

 const FIELDS = 'id,name,image'; $me = $plus->people->get('me', array('fields' => FIELDS));