Slack отправляет неверные, неправильно сформированные данные JSON после диалога Dialog - PullRequest
0 голосов
/ 10 сентября 2018

Я работаю над командой слэша, которая вызовет диалоговое окно.

 $dialog = [
        'callback_id' => 'ryde-46e2b0',
        'title' => 'Request a Ride',
        'submit_label' => 'Request',
        'elements' => [
            [
                'type' => 'text',
                'label' => 'Pickup Location',
                'name' => 'loc_origin'
            ],
            [
                'type' => 'text',
                'label' => 'Dropoff Location',
                'name' => 'loc_destination'
            ]
        ]
    ];

    // get trigger ID from incoming slash request
    $trigger = filter_input(INPUT_POST, "trigger_id");

    // define POST query parameters
    $query = [
        'token' => 'XXXXXXXXX MY TOKEN XXXXXXXXX',
        'dialog' => json_encode($dialog),
        'trigger_id' => $trigger
    ];

    // define the curl request
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://slack.com/api/dialog.open');
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        '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($query));

    // execute curl request
    $response = curl_exec($ch);

    // close
    curl_close($ch);

    var_export($response);

Когда я запускаю команду слэша, мое тестовое диалоговое окно открывается успешно

enter image description here

Затем я заполняю два тестовых значения test1 и test2 в полях и отправляю запрос.Моя конечная точка правильно загружена данными диалогового окна, но отправленные данные недопустимы. JSON:

Значение $_POST: (Я замаскировал все идентифицирующие токены / идентификаторы с помощью xxx)

{"payload":"{\\\"type\\\":\\\"dialog_submission\\\",\\\"token\\\":\\\"XXX\\\",\\\"action_ts\\\":\\\"1536603864.688426\\\",\\\"team\\\":{\\\"id\\\":\\\"xxx\\\",\\\"domain\\\":\\\"ourdomain\\\"},\\\"user\\\":{\\\"id\\\":\\\"xxx\\\",\\\"name\\\":\\\"my_name\\\"},\\\"channel\\\":{\\\"id\\\":\\\"xxx\\\",\\\"name\\\":\\\"directmessage\\\"},\\\"submission\\\":{\\\"loc_origin\\\":\\\"test1\\\",\\\"loc_destination\\\":\\\"test2\\\"},\\\"callback_id\\\":\\\"ryde-46e2b0\\\",\\\"response_url\\\":\\\"https:\\\\/\\\\/hooks.slack.com\\\\/app\\\\/XXX\\\\/XXX\\\\/XXX\\\",\\\"state\\\":\\\"\\\"}"}

Это недопустимый JSON, даже если экземпляры "\\" удалены.Почему это происходит?

Вот код, который обрабатывает POST из Slack:

error_log(" -- dialog response: " . json_encode($_POST) . "\n", 3, './runtime.log');

, что приводит к выводу выше.

1 Ответ

0 голосов
/ 10 сентября 2018

Я не уверен, почему вы звоните json_encode($_POST). В документации очень четко указан формат, который будет отправлен:

$payload = filter_input(INPUT_POST, 'payload');
$decoded = json_decode($payload);

var_dump($decoded);
...