为 Asana 创建 Webhook php

Create webhook for Asana php

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

asanawebhook.php 页数:

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

我创建 webhook 的 curl 请求:

$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"}]} )

如果我可以将其发送到 return 某种成功消息,我假设我可以解析数据,然后向 Asana 发出 curl 请求以获取完整的有效负载。提前致谢。

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

当您创建 webhook 时,您要求 Asana 做的是 呼叫您 当您感兴趣的事物状态发生变化时。也就是说,当发生更改您已注册 webhook 的项目时,我们的服务器将调用您的服务器,让您知道更改已经发生。

这意味着我们的服务器需要与您维护的 publicly-available 服务器取得联系。要检查是否属于这种情况,当您创建 webhook 时,有一个 "handshake" 过程:

  1. 您调用 Asana 的 API 来创建网络钩子。这会暂时阻塞,同时:
  2. Asana 的服务器通过 POST 请求回拨到您在 target 中指定的位置,并将 header 设置为一个值,该值:
  3. 你用相同的 header 值回复 200 OK,最后
  4. 使用 200 OK 创建 Webhook return 的原始调用。

如果您没有设置此握手,则来自 webhook 创建的 return 调用将失败并出现您看到的错误。您可以在 our API reference page for webhooks 上查看有关此过程的更多技术细节。设置起来似乎需要很多工作或 back-and-forth,但此过程旨在让您在创建 Webhook 时 知道 是否会获得未来的回调,而不是悲伤的、无声的失败——我们实际上测试了您在创建 webhook 时的能力。

作为替代方案,如果您不想创建和维护 publicly-available 服务器,您可能需要查看我们的 events API;这些很像 webhooks,但你并不期望在事情发生变化时被 Asana 的服务器调用,你可以轮询自特定时间点以来的变化(由我们给你的同步令牌表示)。例如,您可以 GET 特定时间点的任务,以及 GET 来自 /events 端点的该任务的同步令牌。在此之后,您可以定期在 /events 端点对同一资源创建 GET 请求并传递该同步令牌,我们将 return 自您获得以来发生了哪些变化(如果有的话)该令牌(并传回一个新的 "up to date after these changes have happened" 令牌供您在以后的调用中使用)。

我希望这能帮助你再次动起来!

在仔细研究和轮询 Asana 寻求帮助后,我确定这对我来说是一个与 SSL 相关的问题。该代码运行良好,允许进行握手并设置 webhook。我没有意识到的是,虽然我有 SSL 证书,但我没有设置它。确保为 Webhook 目标所在的域正确配置了 SSL。