Php 使用访问令牌访问驱动器

Php 使用访问令牌访问驱动器,php,google-drive-api,google-sheets,google-oauth,Php,Google Drive Api,Google Sheets,Google Oauth,难以理解oauth2令牌和刷新令牌进程 我有这个密码 $url = 'https://www.googleapis.com/oauth2/v3/token'; $data = array('client_id' => 'clientid', 'client_secret' => 'secret','refresh_token' => 'token','grant_type' => 'refresh_token'); $options = array( 'h

难以理解oauth2令牌和刷新令牌进程

我有这个密码

    $url = 'https://www.googleapis.com/oauth2/v3/token';
$data = array('client_id' => 'clientid', 'client_secret' => 'secret','refresh_token' => 'token','grant_type' => 'refresh_token');
$options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'approval_prompt'=>'force',
        'access_type'=>'offline',
        'content' => http_build_query($data),
    ),
);
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);
上面的代码给了我一个访问令牌,我遵循了stackoverflower的同事pinoyyid的建议,但是,我不知道如何正确使用生成的访问令牌访问驱动器和复制文件

我看到的所有过程通常都涉及
$client=new Google\u client()
,我不知道如何使用整个帖子http://..... 所以基本上我需要弄清楚我是在一个新的google客户端实例中使用上面代码中的访问令牌,还是只是在一个url上发布一些必要的信息(我也不清楚),真的非常感谢任何帮助/澄清

编辑#1 我想要实现的是允许最终用户通过我的网页访问我的驱动器,让他们在我的驱动器中复制电子表格,并通过我的网站访问电子表格,将数据存储在电子表格上,电子表格将始终位于我的驱动器上,而不是最终用户

编辑#2

根据您的帖子,代码如下,使用服务帐户,,,文件位于我在api控制台上创建的gmail帐户a服务帐户内

<?php
require 'Google/autoload.php';
$client = new Google_Client();
// Replace this with your application name.
$client->setApplicationName("TEST");
// Replace this with the service you are using.
$service = new Google_Service_Drive($client);

// This file location should point to the private key file.
$key = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/number-privatekey.p12');
$user_to_impersonate = 'admin@testpr.com';
$cred = new Google_Auth_AssertionCredentials(
  'number@developer.gserviceaccount.com',
  array('https://www.googleapis.com/auth/drive'),  ****//this here has to be drive not drive.file
  $key,
  'notasecret',
  'http://oauth.net/grant_type/jwt/1.0/bearer',
  $user_to_impersonate
);
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired()) {
  $client->getAuth()->refreshTokenWithAssertion();
}
$originFileId = "longnumber";
$copyTitle = 'copied';
$newfile = copyFile($service, $originFileId, $copyTitle);
print_r($newfile);
function copyFile($service, $originFileId, $copyTitle) 
{
  $copiedFile = new Google_Service_Drive_DriveFile();
  $copiedFile->setTitle($copyTitle);
  try {
    return $service->files->copy($originFileId, $copiedFile);
  } catch (Exception $e) {
    print "An error occurred: " . $e->getMessage();
  }
  return NULL;
}
?>


所以,现在它开始工作了,ty all for your time伙计们真的编辑了我的帖子以反映危险的事情

如果你想让最终用户访问你的驱动器,你必须让你的应用程序有权代表你域中的用户(在本例中是你)进行API调用。为此,您必须设置一个服务帐户,并在Google开发者控制台中生成一个p12密钥。您还必须在管理控制台中输入API范围

完整的解释和示例可在此处找到:

要实现这一点,您还需要谷歌API的客户端库:(也在谷歌手册中提到)


允许用户代表您的一个帐户进行API调用的代码示例:

使用OAuth启动时的一个问题是该协议支持多种用例。例如,会话与脱机访问、服务器与客户端访问、访问用户帐户与访问应用程序帐户。在查看QuickStart和代码示例时,您必须了解足够的OAuth,以了解该示例是否正在实现您的用例,或者其他无用的不同之处。你链接的帖子专门是offline access/server app/app的帐户。这也是您的用例吗?更新您的问题以描述您希望实现的目标是值得的。更新我的问题,以更好地了解我需要什么。基本上我会在我的驱动器上有一个电子表格,最终用户会复制并重命名它,所以他会在以后向电子表格中添加信息,例如,如果最终用户被允许为某些内容创建新记录,当他同时在我的硬盘上创建一个新的电子表格来保存他的信息时,链接的答案实际上包含了你需要的所有信息。唯一缺少的是,答案描述了如何使用原始HTTP API,而您使用的是API顶部的PHP库。我从来没有使用过这个库,所以我无能为力,但是使用原始HTTP API非常简单,并且在Google Drive SDK页面上有很好的文档记录。我已经设置好了这个工具,但它不起作用,电子表格在我的驱动器上创建了不可见的结果,当我尝试使用链接访问它时,你可以在
print\r($newfile)时看到这个链接向您发送请求编辑权限,要求您登录谷歌帐户,然后发送请求权限,但该请求从未发送到我的电子邮件或任何类似的内容。这就是为什么我一直在尝试任何方法,但运气不佳,我得到了谷歌api客户端,正如您所说,我得到了服务帐户设置p12key,将要复制的电子表格已与服务帐户电子邮件(长电子邮件)共享,因此当您访问该电子表格时,您可以看到它,否则,当您按照此处所述进行连接时,您将看不到它(在我的帖子中所述的配置之后),您不必与服务帐户共享电子表格:。也没有必要请求访问或刷新令牌。我显然不明白什么,我只是做了你在这里发布的链接上的事情,一切都正常,至少看起来是这样,如果我打印了创建的\u r($文件),我会得到发送我请求访问的链接,我做错了什么?当然,伙计,我刚刚做了,如果我们和我们是指你们,能把我的债务拉到谷底