Как использовать 1с битрикс в качестве сервера для API?
Мне нужно выводить информацию с 1с битрикс на поддомен. Это информация должна браться из базы битрикса и выдваться мне на поддомен, где я уже с нею должен проводить работу.
Никак не получается сделать возможность запроса данных.
<?php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
$APPLICATION->SetTitle("Калькулятор");
$IBLOCK_ID = intval($arParams['IBLOCK_ID']);
if ($IBLOCK_ID <= 0) {
$IBLOCK_ID = 34;
}
if (!CModule::IncludeModule("iblock")) {
die('iblock module is not included!');
}
$arSort = array("SORT" => "ASC", "NAME" => "ASC");
$arFilter = array("IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y");
$obIBlockResult = CIBlockElement::GetList($arSort, $arFilter, false, false, array("ID", "NAME","FILTER_PRICE", "MASS", ""));
$data = array();
while ($arFields = $obIBlockResult->GetNext()) {
$data[] = $arFields;
}
if (isset($_GET['ALL'])) {
echo json_encode($data);
exit;
}
if (isset($_GET['DETAIL_IMAGE'])) {
$pictureUrl = CFile::GetPath($_GET['DETAIL_IMAGE']);
echo CUtil::JSEscape($pictureUrl);
exit;
}
if (isset($_GET['ELEMENT_ID'])) {
$elementId = intval($_GET["ELEMENT_ID"]);
$obIBlockResult = CIBlockElement::GetByID($elementId);
if ($obIBlockResult && $obIBlockResult->SelectedElement()) {
$result = [];
while ($ob = $obIBlockResult->GetNextElement()) {
$arFields = $ob->GetFields();
$arProps = $ob->GetProperties();
$result[] = $arProps;
}
var_dump($result);
echo json_encode($result);
} else {
http_response_code(404);
echo "Элемент не найден";
}
}
?>
При попытке сделать запрос на этот url с кодом ALL, чтобы просто получить данные нужные, мне в ответ присылается header страницы + кусок информации.
Если я пробую убрать добавление header, то у меня просто не загружается страница, соответственно получаю 500 ответ.
Прошу подсказать способы, как мне информацию выводить.
Вот мини код, который пытаюсь вывести
import requests
url = "url"
response = requests.get(url)
if response.status_code == 200:
print("Ответ от сервера:")
print(response.text)
try:
data = response.json()
print("Данные в формате JSON:")
print(data)
except ValueError as e:
print("Ошибка при декодировании JSON:", e)
else:
print(f"Ошибка: {response.status_code}")
Ответы (1 шт):
Автор решения: Виктор Карев
→ Ссылка
Чтобы не выводился header, нужно в начале файла делать вызов
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
а в конце желательно
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_after.php');