为Asana php

时间:2016-10-08 17:14:34

标签: 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");

我创建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"}]} )

如果我可以返回某种成功消息,我假设我可以解析数据,然后向Asana执行卷曲请求以获得完整的有效负载。提前谢谢。

2 个答案:

答案 0 :(得分:1)

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

当您创建一个webhook时,您要求Asana做的是当您对更改状态感兴趣的内容时呼叫。也就是说,当某些事情发生变化,您已经注册了webhook时,我们的服务器会调用您的服务器让您知道更改已经发生。

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

  1. 您打电话给Asana的API以创建webhook。这会暂时阻止,而:
  2. Asana的服务器通过POST请求回拨您在target中指定的位置,并将标头设置为一个值,其中包含:
  3. 您使用相同的标头值回复200 OK响应,最后
  4. 创建webhook的原始调用将返回200 OK
  5. 如果您没有设置此握手,那么来自webhook创建的返回调用将失败,并显示您正在查看的错误。您可以在our API reference page for webhooks上查看有关此流程的更多技术细节。这可能看起来像很多工作或来回设置,但这个过程的设计是为了让你在创建webhook时知道,无论你是否会获得未来回调,而不是悲伤,沉默的失败 - 我们实际上在你创建webhook时测试你可以。

    作为替代方案,如果您不想创建和维护公开可用的服务器,您可能需要查看我们的events API;这些就像webhooks一样,但是当事情发生变化时,你可能不会期望Asana的服务器调用它,你可以在某个特定时间点轮询更改(由我们给你的同步令牌表示)。例如,您可以GET在特定时间点执行任务,并GET/events端点获取该任务的同步令牌。在此之后,您可以定期在GET端点上的同一资源上创建/events个请求并传递该同步令牌,并且我们将返回自您获得该令牌后已更改的内容(如果有) (并在这些更改发生后传回新的"最新的#34;令牌以供将来使用)。

    我希望这有助于让你再次活动!

答案 1 :(得分:1)

在仔细研究和调查Asana寻求帮助之后,我确定这对我来说是一个与SSL相关的问题。代码工作得很好,允许握手发生并设置webhook。我没有意识到的是,虽然我有一个SSL证书我没有设置它。确保为webhook目标所针对的域正确配置了SSL。