Skip to content
  1. Компоненты
  2. msCurrency
  3. Админка

Управление валютами

Пункт меню: MiniShop3 → Валюты (msCurrency).

Интерфейс на Vue 3 + PrimeVue 4 (как вкладки MS3). Нужен VueTools — без него контроллер покажет предупреждение и не загрузит ESM-модуль.

Артефакты сборки: assets/components/mscurrency/js/mgr/vue-dist/mscurrency-admin.min.{js,css}. При установке из transport бандл уже включён.

Вкладки

ВкладкаНазначение
Дашборд курсовKPI (валют в списке, последний sync, устаревшие курсы), журнал последних sync, таблица: предыдущий курс, Δ, дата обновления, дней без sync (порог — mscurrency_stale_rate_days). Только активные не-базовые валюты; без единого sync — тег «Нет sync»
ВалютыCRUD, флаги base/active, rate/coefficient/val, округление цены (price_rounding), колонка Авто, кнопка «Синхронизировать курсы», поиск и сортировка
Поставщики курсовВключение провайдеров; колонка «Валюта котировок» — в какой валюте источник отдаёт курсы; при несовпадении с базовой — предупреждение (провайдер будет пропущен при sync)
ПривязкиСвязь provider_id + currency_id + external_code; провайдер и валюта проверяются на существование

Поля валюты

ПолеОписание
codeТри латинские буквы (USD, EUR, RUB)
rateКурс от провайдера или ручной (должен быть > 0)
coefficientМножитель к курсу (наценка/скидка)
valrate × coefficient, пересчитывается при сохранении и синхронизации
price_roundingnone, round, ceil, floor, to_99 — округление на витрине
baseРовно одна базовая валюта в системе
activeПоказывать на витрине и в переключателе

Базовую валюту удалить нельзя. Колонка Авто = есть привязка к активному поставщику.

Валюты и поставщики по умолчанию

При установке пакета резолвер добавляет (если записей ещё нет):

КодАктивнаБазовая
RUBдада
USDданет
EURданет
UAH, BYN, KZTнетнет

Поставщики (классы в Infrastructure\Rates\):

ПоставщикКод (getKey)По умолчанию
ЦБ РФcbr_ruвключён
ECB (котировки в EUR)ecb_euroвыключен; sync только при базовой валюте EUR
НБУnbu_uaвыключен
НБРБnbrb_byвыключен
НБКnbk_kzвыключен

Привязки для автообновления создаются автоматически (CBR → USD/EUR; НБУ → UAH; НБРБ → BYN; НБК → KZT). После установки нажмите Синхронизировать курсы или настройте cron.

Для Беларуси используйте код BYN (актуальный ISO), не BYR.

Права доступа

Connector проверяет mscurrency_user_can_manage():

  • право mscurrency_save (рекомендуется контент-менеджеру магазина), или
  • стандартное право MODX save.

Право view не даёт изменять валюты и курсы.

Ключ API и авторизация

Встроенные поставщики

Отдельный ключ в msCurrency не вводится. Классы ходят на открытые официальные URL:

ПоставщикКодИсточник
ЦБ РФcbr_rucbr.ru/scripts/XML_daily.asp
ECBecb_euroecb.europa.eu/stats/eurofxref/eurofxref-daily.xml
НБУnbu_uabank.gov.ua (JSON)
НБРБnbrb_bynbrb.by/api/exrates
НБКnbk_kznationalbank.kz/rss

Нужен исходящий HTTPS с сервера MODX. HttpRateClient предпочитает cURL. При блокировке доменов ошибки попадут в errors[] после синхронизации — отключите неиспользуемого поставщика.

Колонка «Код провайдера» — внутренний идентификатор, не API-ключ.

Свой поставщик курсов

  1. PHP-файл в core/components/mscurrency/providers/, namespace mscurrency\Providers\.
  2. Класс — наследник AbstractMscRateProvider: getKey(), getCodes(), getCourse(), run() / fetchRates().
  3. Поставщики курсов → Добавить поставщика → выбор класса (action mgr/provider/scan).
  4. При необходимости — вкладка Привязки (external_codecode сайта).

Секрет платного API храните в системной настройке MODX или JSON в msc_providers.properties — не в git.

Пример: providers/ExampleStaticRateProvider.php.

Connector API

URL: assets/components/mscurrency/connector.php Метод: POST, параметр action.

Валюты

actionПараметры
mgr/currency/getlist
mgr/currency/createcode, name, rate, coefficient, val, rank, active, base, symbol_*, price_rounding
mgr/currency/updateid + поля
mgr/currency/removeid (нельзя удалить base)

Поставщики и привязки

actionПараметры
mgr/provider/getlist— (в ответе reference_currency, reference_mismatch)
mgr/provider/getid
mgr/provider/scan
mgr/provider/createname, class
mgr/provider/updateid, name, active
mgr/providerlink/getlist
mgr/providerlink/createprovider_id, currency_id, external_code
mgr/providerlink/removeid

Курсы

actionПараметрыОтвет object
mgr/rates/syncprovider_key (опционально)updated, errors[]
mgr/rates/dashboardlast_sync, recent_syncs[], currencies[], stale_after_days, stale_count

Синхронизация идёт по активным провайдерам. С привязками обновляются только связанные валюты; без привязок — сопоставление по коду (USDUSD).

Перед обновлением проверяется валюта котировок провайдера: несовпадение с базовой → провайдер пропускается, ошибка в errors[]. Курсы ≤ 0 игнорируются.

После каждого sync пишется msc_sync_log. В msc_currency сохраняются previous_rate и rate_updated_at — для дашборда и колонки Δ.

Витрина

actionПараметрыОтвет
web/currency/setid или currency_id; при AJAX — pids[]{ success } или полный object при mscurrency_ajax_switch=1

Вызывается из default.min.js. Connector для web задаёт ctx=web, иначе MODX ответит 401.

Cron

bash
php core/components/mscurrency/cron/sync_rates.php
php core/components/mscurrency/cron/course.php

Пример crontab (два раза в день):

bash
0 8,20 * * * /usr/bin/php /path/to/modx/core/components/mscurrency/cron/sync_rates.php

Выборочный провайдер: mscurrency_default_provider = cbr_ru или POST provider_key=cbr_ru в mgr/rates/sync. Код выхода 1, если в ответе sync есть ошибки.

См. также