13Июн/180
Обновление курса валют в Битрикс
Для Битрикса есть популярное решение для обновление курса валют - https://marketplace.1c-bitrix.ru/solutions/asd.currencyrate/
Однако, решение не работает, если базовая валюта не рубли.
В моём случае, когда это фунты(GBP), решаю это вот таким куском гавнокода:
<?php include __DIR__ . '/bitrix.php'; $contents = file_get_contents('http://www.cbr.ru/scripts/XML_daily.asp'); $neededCurrency = 'GBP'; // Глупая проверка на то, что нам вернули что-то нормальное if (stripos($contents,$neededCurrency) > 0) { $xml = simplexml_load_string($contents); $date = $xml->attributes()->Date; CModule::IncludeModule('currency'); $format = "DD.MM.YYYY"; // получим формат текущего сайта $new_format = CSite::GetDateFormat("SHORT"); // переведем дату из одного формата в другой $new_date = $DB->FormatDate($date, $format, $new_format); // в результате получим дату в новом формате echo "Date $date - $new_date\n"; $arFilter = [ "CURRENCY" => "RUB", 'DATE_RATE' => $new_date, ]; $by = "date"; $order = "desc"; $row = CCurrencyRates::GetList($by, $order, $arFilter)->Fetch(); if ($row === false) { foreach ($xml->Valute as $valute) { if (((string)$valute->CharCode) === $neededCurrency) { $value = (float)str_replace(',', '.', ((string)$valute->Value) ?? 0); if ($value > 0) { $value = number_format(1 / $value * 1.05, 4, '.', ''); $arFields = [ "RATE" => $value, "RATE_CNT" => 1, "CURRENCY" => "RUB", "DATE_RATE" => $new_date, ]; if (!CCurrencyRates::Add($arFields)) { echo "Ошибка добавления курса $date - $value\n"; echo $APPLICATION->GetException() . "\n\n"; } else { echo "Обновили курс $date - $value\n"; } return; } } } } else { echo "Курс на $date уже есть\n"; } }
Понравилась статья?
Комментарии (0)
Пинги (0)
(подписаться на новые комментарии в этой ветке)
Нет обратных ссылок на эту запись.
Leave a comment