php - 为 Asana php 创建 webhook

标签 php curl webhooks asana asana-api

我正在尝试在 Asana 中设置一个 Webhook,以向我发送特定项目的事件更新。我是新手,所以在阅读和回答时请记住这一点。我在这里发表的第一篇文章,所以请放轻松。这是我正在运行的代码。

asanawebhook.php 页面:

$headers = getallheaders();
$secret_token = $headers['X-Hook-Secret'];
header('X-Hook-Secret: ' . $secret_token);
header("HTTP/1.1 200 OK");

我的curl请求创建webhook:

$apikey = "mykey"; // Your API key
$taskid = "resourceid";

exec( 'curl \
-H "Authorization: Bearer '.$apikey.'" \
-H "Content-Type: application/x-www-form-urlencoded" \
-X POST https://app.asana.com/api/1.0/webhooks \
-d "resource='.$taskid.'" \
-d "target=https://mywebsite.com/folders/asanawebhook.php"', $return);

print_r($return);

这让我在我的页面上打印了这个错误。

Array ( [0] => {"errors":[{"message":"Could not complete activation handshake with target URL. Please ensure that the receiving server is accepting connections and supports SSL","help":"For more information on API status codes and how to handle them, read the docs on errors: https://asana.com/developers/documentation/getting-started/errors"}]} )

如果我可以让它返回某种成功消息,我假设我可以解析数据,然后向 Asana 发出一个curl 请求以获取完整的有效负载。提前致谢。

最佳答案

感谢您的联系!我是 Asana 的开发者倡导者,我想我知道什么可能会给您带来麻烦。 (不用担心,我们 Asana 非常友好!)

当您创建 Webhook 时,您要求 Asana 做的就是在您感兴趣的内容更改状态时调用您。也就是说,当您注册了 webhook 的项目发生更改时,我们的服务器将调用您的服务器,让您知道更改已经发生。

这意味着我们的服务器需要与您维护的公共(public)服务器取得联系。要检查情况是否如此,当您创建 webhook 时,有一个“握手”过程:

  1. 您调用 Asana 的 API 来创建 Webhook。这会暂时阻塞,同时:
  2. Asana 的服务器会向您在 target 中指定的位置发送 POST 请求,并将 header 设置为一个值,其中:
  3. 您使用相同的 header 值响应 200 OK 响应,最后
  4. 创建 Webhook 的原始调用返回 200 OK

如果您没有设置此握手,则 Webhook 创建的返回调用将会失败,并出现您所看到的错误。您可以在our API reference page for webhooks上查看有关此过程的更多技术细节。 。设置起来可能看起来需要做很多工作或来来回回,但此过程的设计目的是让您在创建 Webhook 时知道是否会收到 future 的回调,而不是悲伤、无声的失败 - 我们实际上在创建 Webhook 时测试了您是否可以。

作为替代方案,如果您不想创建和维护公开可用的服务器,您可能需要查看我们的 events应用程序接口(interface);这些很像 webhook,但您不希望在事情发生变化时被 Asana 的服务器调用,而是可以轮询自特定时间点(由我们提供给您的同步 token 表示)以来的变化。例如,您可以在特定时间点GET任务,还可以从/events端点GET该任务的同步 token 。此后,您可以定期在 /events 端点对同一资源创建 GET 请求并传递该同步 token ,我们将返回已更改的内容(如果有)因为您获得了该 token (并传回一个新的“发生这些更改后的最新” token 以供您在将来的调用中使用)。

我希望这可以帮助您再次前进!

关于php - 为 Asana php 创建 webhook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39935122/

相关文章:

json - webhook JSON 有效负载是否应该进行 URL 编码?

bitbucket - 远程触发 Bamboo 仅在 PR 上从 BitBucket Server webhook 构建?

PHP mysql 查询不适用于多个 "AND"运算符

php - json_decode file_get_contents 帮助

Perl LWP :UserAgent how to I add headers?

javascript - PHP 中的 URL 编码正斜杠

php - 如何每秒将文本打印到网页上?

php - Mongo 从集合中删除整个数组

javascript - 如何使用 cURL 或其他方式执行点击事件

python - 如何区分对同一个 Flask webhook 的两次不同调用?