2017-10-18 74 views
0

這讓我非常頭痛。 我有一個Web應用程序和一個關聯的Google帳戶。我希望網絡應用程序只使用這個Google驅動器和這個谷歌驅動器......永久性的。PHP和Google Drive身份驗證令人沮喪

我使用google/apiclient:^ 2.0 我已經設置了一個OAuth 2.0客戶端ID並下載了JSON文件。

我有這樣的:

$this->client = new \Google_Client(); 
$this->client->setClientId('blahblahblah.apps.googleusercontent.com'); 
$this->client->setAuthConfig(base_path() . '/resources/assets/client_secret.json'); 
$this->client->setApplicationName('My Web App'); 
$this->client->setRedirectUri('somewhere'); 
$this->client->setScopes('https://www.googleapis.com/auth/drive'); 
return $this->client; 

現在,當我跑...

$authUrl = $this->client->createAuthUrl(); 
echo '<a href="'.$authUrl.'">Go</a>'; 

和驗證我得到一個代碼...

現在我的問題是什麼?我是否使用該代碼?

我試過... $this->client->authenticate('code here');$accessToken = $client->fetchAccessTokenWithAuthCode('code here);

我不斷收到任何dailyLimitExceededUnregInvalid token format

我真的很困惑,沮喪與谷歌認證API和文檔似乎出路日期。

任何正確方向的提示都會很棒。

感謝

+0

查看此網址:https://developers.google。com/api-client-library/php/auth/web-app – madalinivascu

+0

請參閱https://stackoverflow.com/questions/19766912/how-do-i-authorise-an-app-web-or-installed-without-user -intervention-法服 – pinoyyid

回答

0

要獲得訪問令牌,你需要在你下面的「地方」路線:

$client->authenticate($_GET['code']); 
$access_token = $client->getAccessToken(); 

訪問令牌用於您登錄到谷歌驅動

工作與谷歌驅動器你需要實例化Google_Service_Drive

$drive = new Google_Service_Drive($client); 
$files = $drive->files->listFiles(array())->getItems(); 

注意:訪問令牌是一種用戶名+密碼,隨着時間的推移將會過期,因此如果用戶名和密碼過期,您需要提取新的密碼。

0

幾年前,我做了類似的事情,並且在文檔上遇到了一些困難。

我通過代碼爲你找到它。我用這個Gmail聯繫人列表,但程序看起來一樣。我會盡力解釋我經歷的過程,我認爲它應該可以幫助你。

這就是它所在的部分。你得到的代碼谷歌給你,只是保存在變量

if (isset($_GET['code'])) { 
    $auth_code = $_GET["code"]; 
    $_SESSION['google_code'] = $auth_code; 
} 

現在會話,你將不得不張貼到OAuth2認證,讓您的acesstoken

$auth_code = $_SESSION['google_code']; 
$max_results = 300; 
$fields=array(
    'code'=> urlencode($auth_code), 
    'client_id'=> urlencode($google_client_id), 
    'client_secret'=> urlencode($google_client_secret), 
    'redirect_uri'=> urlencode($google_redirect_uri), 
    'grant_type'=> urlencode('authorization_code') 
); 

$post = ''; 
foreach($fields as $key=>$value) 
{ 
    $post .= $key.'='.$value.'&'; 
} 

$post = rtrim($post,'&'); 
$result = curl('https://accounts.google.com/o/oauth2/token',$post); 
$response = json_decode($result); 

$accesstoken = $response->access_token; 

隨着你會令牌能夠蜷縮Google Drive的端點並獲得您的結果

$url = 'https://www.google.com/m8/feeds/contacts/default/full?max-results='.$max_results.'&alt=json&v=3.0&oauth_token='.$accesstoken; 
$xmlresponse = curl($url);