Créer Simple Événement de l'Agenda Google en PHP
Je vais avoir un diable de temps à essayer d'obtenir un très simple événement ajouté à un calendrier à l'aide de l'API Google Agenda, et j'aimerais si quelqu'un peut mon (probablement évidente). Je suis en utilisant le code que j'ai trouvé ici. J'ai mis le code dans le "google-api-php-client/exemples.calendrier" directory, où un simple exemple peut être trouvé.
<?php
require_once '../../src/Google_Client.php';
require_once '../../src/contrib/Google_CalendarService.php';
session_start();
$client = new Google_Client();
$client->setApplicationName("Google Calendar PHP Starter Application");
$client->setClientId('');
$client->setClientSecret('');
$client->setRedirectUri('worked.html'); //I made a file called "worked.html" in the same directory that just says "it worked!"
$client->setDeveloperKey('SecretLongDeveloperKey');
$cal = new Google_CalendarService($client);
if (isset($_GET['logout'])) {
unset($_SESSION['token']);
}
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$_SESSION['token'] = $client->getAccessToken();
header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
}
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);
}
$authUrl = $client->createAuthUrl();
if (!$client->getAccessToken()){
$event = new Google_Event();
$event->setSummary('Halloween');
$event->setLocation('The Neighbourhood');
$start = new Google_EventDateTime();
$start->setDateTime('2012-10-31T10:00:00.000-05:00');
$event->setStart($start);
$end = new Google_EventDateTime();
$end->setDateTime('2012-10-31T10:25:00.000-05:00');
$event->setEnd($end);
$createdEvent = $cal->events->insert('[email protected]', $event);
}
echo $createdEvent->getId();
?>
Quand j'ai accès à ce script, j'obtiens une erreur 404. J'ai essayé d'aller dans le code et en commentant les lignes dans une tentative de trouver le coupable - il semble être l'avant-dernière ligne, ce qui en fait insère l'événement.
Des conseils? J'apprécierais vraiment de quelques conseils, que je ne peux pas sembler obtenir même le plus simple des exemples de travail.
OriginalL'auteur Jake | 2013-09-09
Vous devez vous connecter pour publier un commentaire.
Votre code fonctionne presque.
Cependant, vous rediriger vers "worked.html". De cette façon, votre événement ne pas créés après la redirection de l'authentification. Aussi la setRedirectUri doit correspondre à ce que vous avez entré dans l'API de Google en plus de la console (voir "Redirect Uri") ET il devrait être CE fichier car ce fichier est saisie de l'événement après la redirection. (Vous n'avez pas besoin de la "worked.html")
De sorte que votre simple.php devrait ressembler à ceci (AUSSI modifier le "Redirect Uri" sur Google Api pour
http://localhost/simple.php
, vous devez spécifier le domaine, mais que vous pouvez utiliser localhost, dans setRedirectUri vous pouvez spécifier le même)Aussi, comme @BigMacAttack déjà dit, vous avez seulement besoin de l'
$authURL = $client->createAuthURL();
une fois, seulement sigetAccessToken
échoué.Happy Halloween 😉
Modifier: j'ai nettoyé le code beaucoup avec des liens de travail pour la connexion et la déconnexion et le journal des messages.
J'ai pris ton code et il fonctionne. Peut-être il ya quelque chose de mal avec votre cookies. Vous pouvez essayer de débogage avec un
print_r($_SESSION);
après lasession_start()
. Vous devriez voir les cookiestoken
etc.. peut-être que vous pouvez mettre en commentaire laheader('Location:
ligne. Vous n'aurez pas besoin de le rediriger vers le même fichier. Vous pouvez voir si vous obtenez alors le "a obtenu le jeton" et " récupérer le jeton. Je ne sais pas si le code Google lui-même a besoin des cookies pour fonctionner.D'abord laissez-moi juste vous dire merci beaucoup pour votre aide! Vous êtes la seule ressource que j'ai pu trouver! =) Je ne pouvais pas le faire fonctionner dans un autre navigateur ou sur un autre ordinateur. J'ai essayé de mettre un print_r où vous l'avez dit, il imprime juste Array(), qui, je crois (?) moyen il n'y a rien dans le tableau - est-ce vrai? Est-il autre chose que je peux print_r() pour aider à diagnostiquer le problème?
Si vous obtenez seulement
Array()
cela signifie que$_SESSION
est vide, donc il n'y a pas de cookies. Vous êtes arriver à "obtenu le code", donc le cookie 'token' ($_SESSION['token']) doit être situé juste à l'avant de la rediriger vers lui-même. Après cela, il devrait vous donner (avec le print_r) quelque chose dans le $_SESSION. Avez-vous essayez de supprimer leheader('Location:
ligne? Aussi, vous pourriez essayer, juste après$_SESSION['token'] = $client->getAccessToken();
, faire unprint("i got the token = ".$_SESSION['token']); exit();
pour voir si le jeton est rempli. (Leexit();
est important, sinon vous obtenir redirigé.Aussi la façon dont vous l'avez fait avec la sortie d'une ligne 'a obtenu le code avant de faire une
header('Location:
ne fonctionne pas. Les en-têtes ne fonctionne que si vous n'avez pas sorti encore rien. Si vous n'obtenez pas redirigé. (Je voudrais essayer de commenter leheader('Location:
ligne. Il a travaillé ici.)OriginalL'auteur Rik
La dernière partie de votre code n'est pas à l'utilisation correcte de la logique. Le noeud du problème est avec
if (!$client->getAccessToken())
. Cette déclaration, dans le cadre de votre exemple de code, se traduit par: Si vous ne parvenez pas à obtenir le jeton d'accès, de créer l'événement. Évidemment, ce n'est pas ce que vous voulez arriver. 😉Au lieu de cela, essayez ceci:
OriginalL'auteur BigMacAttack