Create webhook for Asana php


Create webhook for Asana php

我正在尝试在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"}]} )

如果我可以让它返回某种类型的成功消息,我假设我可以解析数据,然后做一个curl请求返回到Asana以获得完整的有效负载。

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

当你创建一个webhook时,你要求Asana做的是当你感兴趣的东西改变状态时呼叫你。也就是说,当你的webhook注册的项目发生变化时,我们的服务器会调用你的服务器,让你知道发生了变化。

这意味着我们的服务器需要与您维护的公共可用服务器取得联系。为了检查这种情况,当你创建一个webhook时,有一个"握手"过程:

    你调用Asana的API来创建一个webhook。这将暂时阻塞,当:
  1. Asana的服务器用POST请求回叫你到你在target中指定的位置,头设置为一个值,它:
  2. 您响应具有相同头值的200 OK响应,最后
  3. 创建webhook的原始调用返回200 OK

如果你没有设置这个握手,那么从webhook创建返回的调用将失败,并出现你所看到的错误。你可以在webhook的API参考页面上看到更多关于这个过程的技术细节。这看起来似乎要做很多工作或者来回设置,但是这个过程的设计是为了让你在创建webhook时知道你是否会得到未来的回调,而不是悲伤的,无声的失败-我们实际上在创建webhook时测试了你可以。

作为一种选择,如果你不想创建和维护一个公开可用的服务器,你可能想看看我们的事件API;这些很像webhook,但是当事情发生变化时,你不需要期待Asana的服务器调用你,你可以轮询从某个特定时间点开始的变化(由我们给你的同步令牌表示)。例如,您可以在特定时间点GET任务,也可以从/events端点GET该任务的同步令牌。在此之后,您可以定期在/events端点的相同资源上创建GET请求并传递该同步令牌,并且我们将返回自您获得该令牌以来发生的变化(如果有的话)(并传递一个新的"在这些变化发生后的最新"令牌供您在未来调用中使用)。

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

在仔细研究并向Asana寻求帮助后,我确定这是一个与SSL相关的问题。代码工作得很好,允许握手发生并设置webhook。我没有意识到的是,虽然我有一个SSL证书,但我没有设置它。

确保为webhook目标要访问的域正确配置SSL。