2016-11-11 10 views
0

Я пытаюсь отправить события в Google Calendar с помощью api из php. но с этим всегда происходит некоторая ошибка. не может понять, что делать дальше. Вот мой код:Как исправить ошибки отправки событий в Google Calendar с помощью api в php

Фатальная ошибка: Uncaught исключение 'Google_ServiceException' с сообщением 'Ошибка вызова POST https://www.googleapis.com/calendar/v3/calendars/[email protected]/events?key= {MY здесь}: (401) Войти Обязательно' в/дома/ABCD/public_html/mouthworks/Gplus-verifytoken- php-master/google-api-php-client/src/io/Google_REST.php: 66 Трассировка стека: # 0/home/abcd/public_html/mouthworks/gplus-verifytoken-php-master/google-api-php-client /src/io/Google_REST.php(36): Google_REST :: decodeHttpResponse (Object (Google_HttpRequest)) # 1/home/abcd/public_html/mouthworks/gplus-verifytoken-php-master/google-api-php-client/src /service/Google_ServiceResource.php(186): Google_REST :: выполнить (объект (Google_HttpRequest)) # 2/home/abcd/public_html/mouthworks/gplus-verifytoken-php-master/google-api-php-client/src/contrib /Google_CalendarService.php(494): Google_ServiceResource -> __ call ('insert', Array) # 3/home/abcd/public_html/mouthworks/t est.php (24): Google_EventsServiceResource-> insert ('some_calendar @ g ...', Object (Google_Even в/home/abcd/public_html/mouthworks/gplus-verifytoken-php-master/google-api-php-client/SRC/IO/Google_REST.php на линии 66

 require_once './gplus-verifytoken-php-master/ 
     google-api-php-client/src/Google_Client.php'; 
     require_once ' 
     ./gplus-verifytoken-php-master/ 
     google-api-php- client/src/contrib/Google_CalendarService.php'; 

     session_start(); 

     ob_start(); 
     $client = new Google_Client(); 
     $client->setApplicationName('demo'); 
     $client-> 
     setClientId('client id'); 
     $client->setClientSecret('secret'); 
     $client->setRedirectUri('http://someurl.com'); 
     $client-> 
     setDeveloperKey('dev key'); 
     $cal = new Google_CalendarService($client); 

     $event = new Google_Event(); 
     $event->setSummary('Pi Day'); 
     $event->setLocation('Math Classroom'); 
     $start = new Google_EventDateTime(); 
     $start->setDateTime('2016-11-14T10:00:00.000-05:00'); 
     $event->setStart($start); 
     $end = new Google_EventDateTime(); 
     $end->setDateTime('2016-11-14T10:25:00.000-05:00'); 
     $event->setEnd($end); 

     // error is on this next line 
     $createdEvent = 
     $cal->events->insert('[email protected]',$event); 

     echo $createdEvent->id; 

     ?> 
+0

Какая ошибка в точности? – DaImTo

+0

Исключить исключение «Google_ServiceException» с сообщением «Ошибка при вызове POST на некотором URL-адресе – shalder

+1

вы можете скопировать точную полную ошибку и поместить ее в свой вопрос. – DaImTo

ответ

0

Первое, что я заметил здесь, что вы не проходит проверку подлинности вызова API, и именно поэтому вы получаете сообщение об ошибке (401) Войти Required. Сначала вы должны аутентифицировать пользователя для доступа к пользовательским данным. Пожалуйста, обратитесь к документации здесь https://developers.google.com/api-client-library/php/auth/web-app. После успешного аутентификации пользователя вы можете сделать вызов API. Вторая вещь, которую я замечаю, заключается в том, что вы помещаете адрес электронной почты в идентификатор календаря. Если вы хотите получить доступ к основному календарю текущего пользователя, используйте ключевое слово «primary». Ваш код должен выглядеть примерно так:

session_start(); 

$client = new Google_Client(); 
$client->setAuthConfig("client_secrets.json"); 
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/event.php'); 
$client->addScope("https://www.googleapis.com/auth/calendar"); 

if (isset($_SESSION['access_token']) && $_SESSION['access_token']) { 

    $client->setAccessToken($_SESSION['access_token']); 

    $cal = new Google_Service_Calendar($client); 

    $event = new Google_Service_Calendar_Event(array(
     'summary' => 'Pi Day', 
     'location' => 'Math Classroom', 
     'description' => 'Pi History in detail', 
     'start' => array(
      'dateTime' => '2016-11-14T10:00:00-05:00' 
     ), 
     'end' => array(
      'dateTime' => '2016-11-14T10:25:00-05:00' 
     ), 
     'reminders' => array(
     'useDefault' => FALSE, 
     'overrides' => array(
      array('method' => 'email', 'minutes' => 24 * 60), 
      array('method' => 'popup', 'minutes' => 10), 
     ), 
    ), 
    )); 

    $calendarId = 'primary'; 
    $event = $cal->events->insert($calendarId, $event); 
    printf('Event created: %s\n', $event->htmlLink); 

} else { 

    if (!isset($_GET['code'])) {  

      $auth_url = $client->createAuthUrl(); 
      header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL)); 

    } else { 

     $client->authenticate($_GET['code']); 
     $_SESSION['access_token'] = $client->getAccessToken(); 

     $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/event.php'; 
     header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); 

    } 

} 

Надеюсь, вы найдете эту информацию полезной. Я также рекомендую вам ознакомиться с справочной документацией, найденной здесь https://developers.google.com/google-apps/calendar/v3/reference/events/insert

 Смежные вопросы

  • Нет связанных вопросов^_^