PHP和Google Drive认证失败

时间:2017-10-18 10:11:11

标签: php laravel google-drive-api

这让我很精神。 我有一个网络应用程序和一个关联的Google帐户。我希望网络应用程序只使用这个谷歌驱动器和谷歌驱动器...永久。

我正在使用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

我对Google身份验证API感到困惑和沮丧,而且文档似乎已经过时了。

任何正确方向的提示都会令人惊叹。

由于

2 个答案:

答案 0 :(得分:0)

要获取访问令牌,您需要在以下某处&#34;某处&#34;路线:

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

访问令牌用于登录您的google驱动器

要使用谷歌驱动器,您需要实例化Google_Service_Drive

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

注意:访问令牌是用户+密码的一种形式,随着时间的推移而过期,因此如果它们过期,您需要获取新的

答案 1 :(得分:0)

几年前我做过这样的事情,并且在文档方面遇到了一些困难。

我通过代码为您找到它。我将此用于Gmail联系人列表,但程序看起来相同。我将尝试解释我经历的过程,我认为它应该帮助你。

这就是你所在的部分。您可以获得Google发送给您的代码,并将其保存在会话变量

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云端硬盘的终端并获得结果

$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);