3

工作在與谷歌,使用PHP 庫V2,OAuth 2.0用戶PHP:谷歌加的OAuth 2.0 - 獲取錯誤獲取的OAuth2訪問令牌,消息: 'invalid_client'

經過很長時間花在它上面,我終於配置好了,它工作得很好,但之後它無法工作。在點擊登錄鏈接時,它會將用戶用於Google身份驗證。正常工作,直到認證完成。

在回調的時間GET變量:

?code=something&authuser=0&prompt=consent&session_state=something 

它產生以下錯誤:

Fatal error: Uncaught exception 'Google_AuthException' with message 'Error fetching OAuth2 access token, message: 'invalid_client'' in C:\xampp\htdocs\test\google-api-php-client\src\auth\Google_OAuth2.php:115 Stack trace: #0 C:\xampp\htdocs\test\google-api-php-client\src\Google_Client.php(127): Google_OAuth2->authenticate(Array, 4/xUGSPbXR0LNzW...') #1 C:\xampp\htdocs\test\google-api-php-client\index.php(40): Google_Client->authenticate('4/xUGSPbXR0LNzW...') #2 {main} thrown in C:\xampp\htdocs\test\google-api-php-client\src\auth\Google_OAuth2.php on line 115

使用下面的代碼(它會幫助你理解):

<?php 
ini_set('display_errors',1); 
error_reporting(E_ALL); 

require_once 'src/Google_Client.php'; 
require_once 'src/contrib/Google_PlusService.php'; 

session_start(); 

$client = new Google_Client(); 
$client->setApplicationName("Google+ PHP Starter Application"); 
$plus = new Google_PlusService($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()) { 
    $me = $plus->people->get('me'); 
    $url = filter_var($me['url'], FILTER_VALIDATE_URL); 
    $img = filter_var($me['image']['url'], FILTER_VALIDATE_URL); 
    $name = filter_var($me['displayName'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH); 
    $personMarkup = "<a rel='me' href='$url'>$name</a><div><img src='$img'></div>"; 

    $optParams = array('maxResults' => 100); 
    $activities = $plus->activities->listActivities('me', 'public', $optParams); 
    $activityMarkup = ''; 
    foreach($activities['items'] as $activity) { 
    $url = filter_var($activity['url'], FILTER_VALIDATE_URL); 
    $title = filter_var($activity['title'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH); 
    $content = filter_var($activity['object']['content'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH); 
    $activityMarkup .= "<div class='activity'><a href='$url'>$title</a><div>$content</div></div>"; 
    } 

    $_SESSION['access_token'] = $client->getAccessToken(); 
} else { 
    $authUrl = $client->createAuthUrl(); 
} 
?> 
<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <link rel='stylesheet' href='style.css' /> 
<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($activityMarkup)): ?> 
<div class="activities">Your Activities: <?php print $activityMarkup ?></div> 
<?php endif ?> 

<?php 
    if(isset($authUrl)) { 
    print "<a class='login' id='g_pop' href='$authUrl'>Connect Me!</a>"; 
    } else { 
     print_r($me); 
    print "<a class='logout' href='?logout'>Logout</a>"; 
    } 
?> 
</div> 
</body> 
</html> 

從這裏獲取源文件:Google APIs Client Library for PHP

已經完成:

  • 客戶端ID:OK
  • 客戶祕密:OK
  • 重定向的URI:OK
  • Google+的API:ON

注:

在localhost上工作。

回答

8

有同樣的問題。通過從客戶機密中刪除額外的空間來修復它。當你從谷歌api控制檯複製它,你會得到一個額外的空間。

3

仔細檢查您的Google應用程序憑據(客戶端ID,客戶端密鑰,API密鑰)是否有效並正確傳遞給客戶端。

相關問題