1С-Битрикс: Управление сайтом. Обработка post-запросов с стороннего сервиса
Всем привет!
имеется такая задача: на стороннем сервисе есть дашборд,где администратор заводит карточки товаров (название, описание, изображение, и.т.д) после чего нажимает кнопку "сохранить" и отправляет json с данными о товаре уже на cms(bitrix), после чего уже на стороне битрикса необходимо эти данные получить, корректно обработать, и записать в инфоблок.
Вопрос, как лучше всего и грамотней это реализовать? на данный момент придумал только следующее: создать в корне сайта папку api, где с помощью композера развернуть, допустим, symfony, и с помощью него обработать POST-запрос, после чего с помощью API битры добавить элемент в нужный инфоблок с нужными полями.
Допустим ли такой вариант, или можно все сделать намного проще? Впервые сталкиваюсь с подобной задачей, спасибо!
Ответы (1 шт):
Я думаю компонент ему будет лишний. Ему всего лишь нужно добавить новые элементы (товары) в инфоблок. А сами элементы он сможет вывести news.list или catalog, без разницы. Создаём скрипт в папке /local/api/receive_product.php, который будет принимать данные:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$inputData = file_get_contents('php://input');
$data = json_decode($inputData, true);
if (json_last_error() === JSON_ERROR_NONE) {
// Здесь обрабатываем данные и добавляем их в инфоблок
CModule::IncludeModule('iblock');
$el = new CIBlockElement;
$fields = [
"IBLOCK_ID" => <ID_инфоблока>,
"NAME" => $data['name'] ?? 'Без названия',
"PREVIEW_TEXT" => $data['description'] ?? '',
"DETAIL_PICTURE" => CFile::MakeFileArray($data['image'] ?? '')
];
if ($PRODUCT_ID = $el->Add($fields)) {
echo json_encode(['status' => 'success', 'product_id' => $PRODUCT_ID]);
} else {
echo json_encode(['status' => 'error', 'message' => $el->LAST_ERROR]);
}
} else {
echo json_encode(['status' => 'error', 'message' => 'Некорректный JSON']);
}
} else {
echo json_encode(['status' => 'error', 'message' => 'Неверный метод запроса']);
}
И всё, свои данные указать не забудьте, можно с параметром передавать и разные кейсы обрабатывать, прописав правило в urlrewrite