Я использую следующий код PHP, используя клиентские библиотеки, найденные здесь: https://code.google.com/p/google-api-php-client/ . У меня нет ошибок для какого-либо из этого кода, но когда я вызываю getAccessToken()
, он возвращает null.
Я разрешил доступ к этой учетной записи службы в своем личном календаре и предоставил полный доступ к проекту через API-консоль.
Есть идеи?
require_once 'google-api-php-client/src/Google_Client.php'; const CLIENT_ID = 'blahblahblah'; const SERVICE_ACCOUNT_NAME = 'blahblahblah@developer.gserviceaccount.com'; const KEY_FILE = 'path/to/privatekey.p12'; $google_client = new Google_Client(); // created only to initialized static dependencies $client = new Google_OAuth2(); // you really just need Google_OAuth2 $key = file_get_contents(KEY_FILE); $client->setAssertionCredentials( new Google_AssertionCredentials( SERVICE_ACCOUNT_NAME, array('https://www.googleapis.com/auth/calendar'), $key ) ); var_dump($client->getAccessToken());
По какой-то причине это, казалось, работало:
require_once 'google-api-php-client/src/Google_Client.php'; const CLIENT_ID = 'blahblahblah'; const SERVICE_ACCOUNT_NAME = 'blahblahblah@developer.gserviceaccount.com'; const KEY_FILE = 'path/to/privatekey.p12'; const CALENDAR_SCOPE = "https://www.googleapis.com/auth/calendar"; $key = file_get_contents(KEY_FILE); $auth = new Google_AssertionCredentials( SERVICE_ACCOUNT_NAME, array(CALENDAR_SCOPE), $key ); $client = new Google_Client(); $client->setScopes(array(CALENDAR_SCOPE)); $client->setAssertionCredentials($auth); $client->getAuth()->refreshTokenWithAssertion(); $accessToken = $client->getAccessToken(); $client->setClientId(CLIENT_ID);
Если кто-то может объяснить, почему это сработало, отредактируйте этот ответ или комментарий!