Я пытаюсь POST JSON закодировать данные в конечную точку webhook, которая находится на одном из каналов нашей компании Microsoft Teams. Он принимает базовые c JSON кодированные полезные нагрузки.
Я запустил PostMan на своем локальном компьютере и отправил следующее сообщение на URL-адрес веб-подключения коннектора канала Teams:
{
"@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?