Наполнение инфоблока данными через API DaData в 1С-Битрикс

Внимание! Работает режим премодерации. Все сообщения публикуются после проверки!
Страницы: 1
Ответить
RSS
Наполнение инфоблока данными через API DaData в 1С-Битрикс
Наполнение инфоблока данными через API DaData в 1С-Битрикс

В этой статье мы рассмотрим, как интегрировать API DaData для получения  информации о банках и сохранения этих данных в инфоблок 1С-Битрикс. Это  может быть полезно для создания базы данных с актуальной информацией о  банках на вашем сайте. Мы разберем пример кода, который получает данные о  банках по БИКам и сохраняет их в инфоблок, используя возможности  Битрикс.
Этот код автоматически загружает список БИК банков из файла, обращается к API DaData за подробной информацией о каждом банке и сохраняет эти данные как элементы в указанный инфоблок 1С-Битрикс с автоматическим созданием необходимых свойств.
  • Замените 14 на реальный ID вашего инфоблока.
  • Замените ваш_токен_здесь на ваш API-ключ с dadata.ru
  • Убедитесь, что файл bik.txt лежит в корне сайта и содержит по одному БИКу в строке.
  • После выполнения — удалите или защитите файл import_banks.php от публичного доступа.
Код
<?php
// Подключаем пролог Битрикс для доступа к API
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');

use Bitrix\Main\Loader;
use Bitrix\Iblock\PropertyTable;
use Bitrix\Iblock\ElementPropertyTable;

// Убедимся, что модуль инфоблоков загружен
if (!Loader::includeModule('iblock')) {
    die('Ошибка: модуль iblock не подключён.');
}

$iblockId = 14; // Замените на реальный ID вашего инфоблока "Банки"
$bicFilePath = $_SERVER['DOCUMENT_ROOT'] . '/bik.txt'; // Путь к файлу с БИКами

// Читаем БИКи из файла
$bicList = file($bicFilePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (!$bicList) {
    die('Файл bik.txt пуст или не найден.');
}

// Функция: создать или получить ID свойства инфоблока
function getOrCreateProperty($iblockId, $code, $name)
{
    $existing = PropertyTable::getList([
        'filter' => ['=IBLOCK_ID' => $iblockId, '=CODE' => $code],
        'select' => ['ID'],
    ])->fetch();

    if ($existing) return $existing['ID'];

    $result = PropertyTable::add([
        'IBLOCK_ID' => $iblockId,
        'NAME' => $name,
        'CODE' => $code,
        'ACTIVE' => 'Y',
        'SORT' => 500,
        'PROPERTY_TYPE' => 'S',
    ]);

    return $result->isSuccess() ? $result->getId() : false;
}

// Функция: установить значение свойства элемента
function setElementPropertyValue($elementId, $propertyId, $value)
{
    if (!strlen(trim($value))) return;

    $result = ElementPropertyTable::add([
        'IBLOCK_ELEMENT_ID' => $elementId,
        'IBLOCK_PROPERTY_ID' => $propertyId,
        'VALUE' => $value,
    ]);

    if (!$result->isSuccess()) {
        echo 'Ошибка записи свойства: ' . implode(', ', $result->getErrorMessages()) . '<br>';
    }
}

// Обработка каждого БИКа
foreach ($bicList as $bic) {
    $bic = trim($bic);
    if (empty($bic)) continue;

    // Запрос к DaData API
    $context = stream_context_create([
        'http' => [
            'method' => 'POST',
            'header' => [
                'Content-Type: application/json',
                'Accept: application/json',
                'Authorization: Token ваш_токен_здесь' // ← Замените на реальный API-ключ DaData
            ],
            'content' => json_encode(['query' => $bic], JSON_UNESCAPED_UNICODE)
        ]
    ]);

    $url = 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/findById/bank';
    $response = file_get_contents($url, false, $context);

    if (!$response) {
        echo "Нет ответа от DaData для БИК: $bic<br>";
        continue;
    }

    $data = json_decode($response, true);
    if (empty($data['suggestions'])) {
        echo "Нет данных по БИК: $bic<br>";
        continue;
    }

    $bank = $data['suggestions'][0]['data'];
    $bankName = $bank['name']['payment'] ?? 'Банк без названия';

    // Создаём элемент инфоблока
    $element = new CIBlockElement();
    $elementId = $element->Add([
        'IBLOCK_ID' => $iblockId,
        'NAME' => $bankName,
        'ACTIVE' => 'Y'
    ]);

    if (!$elementId) {
        echo "Ошибка создания элемента: " . $element->LAST_ERROR . "<br>";
        continue;
    }

    // Автоматически создаём свойства и заполняем их
    $props = [
        'data_bic' => ['БИК', $bank['bic'] ?? ''],
        'data_swift' => ['SWIFT', $bank['swift'] ?? ''],
        'data_inn' => ['ИНН', $bank['inn'] ?? ''],
        'data_kpp' => ['КПП', $bank['kpp'] ?? ''],
        'data_registration_number' => ['Рег. номер', $bank['registration_number'] ?? ''],
        'data_correspondent_account' => ['Корсчёт', $bank['correspondent_account'] ?? ''],
        'data_payment_city' => ['Город', $bank['payment_city'] ?? '']
    ];

    foreach ($props as $code => [$name, $value]) {
        $propId = getOrCreateProperty($iblockId, $code, $name);
        if ($propId) {
            setElementPropertyValue($elementId, $propId, $value);
        }
    }

    echo "Добавлен банк: $bankName (БИК: $bic)<br>";
}

require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_after.php');
?>
Изменено: Валерий Макеев - 06.09.2025 09:53:32
Страницы: 1
Ответить
Форма ответов
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Аутсорсинг

готов помочь, если нет времени

договорная

Могу взять на себя работы по full-stack

* на основе готовой верстки

Лечение сайтов от вирусов

восстановление сайта и подъем версии PHP

от 25 000 рублей
Лечение сайтов на решениях АСПРО и прочих.

* полный комплекс лечения проекта и закрытия дыр

Разработка интернет-магазина с готовой версткой

от 4 недель

от 90 000 рублей

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.