【问题标题】:How to fix error sending events to google calender using api in php如何使用 php 中的 api 修复将事件发送到谷歌日历的错误
【发布时间】:2017-03-25 09:10:19
【问题描述】:

我正在尝试使用 php 中的 api 将事件发送到谷歌日历。但这总是有一些错误。无法理解下一步该怎么做。这是我的代码:

致命错误:/home/abcd/public_html/mouthworks/gplus-verifytoken-php-master/ 中的消息“调用 POST https://www.googleapis.com/calendar/v3/calendars/some_calendar@gmail.com/events?key={MY is here}: (401) Login Required”未捕获异常“Google_ServiceException” 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::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(Google_Even在 /home/abcd/public_html/mouthworks/gplus-verifytoken-php-maste r/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('some_calendar@gmail.com',$event);

        echo $createdEvent->id;

        ?>

【问题讨论】:

  • 究竟是什么错误?
  • 未捕获的异常“Google_ServiceException”和消息“调用 POST 某些 url 时出错
  • 您能否复制准确的完整错误并将其放在您的问题中。

标签: php google-api google-calendar-api google-api-php-client


【解决方案1】:

我在这里注意到的第一件事是您没有验证您的 API 调用,这就是您收到错误 (401) Login Required 的原因。您必须首先对用户进行身份验证才能访问用户数据。请参阅此处的文档https://developers.google.com/api-client-library/php/auth/web-app。用户成功通过身份验证后,您可以进行 API 调用。我注意到的第二件事是您将电子邮件地址放在日历 ID 上。如果要访问当前登录用户的主日历,请使用“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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多