我不能';t使用v3-php客户端库连接到谷歌日历api


I couldn't connect to Google calender api using v3 php client library

我无法连接,无法显示事件,使用php客户端库插入事件。这就是我犯的错误。我正在使用客户端库的v3版本

Fatal error: Uncaught exception 'Google_Service_Exception' with message 'Error calling GET https://www.googleapis.com/calendar/v3/calendars/primary?key=****************: (401) Login Required' in /var/www/html/google-api-php-client1/src/Google/Http/REST.php:79 
Stack trace:     
 #0 /var/www/html/google-api-php-client1/src/Google/Http/REST.php(44): Google_Http_REST::decodeHttpResponse(Object(Google_Http_Request))     
 #1 /var/www/html/google-api-php-client1/src/Google/Client.php(503): Google_Http_REST::execute(Object(Google_Client), Object(Google_Http_Request))      
 #2 /var/www/html/google-api-php-client1/src/Google/Service/Resource.php(195): Google_Client->execute(Object(Google_Http_Request))      
 #3 /var/www/html/google-api-php-client1/src/Google/Service/Calendar.php(1269): Google_Service_Resource->call('get', Array, 'Google_Service_...')      
 #4 /var/www/html/simple.php(27): Google_Service_Calendar_Calendars_Resource->get('primary') #5 {main} thrown in /var/www/html/google-api-php-client1/src/Google/Http/REST.php on line 79

由于您收到401 login required错误,因此需要设置setAccessToken。请访问此处Google Calendar API错误-401添加日历事件时需要登录

您可能需要使用包含刷新令牌的原始身份验证访问代码来发出refreshToken()。//示例

$google_client->refreshToken($token->refresh_token);

并使用'setDeveloperKey'.,它可以工作。您可以看到:https://code.google.com/p/google-api-php-client/issues/detail?id=218

终于解决了问题。这是获得日历事件列表的完美例子。

   <?php
// ...
ini_set('display_errors', 1);
error_reporting(E_ALL);
set_include_path('google-api-php-client1/src');
require_once 'Google/Client.php';
require_once 'Google/Service/Calendar.php';
//
$client = new Google_Client();
//print_r($client);exit;
//$client->setUseObjects(true);
$client->setApplicationName("your-app-name");
$client->setClientId("CLIENT id");
$client->setClientSecret('CLIENT SECRET');
$client->setDeveloperKey('DEVELOPER KEY');
$client->setRedirectUri('your url mostly localhost');
$client->setScopes(array(
    'https://www.googleapis.com/auth/calendar',
    'https://www.googleapis.com/auth/calendar.readonly',
));
if (isset($_GET['code'])) {
    $client->authenticate($_GET['code']);
    $_SESSION['token'] = $client->getAccessToken();
        //print_r($_SESSION['token']);exit;
    //header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);

if (isset($_SESSION['token'])) {
    //echo 'innn';exit;
    $client->setAccessToken($_SESSION['token']);
    //echo 'innn';exit;
}
}
if ($client->getAccessToken()) {
    //echo 'innn';exit;
    $service = new Google_Service_Calendar($client);
      //echo '<pre>';      print_r($service);exit;
    //$calendar = $service->calendars->get('primary');
    //echo $calendar->getSummary();
        $events = $service->events->listEvents('primary');
            while(true) {
                foreach ($events->getItems() as $event) {
                    echo $event->getSummary();
                            }
                    $pageToken = $events->getNextPageToken();
                        if ($pageToken) {
                        $optParams = array('pageToken' => $pageToken);
                            $events = $service->events->listEvents('primary', $optParams);
                                        } else {
                                                    break;
                                                }
                        }
    $_SESSION['token'] = $client->getAccessToken();
} else {
    $authUrl = $client->createAuthUrl();
    print "<a class='login' href='$authUrl'>Connect Me!</a>";
}
?>

添加事件的脚本。实际问题是谷歌日历版本3与其文档不匹配。所以我查看了Calender.php中所有可用的类。

                $event = new Google_Service_Calendar_Event();
                $event->setSummary('Interview');
                $event->setLocation('Hell');
                $start = new Google_Service_Calendar_EventDateTime();
                $start->setDateTime('2014-09-04T10:00:00.000-07:00');
                $event->setStart($start);
                $end = new Google_Service_Calendar_EventDateTime();
                $end->setDateTime('2014-09-04T11:00:00.000-07:00');
                $event->setEnd($end);
                $attendee1 = new Google_Service_Calendar_EventAttendee();
                $attendee1->setEmail('email@abc.com');
                // ...
                $attendees = array($attendee1,
                                   // ...
                                  );
                $event->attendees = $attendees;
                $createdEvent = $service->events->insert('primary', $event);
                echo $createdEvent->getId();