加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

推送通知 – 使用PHP客户端为Google Calendar API设置推送通知

发布时间:2020-05-25 08:57:19 所属栏目:PHP 来源:互联网
导读:我想设置 push notifications for Google Calendar API,只要Google日历api上的特定资源发生变化,我的服务器就会收到通知.我想用 Google APIs client library for PHP这样做. 但似乎they don’t have a method用于在PHP库中观看谷歌日历资源.可能是其他图书馆

我想设置 push notifications for Google Calendar API,只要Google日历api上的特定资源发生变化,我的服务器就会收到通知.我想用 Google APIs client library for PHP这样做.

但似乎they don’t have a method用于在PHP库中观看谷歌日历资源.可能是其他图书馆有一个监视方法,但我不太确定.

基本上,为特定资源设置推送通知,您必须将发布请求发送到这样的URL …

POST https://www.googleapis.com/calendar/v3/calendars/my_calendar@gmail.com/events/watch
Authorization: Bearer auth_token_for_current_user
Content-Type: application/json

{
  "id": "01234567-89ab-cdef-0123456789ab",// Your channel ID.
  "type": "web_hook","address": "https://mydomain.com/notifications" // Your receiving URL.
}

我可以在PHP中使用curl轻松地做到这一点,但我的问题是请求未经Google OAuth令牌授权,因此会导致错误.

我想知道这个问题是否有解决方法….

UPDATE

我试图将连接发送到Google而不添加正确的标头,因此我收到授权错误.更正了该部分后,我仍然遇到“无效凭据”错误.这是我的代码片段的样子……

$url = sprintf("https://www.googleapis.com/calendar/v3/calendars/%s/events/watch",$calendar);

    /* setup the POST parameters */
    $fields = array(
        'id'        => "some_unique_key",'type'      => "web_hook",'address'   => sprintf("http://%s//event_status/update_google_events",$_SERVER['SERVER_NAME'])
        );

    /* convert the POST parameters to URL query */
    $fields_string = '';
    foreach ($fields as $key => $value) {
        $fields_string .= sprintf("%s=%s&",$key,$value);
    }
    rtrim($fields_string,'&');

    /* setup POST headers */
    $headers[] = 'Content-Type: application/json';
    $headers[] = 'Authorization: OAuth ' . $access_token;

    /* send POST request */
    $channel = curl_init();
    curl_setopt($channel,CURLOPT_HTTPHEADER,$headers);
    curl_setopt($channel,CURLOPT_URL,$url);
    curl_setopt($channel,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($channel,CURLOPT_POST,CURLOPT_POSTFIELDS,$fields_string);
    curl_setopt($channel,CURLOPT_CONNECTTIMEOUT,2);
    curl_setopt($channel,CURLOPT_TIMEOUT,3);
    $response = curl_exec($channel);
    curl_close($channel);

    error_log($response);
这是我解决问题的方法.我想通过在 Google playground中稍微摆弄一下我弄错了什么.

我做的是那个

>我JSON编码了POST请求的主体,而不是发送URL查询参数.
>更改了POST请求from OAUth {access_token} to Bearer {access_token}的授权部分.

基本上只是跟随Google’s documentation for setting up push notifications.

$url = sprintf("https://www.googleapis.com/calendar/v3/calendars/%s/events/watch",$calendar);

/* setup the POST parameters */
$fields = json_encode(array(
    'id'        => "some_unique_key",$_SERVER['SERVER_NAME'])
    ));

/* setup POST headers */
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer ' . $access_token;

/* send POST request */
$channel = curl_init();
curl_setopt($channel,$headers);
curl_setopt($channel,$url);
curl_setopt($channel,true);
curl_setopt($channel,$fields);
curl_setopt($channel,2);
curl_setopt($channel,3);
$response = curl_exec($channel);
curl_close($channel);

error_log($response);

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读