Je peux ajouter un événement à mon agenda google avec une clé API et un ID client OAuth 2.0, mais je veux le faire sans l'écran d'autorisation de google.google-api-php-client se connecter avec key.p12
J'ai suivi les informations trouvées sur ce poste:
stackoverflow.com/questions/8995451/how-do-i-connect-to-the-google-calendar-api-without-the-oauth-authentication
Pour cela, j'ai créé une 'clé de compte de service'. Je suis allé à mes lettres de créance de projet et sélectionnez 'Créer de vérification des pouvoirs> Service Key Account'
Puis:
compte de service> my_project_name
Type de clé> p12
J'enregistré le fichier clé key.p12
Voici mon code:
<?php
// display error, debbug
ini_set('display_errors',1);
session_start();
require_once './google-api-php-client/src/Google_Client.php';
require_once './google-api-php-client/src/contrib/Google_CalendarService.php';
// following values are taken from : console.developers.google.com/apis/credentials?project=projectname credentials
// OAuth 2.0 client IDs : Client ID
const CLIENT_ID = 'xxxx';
// Service account keys : Service account
const SERVICE_ACCOUNT_NAME = 'my_project_name';
// key
const KEY_FILE = './key.p12';
$client = new Google_Client();
$client->setApplicationName("Google Calendar API Quickstart");
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);
}
// Load the key in PKCS 12 format
$key = file_get_contents(KEY_FILE);
$client->setAssertionCredentials(new Google_AssertionCredentials(
SERVICE_ACCOUNT_NAME,
array('https://www.googleapis.com/auth/calendar'),
$key)
);
$client->setClientId(CLIENT_ID);
$cal = new Google_CalendarService($client);
//Save token in session
if ($client->getAccessToken()) {
$_SESSION['token'] = $client->getAccessToken();
}
// my code here
$event = new Google_Event(...
$calendarId = '[email protected]';
$event = $cal->events->insert($calendarId, $event);
?>
Et voici le message d'erreur:
Fatal error: Uncaught Google_AuthException: Error refreshing the OAuth2 token, message: '{
'error' : 'invalid_client',
'error_description' : 'The OAuth client was not found.'
}' in /home/www/google-api-php-client/src/auth/Google_OAuth2.php:288
Stack trace:
#0 /home/www/google-api-php-client/src/auth/Google_OAuth2.php(264): Google_OAuth2->refreshTokenRequest(Array)
#1 /home/www/google-api-php-client/src/auth/Google_OAuth2.php(218): Google_OAuth2->refreshTokenWithAssertion()
#2 /home/www/google-api-php-client/src/service/Google_ServiceResource.php(167): Google_OAuth2->sign(Object(Google_HttpRequest))
#3 /home/www/google-api-php-client/src/contrib/Google_CalendarService.php(469): Google_ServiceResource->__call('insert', Array)
#4 /home/www/goog in /home/www/google-api-php-client/src/auth/Google_OAuth2.php on line 288
Il semble que le $ client-> getAccessToken() n'est pas réglé, mais je ne sais pas pourquoi.
Merci d'avance pour votre aide.
merci Danijel pour votre réponse. J'ai créé un nouvel identifiant de compte de service avec le rôle> projet> propriétaire. J'ai téléchargé le fichier et l'ai placé dans le répertoire racine de mon webserer. Je suis coincé à 'Ensuite, allez dans Google Agenda-> Partager et ajouter l'identifiant du compte de service sur la liste.' Je suis allé à mon calendrier de compte google> paramètres> calendrier> mycalendar> Adresse du calendrier> paramètres de partage> Partager avec des personnes spécifiques, ici j'ai essayé d'entrer le «ID de clé de compte de service» sans succès. Il demande un email addr. Ai-je manqué quelque chose ? – blackndoor
Oui, je l'ai mal écrit, je suis arrivé à "Gérer les comptes de service", et j'utilise "ID de compte de service", pas "ID de clé", mon erreur. – Danijel
Merci beaucoup, ça marche! – blackndoor