但是他们似乎没有一个方法来观看PHP库中的谷歌日历资源。其他库可能有watch
方法,但我不太确定。
基本上,为了设置特定资源的推送通知,您必须向如下URL发送post请求······
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令牌的授权,因此会导致错误。
更新
我试图发送连接到谷歌没有添加适当的头,所以我得到了一个授权错误。更正了该部分之后,我仍然遇到Invalid Credentials
错误。下面是我的代码片段的样子...
$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, true);
curl_setopt($channel, 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);
这是我解决问题的办法。我在谷歌游乐场里摆弄了一下,就知道我做错了什么。
我所做的就是
授权
部分从OAuth{access_token}
更改为承载{access_token}
。$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",
'type' => "web_hook",
'address' => sprintf("http://%s//event_status/update_google_events", $_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, CURLOPT_HTTPHEADER, $headers);
curl_setopt($channel, CURLOPT_URL, $url);
curl_setopt($channel, CURLOPT_RETURNTRANSFER, true);
curl_setopt($channel, CURLOPT_POST, true);
curl_setopt($channel, CURLOPT_POSTFIELDS, $fields);
curl_setopt($channel, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($channel, CURLOPT_TIMEOUT, 3);
$response = curl_exec($channel);
curl_close($channel);
error_log($response);
问题内容: 我想在我的Elasticsearch php客户端到我的Elasticsearch服务器之间配置一个小的超时。 我试图将一些参数传递给耗时的客户端,但这似乎不起作用。这是代码: 我搜索发现可能是由于在cURL层中设置了超时(低于guzzle而引起的问题 限制了与Guzzle HTTP PHP客户端的连接时间 我想我需要以某种方式将CURLOPT_CONNECTTIMEOUT_MS参数设
客户端关于推送的方法只有两个,它们分别是: Subscribe 方法 Subscribe(name string, id string, settings *InvokeSettings, callback interface{}) (err error) Subscribe 方法的用处是订阅服务器端的推送服务。该方法有两种方式,一种是自动获取设置客户端 id,另一种是手动设置客户端 id。 参数
问题内容: 我想创建一个应用程序,当超级用户单击链接时,用户应该获得通知或类似pdf的内容,以便他们在屏幕上访问。 用例:当教师想与他的学生共享PDF时,他应该能够通知他的学生有关可下载的pdf的信息,并且必须提供一个链接来做到这一点。 问题答案: 当您想在CakePHP中实现此功能(因此我假设它是基于Web的应用程序)时,用户必须打开“活动”页面才能接收推送消息。 值得一看前两个答案,但也只需考
> 在移动应用程序中为用户分配一些数据标签,例如“HAS Items:true”或“Is interestedinProduct”,然后用这些用户标签在Oneignal控制台中创建片段。 在我的后端保存Oneignal,将其与匹配,然后根据后端数据库数据有选择地向用户发送消息。 做这件事的首选方法是什么?或者它应该是两者的结合,这取决于我的用例?有没有办法让它完全自动化?例如。根据一些分析事件,在
长连接服务(TCP、WebSocket)支持向客户端推送数据,具体用法https://doc.imiphp.com/utils/Server.html
长连接服务(TCP、WebSocket)支持向客户端推送数据,具体用法https://doc.imiphp.com/utils/Server.html