我正在使用PHP在Slack和Filemaker之间进行集成。我成功地让代码根据json请求在Filemaker中创建了一条记录,并且将质询密钥返回给Slack也没有问题。
然而,在将挑战传递回Slack时,我遇到了将头响应200OK传递给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的挑战代码,同时还返回一个200OK的HTTP头。
目前我可以看到我从Slack收到了一个"http_error“的错误,这让我相信问题是报头没有被成功传回。
任何关于错误之处的想法,或者关于正确方向的建议,都将不胜感激。
发布于 2017-12-13 08:07:50
之所以会出现这个问题,是因为对于事件,slack在发送事件时不会将“挑战”作为参数发送。看起来只有在最初设置事件API的URL时才需要回显"challenge“。
我将挑战回显封装在一个if语句中,该语句仅在挑战变量存在的情况下触发。完成此操作后,成功通过了200OK。
下面是我用来解决这个问题的代码:
$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);
}发布于 2017-12-13 00:52:56
在这个主题上,documentation实际上有点不一致。它声称您可以在计划文本中响应挑战,但该示例将其显示为x-www-form-urlencoded。
为了安全起见,请尝试将挑战作为JSON返回。这对我来说非常有效。您也不需要显式设置HTTP 200代码。
示例代码:
$message = [
"challenge" => $data["challenge"]
];
header('content-type: application/json');
echo json_encode($message);https://stackoverflow.com/questions/47768505
复制相似问题