6

Ich verwende den folgenden PHP-Code mit den hier gefundenen Clientbibliotheken: https://code.google.com/p/google-api-php-client/. Ich bekomme keine Fehler für diesen Code, aber wenn ich getAccessToken() aufrufen, gibt es null zurück.Unter Verwendung eines Dienstkontos gibt getAccessToken() Null zurück

Ich habe Zugriff auf dieses Dienstkonto in meinem persönlichen Kalender gewährt und vollen Zugriff auf das Projekt über die API-Konsole gewährt.

Irgendwelche Ideen?

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()); 

Antwort

3

Aus irgendeinem Grund schien das funktionieren:

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); 

Wenn jemand erklären kann, warum dies funktioniert, bitte bearbeiten Sie diese Antwort oder Kommentar!

+0

Nicht sicher auch nicht. Ich benutze Ihren Code mit Guthaben bei https://gist.github.com/fulldecent/6728257 und FYI die Zeile setScopes ist nicht notwendig –

+1

'' getAccessToken() '' gibt das aktuelle Access-Token, das nicht existiert, bis Sie anrufen '' refreshTokenWithAssertion() '' (um es zu initialisieren) oder '' setAccessToken() '' (wenn Sie ein vorheriges Zugriffs-Token wiederhergestellt haben, das Sie verwenden möchten). – tiho