1

我正在尝试使用他们的指南向 google calendar api 执行 cURL 请求,上面写着:

POST https://www.googleapis.com/calendar/v3/calendars/{name_of_my_calendar}/events?sendNotifications=true&pp=1&key={YOUR_API_KEY}

Content-Type:  application/json
Authorization:  OAuth 1/SuypHO0rNsURWvMXQ559Mfm9Vbd4zWvVQ8UIR76nlJ0
X-JavaScript-User-Agent:  Google APIs Explorer

{
 "start": {
  "dateTime": "2012-06-03T10:00:00.000-07:00"
 },
 "end": {
  "dateTime": "2012-06-03T10:20:00.000-07:00"
 },
 "summary": "my_summary",
 "description": "my_description"
}

我应该如何在 php 中做到这一点?我想知道我应该发送哪些参数以及应该使用哪些常量。我目前正在做:

        $url = "https://www.googleapis.com/calendar/v3/calendars/".urlencode('{name_of_my_calendar}')."/events?sendNotifications=true&pp=1&key={my_api_key}";  

        $post_data = array(  
            "start" => array("dateTime" => "2012-06-01T10:00:00.000-07:00"),  
            "end" => array("dateTime" => "2012-06-01T10:40:00.000-07:00"),  
            "summary" => "my_summary",
            "description" => "my_description"
        );

        $ch = curl_init();  
        curl_setopt($ch, CURLOPT_URL, $url);  
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
        curl_setopt($ch, CURLOPT_POST, 1);  
        // adding the post variables to the request  
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);  

        $output = curl_exec($ch);  

        curl_close($ch);  

但回应是:

{
    error: {
        errors: [
        {
            domain: "global",
            reason: "required",
            message: "Login Required",
            locationType: "header",
            location: "Authorization"
        }
        ],
        code: 401,
        message: "Login Required"
    }
}

我应该如何格式化我的参数?

4

1 回答 1

2

我注意到这个问题是很久以前提出的,但是在一段时间后弄清楚后参数问题后,我认为它可能对其他人有用。首先在“$post_data”中,我切换了“开始”和“结束”:

$post_data = array(
    "end" => array("dateTime" => "2012-06-01T10:40:00.000-07:00"),
    "start" => array("dateTime" => "2012-06-01T10:00:00.000-07:00"),  
    "summary" => "my_summary",
    "description" => "my_description"
);

其次,我认为 Google Calendar API 期望数据是 json,所以在 curl_setopt 中:

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));

这对我来说非常有效,希望对其他人也有用!

于 2013-10-16T08:51:40.283 回答