1С-Битрикс: Управление сайтом. Обработка post-запросов с стороннего сервиса

Всем привет!

имеется такая задача: на стороннем сервисе есть дашборд,где администратор заводит карточки товаров (название, описание, изображение, и.т.д) после чего нажимает кнопку "сохранить" и отправляет json с данными о товаре уже на cms(bitrix), после чего уже на стороне битрикса необходимо эти данные получить, корректно обработать, и записать в инфоблок.

Вопрос, как лучше всего и грамотней это реализовать? на данный момент придумал только следующее: создать в корне сайта папку api, где с помощью композера развернуть, допустим, symfony, и с помощью него обработать POST-запрос, после чего с помощью API битры добавить элемент в нужный инфоблок с нужными полями.

Допустим ли такой вариант, или можно все сделать намного проще? Впервые сталкиваюсь с подобной задачей, спасибо!


Ответы (1 шт):

Автор решения: Web4You

Я думаю компонент ему будет лишний. Ему всего лишь нужно добавить новые элементы (товары) в инфоблок. А сами элементы он сможет вывести 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

→ Ссылка