无法验证Slack对话框字段。 response_url调用总是失败

问题描述 投票:1回答:1

我正在尝试构建一个由斜杠命令触发的松弛对话框。弹出对话框正确,当用户提交数据时,松弛命中我的服务器上的端点。

从那一刻起,有两种可能的结果:

  1. 一切都很好,我向用户发布确认
  2. 用户提交的数据未通过我的应用验证,我需要让用户知道。

让我们专注于#2一秒钟:

我得到一个似乎有效的response_urlhttps:\/\/hooks.slack.com\/app\/MY-APP-ID\/433197747012\/kQANkbvc3lIViVyLSJKR695z

为了测试,我想用我的一个字段模拟验证错误,所以我在我的端点中执行此操作:

$errors = [
        'errors' => [
            [
                'name' => 'vendor_email',
                'error' => 'sorry, I do not like this dude'
            ]
        ]
    ];
// define the curl request
$ch = curl_init();
// $decoded->response_url does contain the correct slack URL...

curl_setopt($ch, CURLOPT_URL, $decoded->response_url);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Content-Type: application/x-www-form-urlencoded'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

// set the POST query parameters
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($errors));

// execute curl request
$response = curl_exec($ch);
error_log(" -- response_url response: " . json_encode($response). "\n", 3, './runtime.log');

// close
curl_close($ch);

我从击中response_url得到的回应是这样的:

{\"ok\":false,\"error\":\"invalid_request_data\"}

我究竟做错了什么?

******编辑************

即使没有进入CURL路线,只是这样做:

return json_encode($errors)

将在提交后关闭对话框,并且不会触发任何验证错误。

php slack-api slack-dialog
1个回答
1
投票

respond_url不是用于回复提交(例如,用于验证错误),而是用于在频道中向用户发送消息。

用户完成对话后,您将收到Slack的请求。您需要直接回复该请求。如果一切正常,您可以使用空响应进行响应 - 或者使用错误列表进行验证。响应必须是JSON,并在3秒内发生。

要做出响应,您需要做的就是在JSON中回显错误数组。还要确保将标头正确设置为JSON,如下所示:

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

如果没有错误,则只回显一下自动发送HTTP 200 OK。

另请参阅有关如何正确回复提交的文档中的here

© www.soinside.com 2019 - 2024. All rights reserved.