В этой статье мы рассмотрим, как интегрировать API DaData для получения информации о банках и сохранения этих данных в инфоблок 1С-Битрикс. Это может быть полезно для создания базы данных с актуальной информацией о банках на вашем сайте. Мы разберем пример кода, который получает данные о банках по БИКам и сохраняет их в инфоблок, используя возможности Битрикс.

О том как подключиться к API DaData, подробно рассказали в статье - Как отправить AJAX запрос к API Dadata для получения и вывода информации на странице. Изучите прежде ее.
Задача
Мы хотим автоматизировать процесс получения информации о банках через API DaData и сохранения этой информации в инфоблок 1С-Битрикс. У нас есть файл, содержащий список БИКов банков, и нам необходимо для каждого БИКа получить информацию о соответствующем банке и создать элемент в инфоблоке.
Пример файла с кодами БИК банков bik.txt
, который лежит в корне сайта:
044525710
044525709
044525706
044525703
044525701
044525700
044525699
044525697
044525696
044525695
Пример кода
Ниже приведен пример PHP-кода, который реализует эту задачу.
<?php
// Подключаем пролог Битрикса
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');
use Bitrix\Main\Loader;
use Bitrix\Iblock\PropertyTable;
use Bitrix\Iblock\ElementPropertyTable;
// Проверяем, что модуль iblock доступен
if (!Loader::includeModule('iblock')) {
die('Модуль iblock не установлен.');
}
$iblockId = 14; // ID инфоблока "banks"
$bicFilePath = $_SERVER['DOCUMENT_ROOT'] . '/bik.txt';
$bicList = file($bicFilePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (!$bicList) {
die('Не удалось считать список БИК из bik.txt');
}
/**
* Создаёт или возвращает ID существующего свойства
*
* @param int $iblockId
* @param string $propertyCode
* @param string $propertyName
* @return int|false
*/
function getOrCreateProperty($iblockId, $propertyCode, $propertyName)
{
// Ищем свойство по коду
$existing = PropertyTable::getList([
'filter' => [
'=IBLOCK_ID' => $iblockId,
'=CODE' => $propertyCode
],
'select' => ['ID'],
'limit' => 1,
])->fetch();
// Если нашли, возвращаем
if ($existing) {
return $existing['ID'];
}
// Иначе создаём
$addResult = PropertyTable::add([
'IBLOCK_ID' => $iblockId,
'NAME' => $propertyName,
'CODE' => $propertyCode,
'ACTIVE' => 'Y',
'SORT' => 500,
'PROPERTY_TYPE' => 'S',
]);
if ($addResult->isSuccess()) {
return $addResult->getId();
} else {
echo 'Ошибка при создании свойства: ' . implode(', ', $addResult->getErrorMessages());
return false;
}
}
/**
* Устанавливает значение для свойства элемента
*
* @param int $elementId
* @param int $propertyId
* @param string $value
*/
function setElementPropertyValue($elementId, $propertyId, $value)
{
if (!strlen($value)) {
return;
}
$result = ElementPropertyTable::add([
'IBLOCK_ELEMENT_ID' => $elementId,
'IBLOCK_PROPERTY_ID' => $propertyId,
'VALUE' => $value,
]);
if (!$result->isSuccess()) {
echo 'Ошибка при установке значения свойства: ' . implode(', ', $result->getErrorMessages());
}
}
// Перебираем все БИКи из файла
foreach ($bicList as $bic) {
$bic = trim($bic);
if (!$bic) {
continue;
}
// Готовим POST-запрос к DaData
$data = ['query' => $bic];
$options = [
'http' => [
'method' => 'POST',
'header' => [
'Content-Type: application/json',
'Accept: application/json',
// Замените токен на ваш реальный токен DaData
'Authorization: Token Ваш_Код_API'
],
'content' => json_encode($data, JSON_UNESCAPED_UNICODE),
],
];
$context = stream_context_create($options);
$url = 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/findById/bank'; // Правильное определение URL
$responseJson = file_get_contents($url, false, $context);
if (!$responseJson) {
echo "Ошибка при получении данных от DaData для БИК: $bic\n";
continue;
}
// Превращаем JSON-строку в массив
$response = json_decode($responseJson, true);
if (!isset($response['suggestions']) || !is_array($response['suggestions'])) {
echo "Некорректный ответ от DaData для БИК: $bic\n";
continue;
}
// Обрабатываем результаты из DaData
foreach ($response['suggestions'] as $bankData) {
$bankName = $bankData CIBlockElement
$iblockElement = new CIBlockElement();
// Создаём элемент инфоблока (указываем ACTIVE => 'Y', чтобы элемент был виден в админке)
$arFields = [
'IBLOCK_ID' => $iblockId,
'NAME' => $bankName,
'ACTIVE' => 'Y',
];
$elementId = $iblockElement->Add($arFields);
if (!$elementId) {
echo 'Ошибка при создании элемента: ' . $iblockElement->LAST_ERROR;
continue;
}
$dataBlock = $bankData['data'];
if (!$dataBlock) {
continue;
}
// Пример привязки основных полей (БИК, SWIFT, ИНН, КПП и т.д.)
// БИК
$propIdBic = getOrCreateProperty($iblockId, 'data_bic', 'БИК');
if ($propIdBic) {
setElementPropertyValue($elementId, $propIdBic, $dataBlock['bic']);
}
// SWIFT
$propIdSwift = getOrCreateProperty($iblockId, 'data_swift', 'SWIFT');
if ($propIdSwift) {
setElementPropertyValue($elementId, $propIdSwift, $dataBlock['swift']);
}
// ИНН
$propIdInn = getOrCreateProperty($iblockId, 'data_inn', 'ИНН');
if ($propIdInn) {
setElementPropertyValue($elementId, $propIdInn, $dataBlock['inn']);
}
// КПП
$propIdKpp = getOrCreateProperty($iblockId, 'data_kpp', 'КПП');
if ($propIdKpp) {
setElementPropertyValue($elementId, $propIdKpp, $dataBlock['kpp']);
}
// Регистрационный номер в ЦБ РФ
$propRegNum = getOrCreateProperty($iblockId, 'data_registration_number', 'Рег. номер в ЦБ РФ');
if ($propRegNum) {
setElementPropertyValue($elementId, $propRegNum, $dataBlock['registration_number']);
}
// Корреспондентский счёт
$propCorr = getOrCreateProperty($iblockId, 'data_correspondent_account', 'Корреспондентский счёт');
if ($propCorr) {
setElementPropertyValue($elementId, $propCorr, $dataBlock['correspondent_account']);
}
// Город для платежей
$propPaymentCity = getOrCreateProperty($iblockId, 'data_payment_city', 'Город для платежей');
if ($propPaymentCity) {
setElementPropertyValue($elementId, $propPaymentCity, $dataBlock['payment_city']);
}
// При необходимости добавляйте остальные поля по тому же принципу
}
}
// Подключаем эпилог Битрикса
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_after.php');
Разбор кода
- Подключение пролога Битрикса: Этот код подключает необходимые модули Битрикса для работы с инфоблоками.
- Чтение списка БИКов: Читаем файл
bik.txt
, который содержит список БИКов, и сохраняем их в массив. - Функции для работы с свойствами инфоблока:
getOrCreateProperty
: Проверяет, существует ли уже свойство инфоблока с заданным кодом. Если нет, создаёт его.setElementPropertyValue
: Устанавливает значение для свойства элемента инфоблока.
- Обработка каждого БИКа: Для каждого БИКа из списка выполняем запрос к API DaData, получаем информацию о банке и сохраняем её в инфоблок, создавая элементы с нужными данными.
- Завершение работы с Битрикс: В конце подключения вызывается эпилог, который завершает выполнение.
В итоге мы получим

Этот подход позволяет автоматизировать процесс пополнения базы данных банков и значительно упростить поддержку актуальной информации на сайте.
Если вам требуется проставить символьными коды, то измените предложенный код или воспользуйтесь информацией из статьи - Массовая простановка символьных кодов в Битриксе.