php – OAuth2令牌,消息:当我尝试使用OAuth(服务帐户)更新Googl
我正在使用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文档中提供的要求和步骤进行相应更改 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |