简体   繁体   中英

How to fix error sending events to google calender using api in php

I am trying to send events to google calender using api from php. but there is some error always with this. cannot understand what to do next. Here is my code:

Fatal error: Uncaught exception 'Google_ServiceException' with message 'Error calling POST https://www.googleapis.com/calendar/v3/calendars/some_calendar@gmail.com/events?key= {MY is here}: (401) Login Required' in /home/abcd/public_html/mouthworks/gplus-verifytoken-php-master/google-api-php-client/src/io/Google_REST.php:66 Stack trace: #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::execute(Object(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/test.php(24): Google_EventsServiceResource->insert('some_calendar@g...', Object(Googl e_Even in /home/abcd/public_html/mouthworks/gplus-verifytoken-php-master/google-api-php-client/src/io/Google_REST.php on line 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('some_calendar@gmail.com',$event);

        echo $createdEvent->id;

        ?>

The first thing I am noticing here is that you are not authenticating your API call and that is why you are getting the error (401) Login Required. You must first authenticate the user to access user data. Please refer to the documentation here https://developers.google.com/api-client-library/php/auth/web-app . After the user is successfully authenticated then you can make the API call.The second thing I notice is that you are putting the email address on the calendar id. If you want to access the primary calendar of the currently logged in user, use the "primary" keyword. Your code should look something like this:

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));

    }

}

I hope you find this information helpful. I also recommend you reading the reference documentation found here https://developers.google.com/google-apps/calendar/v3/reference/events/insert

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM