Php Can';t验证松弛对话框字段。响应url调用总是失败

Php Can';t验证松弛对话框字段。响应url调用总是失败,php,slack-api,slack-dialog,Php,Slack Api,Slack Dialog,我试图构建一个由斜杠命令触发的松弛对话框。对话框会正确弹出,当用户提交数据时,slack会点击我的服务器上的一个端点 从那一刻起,有两种可能的结果: 一切都很好,我给用户发了一封确认信 用户提交的数据未通过我的应用程序的验证,我需要让用户知道 让我们关注一下#2: 我得到了一个似乎有效的响应\u url(https:\/\/hooks.slack.com\/app\/MY-app-ID\/433197747012\/kQANkbvc3lIViVyLSJKR695z) 对于测试,我想用我的一个字段

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

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

  • 一切都很好,我给用户发了一封确认信
  • 用户提交的数据未通过我的应用程序的验证,我需要让用户知道 让我们关注一下#2:

    我得到了一个似乎有效的
    响应\u url
    https:\/\/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\u url
    得到的响应如下:

    {\'ok\':false,\'error\':\'invalid\u request\u data\'}

    我做错了什么

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

    即使不走卷曲路线,只是这样做:

    返回json\u encode($errors)


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

    响应url不是用于回复提交内容(例如验证错误),而是用于将消息发送回频道中的用户

    用户完成对话框后,您将收到Slack的请求。您需要直接响应该请求。如果一切正常,您可以用空响应响应,也可以使用一个验证错误列表来响应。响应必须是JSON格式,并且必须在3秒内发生

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

    header('Content-Type: application/json');
    echo json_encode($errors);
    
    如果没有错误,只需不回显即可自动发送HTTP 200 OK


    另请参见文档中有关如何正确响应提交的内容。

    那么为什么需要它呢?为什么不直接使用chat.PostMessage与用户通信?你有渠道信息等。你的建议很有效,我会实施的。我仍然不明白的是,当我有chat.PostMessage和我需要使用它的所有信息时,为什么我需要一个专门的响应url来向用户发送消息。很高兴提供帮助
    response\u url
    适用于您在专用频道中使用斜杠命令而应用程序无法访问该专用频道的情况。然后,
    response\u url
    是向该专用频道发送消息的唯一方式。