我正在尝试将 JSON 编码的数据发布到驻留在我们公司 Microsoft Teams 渠道之一中的 webhook 端点。 它接受基本的 JSON 编码的有效载荷。

我从本地计算机上的 PostMan 开始,并将以下内容发布到我的 Teams Channel 连接器 webhook URL:

{
 "@context": "https://schema.org/extensions"
 "@type": "MessageCard",
 "themeColor": "0072C6",
 "title": "Test From PostMan",
 "text": "This is the text body of the notification card",
 "potentialAction": [
    {
      "@type": "OpenUri",
      "name": "View in Browser...",
      "targets": [
         { "os": "default", "uri": "https://<REDACTED>" }
      ]
    }
  ]
}

这工作正常,它将卡片发布到团队频道,并在其下方显示操作按钮。

所以我转向了 PHP,并编写了以下代码:

<?php
//api endpoint
$url = 'https://<REDACTED>';

//new curl connection
$ch = curl_init($url);

//build json data array
$postdata = array(
  '@context' => 'https://schema.org/extensions',
  '@type' => 'MessageCard',
  'themeColor' => '0072C6',
  'title' => 'Test from curl in PHP',
  'text' => 'test string.. test string.. test string.. test string.. test string.. test string.. test string..',
    'potentialAction' => array (
       '@type' => 'OpenUri',
       'name' => 'View in Browser...',
       'targets' => array (
          'os' => 'default',
          'uri' => 'https://<REDACTED>'
       )
   )
);

//encode json data array
$encodeddata = json_encode($postdata);

//set curl options
curl_setopt($ch, CURLOPT_POSTFIELDS, $encodeddata);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);

//debug
echo $result;

//close
curl_close($ch);
?>

当我运行上面的代码时,API 出错并响应说它是一个无效的负载。 所以我剥离了我的代码,这样我的$postdata数组就简单多了,如下所示:

//build json data array
$postdata = array(
  '@context' => 'https://schema.org/extensions',
  '@type' => 'MessageCard',
  'themeColor' => '0072C6',
  'title' => 'Test from curl in PHP',
  'text' => 'test string.. test string.. test string.. test string.. test string.. test string.. test string..'
);

这工作正常,我的 PHP 脚本能够将卡片发布到团队频道,只是它下面没有操作按钮。 所以我的问题在于我如何编码 $postdata 中的附加数组?

老实说,我对 PHP 数组的了解是有限的,我认为我这样做是正确的,但显然我遇到了问题,哈哈。 是否有不同/更好/更正确的方法将数组内的多个数组编码为 JSON 数据以进行 POST?

#1楼 票数:2 已采纳

原始 JSON 中的potentialAction是一个对象数组,但您仅在 PHP 数据结构中将其设为单级数组。

您需要将其包装到一个附加级别:

$postdata = array(
  '@context' => 'https://schema.org/extensions',
  '@type' => 'MessageCard',
  'themeColor' => '0072C6',
  'title' => 'Test from curl in PHP',
  'text' => 'test string.. test string.. test string.. test string.. test string.. test string.. test string..',
    'potentialAction' => array (
       array (
         '@type' => 'OpenUri',
         'name' => 'View in Browser...',
         'targets' => array (
            array (
              'os' => 'default',
              'uri' => 'https://<REDACTED>'
            )
         )
       )
   )
);

当您将其编码为 JSON 时,这将为您提供该位置的对象数组。 (外部数组有一个从零开始的数字索引,因此在转换为 JSON 时它仍然是一个数组;内部数组具有关联键,因此它会自动成为一个对象。)


编辑:正如评论中提到的,里面的targets属性也是如此。 编辑代码,在那里插入一个额外的级别。

  ask by Dave Byrne translate from so

未解决问题?本站智能推荐:

1回复

PHP编码JSON数组

我将如何在php中发布此json编码。 我的编码发布将不会发布任何超出公司变量的内容,我正在尝试让defaultPhoneNbr进行发布,但不会。 我想我需要某种多数组的帖子,但是然后我得到一个关于无法读取序列化的错误
1回复

将XML数据转换为ISO-8859-1以获取API调用POST数据

我有要用于发布到idibu API(英国的求职板API)的XML数据。 我已经用他们的测试POST数据成功致电。 这里是: 我已经能够在此处将其解码为标准XML格式: http : //coderstoolbox.net/string/#! encoding= url&act
3回复

如何使用PHP CURL编码对JSON的纯文本响应并获取特定数据

我正在以纯文本格式获取api响应。 因此,使用响应数据进行操作时,我需要将响应编码为JSON格式。 然后,我可以轻松获取欲望响应数据并使用它。 索取CODE(样品):: 响应码(示例):: 我想编码响应是这样的JSON格式- 并像这样抓取数据-
2回复

在PHP中检索JSON数据(具有“未定义属性”错误)

我想从API获取数据,而是继续获取​​“未定义属性”PHP错误。 我试图在数据中的数据中获得'SESSION_ID'。 (JSON / POST) 我检索SESSION_ID PHP代码是这样的。 首先,发送$data并获取SESSION_ID 。 因为我是PHP初学者
2回复

当以JSON返回时,如何保持数组结构不变?

我有一个问题,我有一些要通过API作为JSON返回的数据的多维数组,我希望这些数据作为JSON数组,该数组在PHP中的结构正确,但是当我通过API作为JSON返回时,它变成了作为对象的JSON对象,我希望数据的结构与生成数组时在PHP中保持的结构相同。 我尝试将对象转换为数组,数组在PHP中是
1回复

cURL发送的JSON的utf8mb4数据有错误

我在PHP中有一个脚本,该脚本从DDBB中的表中读取数据,设置JSON并通过cURL发送,但是端点接收到诸如重音错误( 急性 )之类的字符。 1)首先,我连接到bbdd并设置字符集: 数据库整理是utf8mb4_unicode_ci , 我不能改变它 。 2)我用信息建
1回复

显示来自IMDB API和json_decode函数的结果

我刚刚找到了IMDB API: 问题是我无法显示IMDB图表的结果。 通过defult API返回的结果是这样的: 如何使用此API显示十大电影标题和IMDB排行榜? 我在谷歌和stackoverflow搜索,但它是如此困难!
1回复

在php中编码/解码POST数据

我正在使用cURL来处理POST和检索页面。 我注意到正在尝试发布数据以对其进行编码的站点,例如: 如何在PHP中对此进行编码/解码? 我找到了可以为我做的网站,但是我想自己学习如何做。