@rusgayfer

Как принять POST запросы и создать готовый json (клавиатура ботов вк)?

Через POST запрос приходят такой массив, содержащий количество кнопок в один столбец и до четырех кнопок в одну строку. Как создать готовый json через PHP из этих данных? Проблема в том, что создается только в один столблец кнопки

// В таком ввиде приходят на сервер
$keyboard[0][1]['text'] // Первая кнопка 1 стоблец
$keyboard[0][2]['text'] // Вторая кнопка 1 стоблец
$keyboard[0][3]['text'] // Третья кнопка 1 стоблец
$keyboard[0][4]['text'] // Четвертая кнопка 1 стоблец
$keyboard[1][0]['text'] // Первая кнопка 2 стоблец
$keyboard[2][0]['text'] // Первая кнопка кнопка 3 стоблец
$keyboard[2][1]['text'] // Вторая кнопка кнопка 3 стоблец
// Так же цвет и т д

// Вот такой JSON у этой клавиатуры должен получиться
{"one_time":false,"buttons":[[{"action":{"type":"text","payload":"{\"button\": \"1\"}","label":"Кнопка"},"color":"primary"},{"action":{"type":"text","payload":"{\"button\": \"2\"}","label":"Кнопка"},"color":"primary"},{"action":{"type":"text","payload":"{\"button\": \"3\"}","label":"Кнопка"},"color":"primary"},{"action":{"type":"text","payload":"{\"button\": \"4\"}","label":"Кнопка"},"color":"primary"}],[{"action":{"type":"text","payload":"{\"button\": \"1\"}","label":"Кнопка"},"color":"primary"}],[{"action":{"type":"text","payload":"{\"button\": \"1\"}","label":"Кнопка"},"color":"primary"},{"action":{"type":"text","payload":"{\"button\": \"2\"}","label":"Кнопка"},"color":"primary"}]]}


$action = array();
			foreach($_POST['keyboard'] as $keyboard) {
				foreach($keyboard as $button) {

					$actions = [
						'action' => array(
						"type" => "text",
						"payload" => "{\"button\":\"1\"}",
						'label' => $button['text'],
						),
						'color' => $button['color'],
					];

				$action[] = array($actions);

			}

			$keyboard = [
				"one_time" => false,
				'buttons' => $action,
			  ];
	}

	$json_keyboard = json_encode($keyboard, JSON_UNESCAPED_UNICODE);


Вот такой приходит POST запрос через jQuery с параметрами, их нужно принять и сформировать json для клавиатуры.
5c3fce5aef6a5283374880.png

Документация: Клавиатура ботов
  • Вопрос задан
  • 289 просмотров
Решения вопроса 2
boyarskiy_mihail
@boyarskiy_mihail
$json = [
  'one_time'  => false,
  'buttons'   => []
];
foreach( $keyboard as $row ) {
  $buttons = [];
  foreach( $row as $k => $button ) {
    $buttons []= [
      'action'  => [
        'type'  => 'text',
        'payload' => '{"button": "' . ($k + 1). '"}', //
        'label' => $button['text']
      ],
      'color' => $button['color']
    ];
  }
  $json['buttons'][] = $buttons;
}

print_r($json);
echo json_encode($json);
Ответ написан
Delgus
@Delgus
Ну так и сделайте многомерный массив
$action = array();
     $allButtons = [];//все кнопки
      foreach($_POST['keyboard'] as $keyboard) {
      $actionRow = [];//один ряд
        foreach($keyboard as $button) {

          $action = [
            'action' => array(
            "type" => "text",
            "payload" => "{\"button\":\"1\"}",
            'label' => $button['text'],
            ),
            'color' => $button['color'],
          ];

        $actionRow[] = $action;//добавляем кнопку в ряд

      }
      $allButtons[] = $actionRow;//добавляем ряд в массив со всеми кнопками
  
  }
   $keyboard = [
        "one_time" => false,
        'buttons' =>$allButtons,
        ];

  $json_keyboard = json_encode($keyboard, JSON_UNESCAPED_UNICODE);


Так наверное?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы