<?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');
?> |