【问题标题】:How to View Slack Payload Body Content in Laravel如何在 Laravel 中查看 Slack Payload Body 内容
【发布时间】:2017-06-22 05:04:05
【问题描述】:

因此,在使用交互式消息时,我在尝试从 Slack 取回有效负载时遇到了一些麻烦。我用按钮发送消息。我已经正确设置了所有内容,Slack 可以很好地访问我的返回 URL。

问题是我不知道如何从请求中检索“有效负载”? Slack 文档说:

“您的操作 URL 将收到一个 HTTP POST 请求,包括一个有效负载主体参数,它本身包含一个 application/x-www-form-urlencoded JSON 字符串。”

我想我不知道这意味着什么。我认为这意味着你会得到一个“有效负载”的 POST 变量,但事实并非如此。

在 Laravel 中,我正在使用以下内容来尝试取回一些东西:

$request = Request::all();
$test = Response::json($request);

然后我把这个发给自己看看,结果如下:

object(Illuminate\Http\JsonResponse)#277 (10) {
  ["jsonOptions":protected]=>
  int(0)
  ["data":protected]=>
  string(2) "[]"
  ["callback":protected]=>
  NULL
  ["encodingOptions":protected]=>
  int(15)
  ["headers"]=>
  object(Symfony\Component\HttpFoundation\ResponseHeaderBag)#332 (5) {
    ["computedCacheControl":protected]=>
    array(1) {
      ["no-cache"]=>
      bool(true)
    }
    ["cookies":protected]=>
    array(0) {
    }
    ["headerNames":protected]=>
    array(3) {
      ["cache-control"]=>
      string(13) "Cache-Control"
      ["date"]=>
      string(4) "Date"
      ["content-type"]=>
      string(12) "Content-Type"
    }
    ["headers":protected]=>
    array(3) {
      ["cache-control"]=>
      array(1) {
        [0]=>
        string(8) "no-cache"
      }
      ["date"]=>
      array(1) {
        [0]=>
        string(29) "Thu, 22 Jun 2017 04:51:13 GMT"
      }
      ["content-type"]=>
      array(1) {
        [0]=>
        string(16) "application/json"
      }
    }
    ["cacheControl":protected]=>
    array(0) {
    }
  }
  ["content":protected]=>
  string(2) "[]"
  ["version":protected]=>
  string(3) "1.0"
  ["statusCode":protected]=>
  int(200)
  ["statusText":protected]=>
  string(2) "OK"
  ["charset":protected]=>
  NULL
}

没有“Body Parameter”没有“Payload”变量。我真的很困惑。任何帮助将不胜感激。

【问题讨论】:

    标签: laravel laravel-4 slack-api


    【解决方案1】:

    我可以确认 Slack 正在发回一个 POST 请求,其正文中包含一个有效负载参数。我不熟悉 Laravel 框架,但这是我用普通 PHP 接收它的方式:

    $payload_json = filter_input(INPUT_POST, 'payload', FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES);
    $payload = json_decode ($payload_json, true);
    

    之后,$payload 参数包含一个包含请求内容的数组。

    如果我正确理解了您的代码(前 2 行),您正试图将整个请求解释为 JSON,这将不起作用。您需要先提取有效负载,然后将其从 JSON 解码为 PHP 对象。

    但是,我建议首先通过记录您收到的每个请求的内容(例如,通过记录$_POST 的内容)来确保您在操作 URL 上完全收到 Slack 请求

    【讨论】:

    • 嗯,有趣的是,每当我尝试使用时: $payload = Input::get("payload") 它将获得任何 GET 或 POST 变量,它总是空的,我想不出找出原因,这就是为什么我试图提取整个响应,但我也没有看到在那里发送 Payload 变量。我会尝试修改您的信息并将其应用于 Laravel。
    • 嗯。你确定你收到了来自 Slack 的请求吗?听起来不像你。顺便提一句。您还可以使用 $entityBody = file_get_contents('php://input'); 从 POST 请求中获取完整的原始正文。
    • 也许我猜不是?但是为什么 Slack 会用一个空请求来访问我的 webhook?如果有问题,他们不会发送类似错误的东西吗?或者他们不会只是没有击中它?
    • 根据我的经验。如果交互式消息出现问题,单击按钮的用户会在 Slack 中收到错误消息
    • 您还可以模拟 Slack 对您的“webhook”的请求,以查看该请求是否有效。 hurl.it
    猜你喜欢
    • 2018-11-25
    • 2017-08-20
    • 2015-08-19
    • 2012-04-08
    • 2014-10-27
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多