6

Я запускаю следующий код PHP, используя клиентские библиотеки, найденные здесь: https://code.google.com/p/google-api-php-client/. Я не получаю никаких ошибок для любого из этого кода, но когда я вызываю getAccessToken(), он возвращает null.Использование учетной записи службы getAccessToken() возвращает null

Я разрешил доступ к этой учетной записи службы в своем личном календаре и предоставил полный доступ к проекту через API-консоль.

Любые идеи?

require_once 'google-api-php-client/src/Google_Client.php'; 

const CLIENT_ID = 'blahblahblah'; 
const SERVICE_ACCOUNT_NAME = '[email protected]'; 
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()); 

ответ

3

По какой-то причине, это, казалось, работали:

require_once 'google-api-php-client/src/Google_Client.php'; 

const CLIENT_ID = 'blahblahblah'; 
const SERVICE_ACCOUNT_NAME = '[email protected]'; 
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); 

Если кто-то может объяснить, почему это работает, пожалуйста, изменить этот ответ или комментарий!

+0

Не уверен. Я использую ваш код с кредитом на https://gist.github.com/fulldecent/6728257 и FYI, строка setScopes не нужна –

+1

'' getAccessToken() '' возвращает токен доступа, который не существует до тех пор, пока вы не вызовете '' refreshTokenWithAssertion() '' (для инициализации) или '' setAccessToken() '' (если вы восстановили предыдущий токен доступа, который хотите использовать). – tiho