2011-11-30 134 views

回答

2

Google OAuth2 API有改变 - 这里是你如何获取时下用户信息:

<?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. 获取网络客户端ID和秘密在Google API console
  2. 授权的https://example.com/myapp/在同一个地方

您可以在Youtube GitHub找到官方的例子。