Php Slack在对话框交互后发送无效、格式错误的JSON数据
我正在使用一个可以调用对话框的斜杠命令Php Slack在对话框交互后发送无效、格式错误的JSON数据,php,slack-api,slack-commands,slack-dialog,Php,Slack Api,Slack Commands,Slack Dialog,我正在使用一个可以调用对话框的斜杠命令 $dialog = [ 'callback_id' => 'ryde-46e2b0', 'title' => 'Request a Ride', 'submit_label' => 'Request', 'elements' => [ [ 'type' => 'text',
$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);
当我发出斜杠命令时,我的测试对话框成功打开
然后在字段中填写两个测试值test1和test2,并提交请求。对话数据负载正确命中我的端点,但发送的数据不是有效的JSON:
$u 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。为什么会这样
以下是从Slack处理POST的代码:
error_log(" -- dialog response: " . json_encode($_POST) . "\n", 3, './runtime.log');
这导致了上面的输出。我不知道为什么要调用json\u encode$\u POST。非常清楚将发送的格式:
$payload = filter_input(INPUT_POST, 'payload');
$decoded = json_decode($payload);
var_dump($decoded);
负载本身是一个json字符串,因此需要对其进行转义。我不知道他们为什么这样做,但是。。。它看起来也像是旧PHP中死掉的addslashes行为的副作用。你们这里有个奇怪的问题,我使用的是PHP7版本。1@JasonGenX,能否显示接受post数据的代码?基于,您显示的内容与Slack应该发送的内容不一样。简单。错误\u日志-对话框响应:。json_encode$_POST\n、 3'./runtime.log';这就引出了我上面展示的奇怪的JSON格式。将来,当有人询问其他信息时,你应该将其编辑到你的问题中,而不是作为评论添加。在这种情况下,我是为你做的。是的。就是那个。过滤输入是我丢失的东西。在经历了JSON的怪异之后,我直接调用$u POST只是为了调试。我想检查我的数据的“来源”。无论如何-谢谢你的帮助。使用$\u POST没有什么错。您正在对POST数据调用json_encode。该POST数据包含JSON。这就是为什么JSON看起来是双转义的。