为Asana php创建webhook

为Asana php创建webhook,php,curl,webhooks,asana,asana-api,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");

我正在尝试在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发出curl请求以获得完整的负载。提前谢谢。

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

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

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

  • 您可以调用Asana的API来创建webhook。这将暂时阻止,同时:
  • Asana的服务器向您在
    target
    中指定的位置发出
    POST
    请求,并将标题设置为一个值,该值为:
  • 您使用
    200OK
    响应来响应,并使用相同的标题值,最后
  • 创建webhook的原始调用返回
    200ok
  • 如果没有设置此握手,那么来自webhook创建的返回调用将失败,并出现您看到的错误。您可以在上看到有关此过程的更多技术细节。设置起来可能需要做很多工作,但这个过程的设计是为了让您知道在创建webhook时,您是否会收到将来的回调,而不是悲伤的、无声的失败-我们实际上测试您在创建webhook时是否可以

    作为替代方案,如果您不想创建和维护一个公共可用的服务器,您可能需要查看我们的API;这些很像Webhook,但是当事情发生变化时,您不希望被Asana的服务器调用,而是可以在特定时间点(由我们提供给您的同步令牌表示)轮询更改。例如,您可以
    在特定时间点获取任务,还可以
    /events
    端点获取该任务的同步令牌。在此之后,您可以定期在
    /events
    端点的同一资源上创建
    GET
    请求,并传递该同步令牌,我们将返回自您获得该令牌以来所做的更改(如果有任何更改的话)(并传回一个新的“发生这些更改后最新的”令牌,供您在以后的调用中使用)


    我希望这有助于你再次行动起来

    在仔细研究并轮询Asana寻求帮助后,我确定这是一个与SSL相关的问题。该代码工作得很好,可以进行握手并设置webhook。我没有意识到的是,虽然我有一个SSL证书,但我没有设置它。确保为webhook目标将要访问的域正确配置了SSL。

    感谢Matt对此进行调查。我知道我需要握手。这就是我希望更好地理解的。通过这个周末的谷歌搜索,我可以把上面的代码组合起来。当我发送创建webhook的请求时,我与该页面的连接是否保持打开状态?换句话说,我是否需要在创建webhook的请求之后添加有关秘密令牌的信息?如果是这样的话,我是否打算在创建webhook后删除代码来设置它?有人向我指出,我在其中有一个错误的url。我不知道你指的是这个。实际上我的代码中没有URL,我只是把它放在那里以缩短它。。。在我的代码中,这是一个合法的公共url。我也通过电子邮件联系了Asana,他们说会将我的信息转发给你。只是想澄清一下,以防其他人读到。@DannyRamirez创建握手后,您得到的响应是否一致?有相同的问题-SSL正在工作。。。但同样的错误。对我有什么建议吗?我也有同样的问题,我该怎么解决?