当前位置: 首页 > 知识库问答 >
问题:

无法通过php和google apiclient alpha 2.0.0连接Google服务帐户

张炳
2023-03-14

我在通过作曲家安装的谷歌 apiclient 2.0.0 连接时遇到问题。

以下是我到目前为止所做的:

我通过作曲家安装了蜜蜂。

我去https://console.cloud.google.com/apis/credentials?my-project导航到API管理器

我为服务帐户创建了凭据并下载了json。然后我将json上传到我的服务器。

我通过管理我的服务帐户为该帐户启用了域范围委托。

我在“域名验证”标签下验证了我的域名。

接下来,我导航到我的日历,并与与我的服务帐户关联的电子邮件地址共享日历,从而授予管理访问权限。

然后,我与服务帐户的电子邮件地址共享了我的日历。

现在我正在尝试使用api进行连接并遇到授权问题。

$json_file = '/path/to/service-account-credentials.json';
$scopes = [ 
    Google_Service_Calendar::CALENDAR,
    Google_Service_Calendar::CALENDAR_READONLY
];

// create a new client and authorize
$client = new Google_Client();

// set the basic information of the client
$client->setApplicationName("Apointments");
$client->setSubject( email-address-to-masquerade-as@mycompany.com );
$client->setAccessType('offline');

// load the json credential file
$client->setAuthConfig( $json_file );
$client->setScopes( $scopes );

// check to see if the token is stored in the session
if( isset( $_SESSION['service_token'] ) ) 
{
    // token was stored, use it with the cilent
    $client->setAccessToken( $_SESSION['service_token'] );
}

// test the authorization to see if it is expired
if( $client->isAccessTokenExpired() ) 
{
    // Failed authorization, get a new token
    $client->refreshTokenWithAssertion();
}
// store the token in the session
$_SESSION['service_token'] = $client->getAccessToken();

从堆栈跟踪中,我已经确定了有问题的代码行是:

    $client->refreshTokenWithAssertion();

这会产生错误消息

客户端错误响应[URL]https://www.googleapis.com/oauth2/v4/token[状态代码]401[原因短语]未经授权

知道我哪里出错了吗?

先谢谢你亚当

共有1个答案

钱朝明
2023-03-14

您使用服务帐户的方式仅对访问与您的应用程序或服务帐户本身相关的数据有效。由于您希望访问 Google 日历数据,因此您必须是 Google Apps 网域管理员,并且有权访问您网域用户的任何数据。Google日历数据属于用户,因此您需要指定您尝试访问的用户。

您需要对用户进行身份验证,需要获取访问令牌并传递该令牌。如果您正在获取访问令牌,您可以调用令牌信息传递访问令牌以获取有关用户与之关联的更多信息。

这里有一个快速入门演示应用程序,请参考:https://developers.google.com//web/samples/php

 类似资料:
  • 我的入口pod无法通过IP访问两个集群IP服务。有很多其他集群IP服务它没有到达困难。包括在同一个命名空间中。另一个pod到达服务没有问题(我在同一个命名空间中尝试了默认后端,一切正常)。 我应该去哪里?以下是我的实际服务,它无法到达第一个,但可以到达第二个: 我的入口吊舱:

  • 据我所知,我的服务器运行正常,因为我(仅在我自己的计算机上)可以连接到服务器。 当我试图让任何其他计算机连接到它,它从来没有连接,我感到茫然和需要想法。 我使用谷歌chrome连接,就像我之前说的,它工作很好,但只在我的电脑上

  • 我一直在寻找一个解决办法,但没有找到一个有效的解决办法。 我已经在我的MacBook中使用brew安装了postgres(),并且我目前正在使用brew服务运行它(将postgres显示为正在运行的服务)。但是,当我尝试运行时,我得到以下错误。 PSQL:无法连接到服务器:没有这样的文件或目录是本地运行并接受Unix域套接字“/tmp/.s.pgsql.5432”上的连接的服务器吗? 有人已经解决

  • 问题内容: 上传或提交页面时,我的网站上出现以下错误: mysql_real_escape_string()[function.mysql-real-escape- string]:无法通过套接字’/var/lib/mysql/mysql.sock’连接到本地MySQL服务器(2) 这到底是什么意思? 问题答案: 由于对该错误的调用引发了错误,因此它意味着您没有先调用该错误并将有效的数据库句柄传递

  • 这是mysql连接php脚本。它不断地显示出它的错误 警告:mysqli_connect():(HY000/1045):用户'user'@'localhost'(使用密码:YES)在第6行的C:\xampp\htdocs\index.php访问被拒绝 注意:尝试在第7行连接成功的C:\xampp\htdocs\index.php中获取非对象的属性 我听不懂,请帮帮我好吗?

  • 问题内容: 我想在ssh上建立到我的mysql服务器的ssh隧道。 理想情况下,就像我直接连接一样,我将返回一个mysqli db指针。 我在没有SSH2库的共享主机上,但是我可以使用PECL在本地安装它们。 如果有一种方法可以使用本机命令,那就更好了。 我当时在想类似的东西,但是如果没有这些库,它将无法正常工作。 谁有想法?我正在liquidweb上运行共享的CentOS linux主机。 关于