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

时间:2016-04-27 04:11:22

标签: php google-calendar-api google-api-php-client service-accounts

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

这是我到目前为止所做的事情:

我通过作曲家安装了apiclient。

我转到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 个答案:

答案 0 :(得分:0)

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

您需要authenticate用户,需要获取访问令牌并传递它。如果您获得访问令牌,则可以调用令牌信息传递访问令牌以获取有关用户与之关联的更多信息。

这是一个快速入门演示应用,请将此作为参考:https://developers.google.com/+/web/samples/php