2

我已经多次发现这个问题,但我找不到解决方案的单个实例,所以我正在尝试自己。

我正在创建一个简单的 Web 应用程序来帮助我的雇主将活动安排到 Google 日历中。我已经创建了日历,用 Google API 注册了它,并编写了 cURL 函数来检查现有的约会和返回时间和日期。我挂断了创建新事件的功能。我编写的函数(为清楚起见扩展了一些变量名)如下:

function post_cal($url, $header, $post_content)
{
   global $authtoken, $curlDefaults;
   $request = $url;
   $headers = array('Content-Type: application/json; Authorization: OAuth ' . $authtoken . $header);
   $options = array (
      CURLOPT_URL => $request,
      CURLOPT_HTTPHEADER => $headers,
      CURLOPT_POST => 1,
      CURLOPT_POSTFIELDS => $post_content,
   );
   $ch = curl_init();
   curl_setopt_array($ch, ($curlDefaults + $options));
   $result = curl_exec($ch);
   curl_close($ch);
   $json = json_decode($result, true);
   return $json;
}

当我尝试像这样运行 post_cal 函数时,我得到一个“401 - 需要登录”错误对象:

$scheduled = post_cal('https://www.googleapis.com/calendar/v3/calendars/xxxxxx/events, '', $apptInfo);

cURL 函数与我用来读取事件和返回现有值的函数几乎相同——两者都可以正常工作!我使用相同的 $authtoken 变量,该变量是通过明确定义了“https://www.googleapis.com/auth/calendar”范围的刷新令牌收集的。我已经阅读并重新阅读了 Google OAuth 文档,但似乎无法准确找到此错误的来源。

$apptInfo 是一个数组,编码为 JSON,包含约会信息,包括开始和结束时间、摘要和描述。

我知道这可以通过 Google 提供的 PHP 库或 Zend/GData 框架更轻松地完成。但是,我正在使用这个项目作为自学 PHP 的一种方式——在此之前我对它的经验很少——并且想至少了解登录错误的来源,以及在跌倒之前如何克服它回到现有的快捷方式。因为这不是一个必要的项目,所以我有大量的时间在我身边;这只是我想帮忙的事情。

谁能向我解释我做错了什么,或者我需要分享哪些进一步的信息来隔离问题?我不想错过这个学习机会!

谢谢!

4

1 回答 1

0

使用萤火虫你可以准确地看到你发送的标题。我想这是一个调试问题,因为一切似乎都很好。但我建议使用谷歌的 PHP API SDK。

$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;
 }
}

https://developers.google.com/google-apps/calendar/v3/reference/events/list

于 2013-12-29T22:18:35.777 回答