本文介绍了使用服务帐户访问 Google 日历事件:{ "error";:“访问被拒绝"}.没有谷歌应用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

我想使用服务帐户访问谷歌日历.这是我的代码: 被 Google API 控制台上的正确值替换.

I would like to access google calendar using Service account. This is my code :<NUMBER> is replace by the correct value take on Google API Console.

<?php

require_once 'googleapi/Google_Client.php';
require_once 'googleapi/contrib/Google_CalendarService.php';

const CLIENT_ID = '<NUMBER>.apps.googleusercontent.com';
const SERVICE_ACCOUNT_NAME  = '<NUMBER>@developer.gserviceaccount.com';
const MY_EMAIL  = '<MY NAME>@gmail.com';
const KEY_FILE = 'privatekey.p12';

$client = new Google_Client();
$client->setClientId(CLIENT_ID);
$client->setApplicationName("<APP NAME>");

$key = file_get_contents(KEY_FILE);
$client->setAssertionCredentials(new Google_AssertionCredentials(
    SERVICE_ACCOUNT_NAME,
    array('https://www.googleapis.com/auth/calendar'),
    $key,
    'notasecret',
    'http://oauth.net/grant_type/jwt/1.0/bearer',
    MY_EMAIL)
);

$cal = new Google_CalendarService($client);
$calList = $cal->calendarList->listCalendarList();

print "<h1>Calendar List</h1><pre>" . print_r($calList, true) . "</pre>";

当我执行我的代码时,我收到:

When I execute my code, I receive:

致命错误:带有消息的未捕获异常Google_AuthException"'刷新 OAuth2 令牌时出错,消息:'{错误":"access_denied" }'' 在/home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/auth/Google_OAuth2.php:279堆栈跟踪:#0/home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/auth/Google_OAuth2.php(256):Google_OAuth2->refreshTokenRequest(Array) #1/home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/auth/Google_OAuth2.php(209):Google_OAuth2->refreshTokenWithAssertion() #2/home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/service/Google_ServiceResource.php(166):Google_OAuth2->sign(Object(Google_HttpRequest)) #3/home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/contrib/Google_CalendarService.php(154):Google_ServiceResource->__call('list', Array) #4/home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/testService.php(32):Google_CalendarListServiceResource->listCalendarList() #5 {main}扔进去/home/www/65683f67e3f0d94b14bba3c945014cda/web/intranet/googleapi/auth/Google_OAuth2.php在线 279

如果我使用以下代码更改代码:

If I change my code with :

$client->setAssertionCredentials(new Google_AssertionCredentials(
SERVICE_ACCOUNT_NAME,
array('https://www.googleapis.com/auth/calendar'),
$key));

我收到:

(403) 访问权限未配置

这里出了什么问题?

推荐答案

我有解决方案.首先是好的代码是最后的:

I have the solution.First the good code is the last:

$client->setAssertionCredentials(new Google_AssertionCredentials(
      SERVICE_ACCOUNT_NAME,
      array('https://www.googleapis.com/auth/calendar'),
      $key));

问题不是代码,而是我的谷歌帐户,我在谷歌API控制台中提到了一个Referer.擦除字段后,代码有效.

The problem is not the code, but my google account, I have mentioned a Referer in Google API Console. After erasing the field, the code works.

仅供参考,如果您想访问共享日历,请不要忘记与您的 [email protected](您的 SERVICE_ACCOUNT_NAME)共享您的日历.

For information purposes, if you would like to access shared calendars, do not forget to share your calendar with your [email protected] (your SERVICE_ACCOUNT_NAME).

有关更多信息,请参阅:

For more information, see:

https://groups.google.com/forum/?fromgroups=#!topic/google-ajax-search-api/kaKYuUstwB0/discussion

这篇关于使用服务帐户访问 Google 日历事件:{ "error";:“访问被拒绝"}.没有谷歌应用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-06 23:16