我无法使用v3 php客户端库连接到Google calendar api

时间:2014-09-03 11:47:15

标签: php google-api-php-client

我无法通过使用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

3 个答案:

答案 0 :(得分:0)

因为您收到401 login required错误,因此您需要设置setAccessToken。访问此处Error with Google Calendar API - 401 Login required when adding a calendar event

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

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

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

答案 1 :(得分:0)

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

   <?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>";

}

?>

答案 2 :(得分:0)

添加事件的脚本。 实际问题是Google日历版本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();
相关问题