Я пытаюсь поместить событие календаря в календарь без приглашения на аутентификацию. Я прочитал, что использование учетной записи службы OAuth позволяет вам это делать. Я установил учетную запись службы в своей консоли разработчика Google, и мне не повезло с этим.
У нас есть учетная запись Google, и я устанавливаю свой делегированный пользователь администратору нашей учетной записи, чтобы они могли получить доступ к какому-либо календарю, но это не приведет к созданию события. Я считаю, что проблема связана с токеном доступа. Когда я var_dump($accessToken)
он показывает NULL
.
<?php error_reporting(E_ALL); require_once 'Google/Client.php'; require_once 'Google/Service/Calendar.php'; session_start(); /* Authentication ID's */ const CLIENT_ID = '[MY CLIENT ID]'; const SERVICE_ACCOUNT_NAME = '[MY SERVICE ACCOUNT]'; const KEY_FILE = '[MY KEY FILE].p12'; const CALENDAR_SCOPE = "https://www.googleapis.com/auth/calendar"; $key = file_get_contents(KEY_FILE); $auth = new Google_Auth_AssertionCredentials( SERVICE_ACCOUNT_NAME, array(CALENDAR_SCOPE), $key ); $auth->sub = "adminaccount@email.com"; $client = new Google_Client(); $client->setScopes(array(CALENDAR_SCOPE)); $client->setAssertionCredentials($auth); $client->getAuth()->refreshTokenWithAssertion(); $accessToken = $client->getAccessToken(); $client->setClientId(CLIENT_ID); $user = "testaccount@email.com"; if($accessToken){ $cal = new Google_Service_Calendar($client); $event = new Google_Service_Calendar_Event(); $event->setSummary('TITLE'); $event->setLocation('World'); $event->setDescription('test'); $start = new Google_Service_Calendar_EventDateTime(); $start->setDate(date('yyyy-mm-dd')); $event->setStart($start); $end = new Google_Service_Calendar_EventDateTime(); $end->setDate(date('yyyy-mm-dd')); $event->setEnd($end); $cal->events->insert($user, $event); } ?>
Я ссылаюсь на этот другой поток ( используя учетную запись службы, getAccessToken () возвращает null ), чтобы попытаться устранить эту проблему, но не повезло с ней.
Любая помощь будет принята с благодарностью!
Похоже, вам необходимо предоставить доступ к пользовательским данным домена Google Apps. Ссылка ниже в разделе «Делегировать полномочия домена на ваш аккаунт службы».
Вы можете попробовать установить auth следующим образом:
$auth = new Google_Auth_AssertionCredentials( SERVICE_ACCOUNT_NAME, SCOPES, $key, 'notasecret', 'http://oauth.net/grant_type/jwt/1.0/bearer', ADMIN_USER );