Курсы ЦБ РФ
Курсы валют по данным Банка России для OpenCart 4: расширение типа «Курсы валют», обновление по планировщику и кнопкой, рублёвая или любая другая основная валюта.
Назначение и совместимость
Штатные источники курсов OpenCart 4 (Европейский центробанк, fixer.io) не публикуют курс рубля, поэтому магазину с основной валютой RUB курсы взять неоткуда. Расширение берёт ежедневные официальные курсы Банка России (www.cbr.ru/scripts/XML_daily.asp) и пересчитывает значения всех валют магазина относительно основной.
Проверено на OpenCart 4.1.0.4 и PHP 8.2 (нужны расширения PHP cURL и DOM, они есть в любой обычной сборке PHP). Другие версии OpenCart 4 не проверялись. Ядро не меняется: расширение использует штатный механизм «движка курсов валют».
Установка
- Расширения → Установщик → «Загрузить», файл
cbr_rates_oc4.ocmod.zip(имя не менять: OpenCart 4 берёт из него код расширения). - В строке «Курсы ЦБ РФ» — зелёная кнопка «Установить».
- Расширения → Расширения, тип «Курсы валют» → «Установить» у «Курсы ЦБ РФ», затем «Редактировать»: включите статус и сохраните.
- Система → Настройки → Локализация → «Движок курсов валют» → «Курсы ЦБ РФ», сохраните. Сразу после сохранения курсы обновятся.
Права получает группа пользователя, который нажал «Установить». Другим группам — Система → Пользователи → Группы пользователей, маршрут extension/cbr_rates_oc4/currency/cbr.
Настройки
Расширения → Расширения → Курсы валют → Курсы ЦБ РФ → Редактировать.
| Настройка | По умолчанию | Смысл |
|---|---|---|
| Статус | включено | Выключенное расширение курсы не меняет, даже если выбрано движком |
| Наценка, % | 0 | Прибавляется к курсу каждой валюты, кроме основной. При 2 покупатель платит в иностранной валюте на 2 % больше, чем по официальному курсу. Допустимы отрицательные значения и дробные (2,5) |
| Записывать успешные обновления в журнал | выключено | После каждого успешного обновления строка в журнале ошибок магазина. Ошибки записываются всегда |
Ниже настроек — блок «Последнее обновление»: время, дата курсов Банка России и перечень обновлённых валют либо текст ошибки; кнопка «Обновить сейчас» и ссылка на список валют.
Как считаются курсы
OpenCart хранит у каждой валюты «значение» — сколько единиц этой валюты даёт одна единица основной валюты магазина. Расширение берёт у Банка России курс каждой валюты к рублю (с учётом номинала: для 100 казахстанских тенге — цена ста тенге) и считает значение как отношение рублёвого курса основной валюты к рублёвому курсу данной валюты, умноженное на (1 + наценка/100). Основная валюта всегда получает значение 1. Валюты, которых нет в списке Банка России, не меняются.
Пример: основная валюта RUB, доллар по Банку России 80 ₽, наценка 0 — значение USD = 0,0125 (товар за 8000 ₽ стоит 100 $). При наценке 2 % значение USD = 0,01275 (102 $). Если основная валюта USD, то значение RUB = 80 (при наценке 2 % — 81,6).
Когда обновляются курсы
- Планировщик. Задание «currency» в Расширения → Планировщик (раз в сутки). Чтобы задания выполнялись, планировщик сервера (cron хостинга) должен раз в час или чаще открывать адрес магазина
index.php?route=cron/cron. Адрес показан на странице расширения. - Кнопка «Обновить сейчас» на странице расширения — обновляет независимо от того, какой движок выбран в настройках.
- Кнопка «Обновить курсы» в Система → Локализация → Валюты — работает через выбранный движок.
- Штатные события OpenCart: добавление или изменение валюты и сохранение настроек магазина.
- Смена основной валюты. Если в настройках магазина выбрать другую основную валюту, модуль сразу пересчитает все курсы от неё — цены на витрине не разойдутся (в OpenCart 4.1.0.4 без модуля курсы после такой смены один раз считались бы от прежней валюты).
Журнал и ошибки
Каждая неудачная попытка (сайт Банка России недоступен, ответ не разобран, основной валюты магазина нет в списке Банка России) записывается в журнал ошибок магазина (Система → Обслуживание → Журнал ошибок) строкой CBR rates: … и показывается в блоке «Последнее обновление». Курсы при ошибке не меняются — остаются прежние значения.
Удаление
Сначала выберите другой движок (или пустое значение) в Система → Настройки → Локализация. Затем Расширения → Расширения → Курсы валют → «Удалить» у «Курсы ЦБ РФ» и Расширения → Установщик → удалить пакет. Настройки и событие расширения удаляются; значения валют остаются такими, какими были на момент последнего обновления.
Типовые вопросы
- Курсы не обновляются по расписанию. Проверьте, что задание «currency» включено и что планировщик хостинга вызывает
index.php?route=cron/cron; откройте этот адрес в браузере — курсы должны обновиться (если прошли сутки с прошлого запуска задания). - Ошибка «default currency … is not published». Основная валюта магазина отсутствует в списке Банка России (например, криптовалюта или устаревший код). Выберите основной валютой RUB, USD, EUR или другую из списка.
- Ошибка «request failed» или «HTTP 403». Сервер магазина не смог обратиться к
www.cbr.ru: закрыт исходящий доступ или устарели корневые сертификаты. Проверьте у хостинга. - Одна из валют не обновилась. Её код не совпадает с кодом Банка России (сверьте в списке валют) — такие валюты расширение пропускает.