我已经多次发现这个问题,但我找不到解决方案的单个实例,所以我正在尝试自己。
我正在创建一个简单的 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 的一种方式——在此之前我对它的经验很少——并且想至少了解登录错误的来源,以及在跌倒之前如何克服它回到现有的快捷方式。因为这不是一个必要的项目,所以我有大量的时间在我身边;这只是我想帮忙的事情。
谁能向我解释我做错了什么,或者我需要分享哪些进一步的信息来隔离问题?我不想错过这个学习机会!
谢谢!