Slack Events PHP响应

时间:2017-12-12 08:52:18

标签: php slack

我正在利用PHP开发Slack和Filemaker之间的集成。我成功地让代码在基于json请求的Filemaker中创建记录,并且也可以毫无困难地将挑战密钥返回给Slack。

但是,我在将攻击传递回Slack时无法将标题响应200 OK传递给Slack。看起来它必须是一个或另一个。

我已经尝试将HTTP标头移动到代码中的不同区域,但到目前为止还没有取得任何成功。

以下是当前代码:

<?php



$data = json_decode(file_get_contents('php://input'), true);

if (!isset($data["challenge"])) {
    $body = $_SERVER['HTTP_X_SLACK_RETRY_REASON'];


    require_once ('Filemaker.php');

    //$body = file_get_contents('php://input');




    $fm = new Filemaker();
    $fm->setProperty('database', '');
    $fm->setProperty('username', '');
    $fm->setProperty('password', '');



    $command = $fm->newPerformScriptCommand('PHP_RESPONSE', 'script', $body);
    $result = $command->execute();

}

else {

    header("Content-Type: text/plain");
    header('X-PHP-Response-Code: 200', true, 200);
    echo $data["challenge"];
}

?>

我期望的结果是代码返回Slack的质询代码,同时还返回200 OK的HTTP头。

目前我可以看到我收到错误&#34; http_error&#34;来自Slack,这让我相信问题是标题没有成功传回。

任何有关错误的想法或关于正确方向的建议都将不胜感激。

2 个答案:

答案 0 :(得分:1)

问题出现了,因为事件松弛不会在发送事件时将“challenge”作为参数发送。看起来只有在最初设置事件API的URL时才需要回显“挑战”。

我将挑战echo包含在if语句中,该语句仅在挑战变量存在时触发。完成后,200 OK成功通过。

以下是我用来解决问题的代码:

$data = json_decode(file_get_contents('php://input'), true);
if (isset($data["challenge"])) {
    $message = [
        "challenge" => $data["challenge"]
    ];

    header('Content-Type: application/json');
    echo json_encode($message);
}

答案 1 :(得分:0)

documentation实际上在这个主题上有点不一致。它声称您可以在计划文本中回应挑战,但该示例将其显示为x-www-form-urlencoded。

为了安全起见,请尝试将挑战作为JSON返回。这对我来说非常合适。您也不需要显式设置HTTP 200代码。

示例代码:

$message = [
    "challenge" => $data["challenge"]
];  
header('content-type: application/json');
echo json_encode($message);