php – OAuth2令牌,消息:当我尝试使用OAuth(服务帐户)更新Google日历时返回“{”错误“:”access_denied“}’

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – OAuth2令牌,消息:当我尝试使用OAuth(服务帐户)更新Google日历时返回“{”错误“:”access_denied“}’脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用GOOGLE Standard Library for PHP来使用日历服务,并且我已通过Google Api控制台为OAuth 2.0身份验证设置了服务帐户类型.

我的主要目标是通过批量更新用户谷歌日历(例如:user@organisationname.com)(当用户不在线时).例如.更新用户日历中的事件.

用户登录应用程序(使用OAuth2.0)时,他/她将为应用程序提供“管理您的日历”,“查看日历”以及“在我不使用应用程序时执行这些操作”的权限

以下代码用于使用OAuth2.0登录

<?PHP
require_once '../../src/Google_Client.PHP';
require_once '../../src/contrib/Google_CalendarService.PHP';
session_start();

$client = new Google_Client();
$client->setApplicationName("Google Calendar PHP Starter Application");


$client->setClientId('XXXXX-flue2a9o5ll602ovrhaejlpm9otgjh1r.apps.googleusercontent.COM');
$client->setClientSecret('XXXXXXXXXX');
$client->setredirectUri('http://localhost/testAPI/google-api-PHP-client/examples/calendar/simple.PHP');
$client->setDeveloPErKey('aizaSyCGvXRXGMo58ZDswyb4zBkJgRMLcHBRIrI');
$cal = new Google_CalendarService($client);
if (isset($_GET['logout'])) {
  unset($_SESSION['token']);
}

if (isset($_GET['code'])) {
  $client->authenticate($_GET['code']);

  $_SESSION['code']=$_GET['code'];

  $_SESSION['token'] = $client->getAccessToken();
  header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
}

if (isset($_SESSION['token'])) {
  $client->setAccessToken($_SESSION['token']);
}

if ($client->getAccessToken()) {
  $calList = $cal->calendarList->listCalendarList();
  PRint "<h1>Calendar List</h1><pre>" . print_r($calList,true) . "</pre>";

  echo $_SESSION['code'];


$_SESSION['token'] = $client->getAccessToken();
} else {
  $authUrl = $client->createAuthUrl();
  print "<a class='login' href='$authUrl'>Connect Me!</a>";
}

?>

获得权限后,我必须保存一些东西,以便将来在用户登录时使用这些权限吗?

用户登录后,以下代码工作正常.但返回错误刷新OAuth2令牌,消息:'{“error”:“access_denied”}’当用户注销时

<?PHP 

require_once '../src/Google_Client.PHP';
require_once '../src/contrib/Google_CalendarService.PHP';

session_start();

const CLIENT_ID = 'XXXXXX.apps.googleusercontent.com';
const SERVICE_ACCOUNT_NAME = 'XXXX@developer.gserviceaccount.com';

const KEY_FILE = 'F183b8caXXXXXXXXatekey.p12';

$client = new Google_Client();
$client->setApplicationName("XXXXXXXX Calendar Service");

if (isset($_SESSION['token'])) {
 $client->setAccessToken($_SESSION['token']);
}

$key = file_get_contents(KEY_FILE);
$client->setClientId(CLIENT_ID);

$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','363183053@developer.gserviceaccount.com')
);

$client->setClientId(CLIENT_ID);

$cal = new Google_CalendarService($client);

    try{
$cal->events->quickAdd("info@organisationname.com","SERVICE TEST ");
}catch(Exception $e){

    print_r($e->getMessage());
}

// We're not done yet. Remember to update the cached access token.
// Remember to replace $_SESSION wITh a real database or memcached.
if ($client->getAccessToken()) {
    echo $_SESSION['token'] = $client->getAccessToken();
}

如果用户登录(如果用户已授予权限),我该怎么做才能更新日历.我应该用户登录时保存访问代码,以后在我想运行批处理时使用它吗?

BTW什么是关联处理?

解决方法

由于未正确提及您的范围而导致错误.在Google OAuth 2.0范围内定义:

>要解决您必须首先更改范围参数的问题>在其中包含日历范围>然后获取访问令牌,然后尝试更改内容>然后根据api文档中提供的要求和步骤进行相应更改

脚本宝典总结

以上是脚本宝典为你收集整理的php – OAuth2令牌,消息:当我尝试使用OAuth(服务帐户)更新Google日历时返回“{”错误“:”access_denied“}’全部内容,希望文章能够帮你解决php – OAuth2令牌,消息:当我尝试使用OAuth(服务帐户)更新Google日历时返回“{”错误“:”access_denied“}’所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。