Парсер курсов
Плагин курсов — это внешний модуль iEXExchanger, который добавляет в систему новый источник курсов.
После установки через раздел «Установка плагинов» такой модуль может создать группу в системе «Курсы из источников», загрузить валютные пары и использоваться в направлениях обмена как обычный источник курса.
Этот документ предназначен для разработчиков и описывает создание плагина курсов: структуру файлов, файл iex-plugin.json, PHP-класс парсера, настройки, секреты, пары, health-check, миграции и сборку ZIP-архива.
Общий принцип работы
Плагин не изменяет ядро iEXExchanger и не устанавливается в папку packages.
Он поставляется как отдельный ZIP-архив, проходит проверку через админку и сохраняется в системе внешних плагинов.
Общая схема работы:
Разработчик создаёт папку плагина.
Внутри добавляет файл
iex-plugin.json.Создаёт PHP-класс парсера.
PHP-класс получает курсы из API, файла или другого источника.
Плагин упаковывается в ZIP.
Администратор загружает ZIP через «Утилиты» — «Установка плагинов».
Система проверяет пакет.
После установки создаётся источник курсов.
Пары курсов импортируются в раздел источников.
Оператор включает нужные пары и использует их в направлениях обмена.
Основной стандарт плагина
Для плагинов курсов используется тип:
Основная возможность плагина:
Стандарт совместимости:
Рекомендуемый runtime:
Runtime js сохранён только для совместимости со старыми parser-rate модулями. Для новых плагинов рекомендуется использовать PHP.
Быстрый старт
Для создания шаблона плагина используйте команду:
После выполнения будет создана папка:
Структура шаблона:
Чтобы сразу собрать ZIP-архив, используйте:
Если нужно, чтобы плагин при установке попробовал получить пары из источника:
Структура плагина
Минимальная структура PHP-плагина курсов:
Расширенная структура:
Иконка плагина
Иконку можно добавить в корень плагина.
Поддерживаемые имена:
Для SVG система выполняет дополнительную проверку безопасности. Нельзя использовать скрипты, активные события и внешние ссылки внутри SVG.
Примеры
Файл iex-plugin.json
iex-plugin.json — главный файл описания плагина.
Через него система понимает:
какой это тип плагина;
как он называется;
какая у него версия;
какой runtime используется;
с какими версиями iEXExchanger он совместим;
какие настройки нужно показать в админке;
какие секреты нужно запросить;
какие пары курсов можно создать;
какой PHP-класс нужно запустить.
Полный пример iex-plugin.json
Основные поля iex-plugin.json
Совместимость
Блок compatibility помогает системе заранее понять, подходит ли плагин для текущей версии продукта.
core_min
Минимальная версия iEXExchanger
core_max
Максимальная версия iEXExchanger
php
Поддерживаемые версии PHP
extensions
Обязательные PHP-расширения
Если верхнее ограничение по версии продукта не требуется, используйте:
entry и class
entry и class можно не указывать, если используется стандартная структура.
Для PHP-плагина курсов система по умолчанию ожидает файл:
И класс:
Например, если указано:
ожидаемый PHP-класс:
Когда entry и class нужно указывать
Если файл или класс называются нестандартно, укажите их явно:
Тогда в PHP-файле должен быть такой класс:
Блок modules
modules описывает возможности плагина.
Для плагина курсов рекомендуется явно указывать:
Пример:
Если modules не указан, система для parser-rate может создать rates.source по умолчанию. Но для новых плагинов лучше указывать modules явно, чтобы структура была понятной и предсказуемой.
PHP-класс Parser.php
Основной файл плагина:
Минимальный пример:
Класс должен реализовать интерфейс:
И содержать метод:
Если класс не реализует интерфейс, система не сможет запустить плагин.
Формат возвращаемого курса
Основной формат курса:
Можно дополнительно вернуть sell:
Значения курсов лучше возвращать строками, чтобы не терять точность на float.
Поддерживаемые alias-поля
Рекомендуемый формат:
Система также понимает alias-ключи:
from
base, currency_from, code_in
to
quote, currency_to, code_out
buy
rate, default, value, bid
sell
ask
Пример:
Пример парсера с HTTP API
RateParserContext
В метод rates() передаётся объект:
Он содержит данные текущего запуска.
$context->plugin
Модель установленного плагина
$context->manifest
Manifest текущего плагина
$context->options
Опции конкретного запуска
$context->extra
Дополнительные данные
$context->config
Обычные настройки из config_schema
$context->pluginPath()
Путь к файлу внутри установленного плагина
Пример проверки health-check:
Пример пути к файлу внутри плагина:
Настройки плагина
Обычные настройки описываются в config_schema.
Они подходят для значений, которые не являются секретными:
базовый URL API;
таймаут;
режим рынка;
страна;
валюта;
флаг включения функции.
Пример:
Использование в PHP:
Поддерживаемые типы настроек:
Секреты плагина
Секретные поля описываются в settings.
Пример:
В iex-plugin.json хранится только схема секретов. Значения секретов в ZIP не хранятся.
Значения секретов:
вводятся в админке;
сохраняются отдельно от файлов плагина;
хранятся в зашифрованном виде;
не попадают обратно в ZIP;
не перезаписываются, если при редактировании оставить поле пустым.
Получение секрета в PHP:
encrypted_value возвращается уже расшифрованным через Laravel encrypted cast. Дополнительно расшифровывать значение вручную не нужно.
Использование секрета в запросе:
Блок rateParser
rateParser управляет поведением курсового плагина.
discoverOnInstall
Если значение true, система может запустить плагин при проверке или установке и получить пары из runtime-ответа.
Если значение false, система не будет запускать плагин для первичного поиска пар.
В админке оператор всё равно может выбрать режим установки:
«По настройке плагина»;
«Проверить и загрузить пары»;
«Не загружать при установке».
Пары курсов
Есть два способа передать пары курсов системе.
rateParser.pairs
Если пары известны заранее
discoverOnInstall + rates()
Если пары нужно получить из API
pairs
rateParser.pairs нужен для первичного создания строк в источниках курсов.
Пример:
Поля пары:
from
Исходная валюта
to
Целевая валюта
amount
Первичное значение курса
type
Тип пары, по умолчанию 0
type_price
Дополнительный тип цены, например buy или sell
number_format
Количество знаков форматирования, от 0 до 18
status
Активность пары
Рекомендуется добавлять новые пары выключенными:
Так оператор сможет проверить их перед включением.
Runtime-курсы и pairs
Важно различать pairs и rates().
rateParser.pairs описывает пары, которые можно создать при установке.
Метод rates() возвращает актуальные значения курсов при проверке, health-check и обновлении.
Правильная схема:
Health-check
Health-check запускается из админки кнопкой «Проверить состояние».
Для rates.source система вызывает метод rates() и проверяет, что плагин вернул хотя бы один курс.
В manifest лучше указывать:
Пример обработки health-check:
Миграции плагина
Если плагину нужны свои таблицы, можно добавить миграции.
Описание миграции в manifest:
Пример файла миграции:
Миграции регистрируются при установке, но запускаются отдельно из админки.
JS runtime
Runtime js поддерживается только для совместимости со старыми parser-rate модулями.
Минимальный пример:
Для новых плагинов используйте PHP runtime.
Сборка ZIP
Проверка плагина в админке
После сборки ZIP проверьте его через панель управления.
Откройте «Утилиты» — «Установка плагинов».
Нажмите «Установить».
Выберите тип «Курсы».
Загрузите ZIP-архив.
Нажмите «Проверить пакет».
Проверьте результат предпросмотра.
Если отображается «Пакет можно установить», нажмите «Установить».
Если у плагина есть секреты или настройки, заполните их.
Нажмите «Проверить состояние».
Откройте раздел источников курсов и убедитесь, что группа плагина создана.
Проверка через консоль
После установки можно проверить совместимость установленных плагинов:
Для JSON-вывода:
Частые ошибки
Не найден основной файл
Проверьте, что файл существует:
Если файл называется иначе, укажите entry явно.
Пары не появились в источниках
Проверьте:
включён ли
discoverOnInstall;какой режим выбран при установке;
вернул ли runtime пары;
запущена ли очередь задач;
нет ли ошибок импорта на странице установки плагинов.
Рекомендации
Для новых плагинов используйте PHP runtime.
Не храните значения API-ключей в iex-plugin.json.
В settings описывайте только поля секретов.
В config_schema описывайте обычные настройки.
entry и class можно не указывать, если используется стандартная структура.
modules лучше указывать явно, даже если система умеет создать rates.source по умолчанию.
Для health используйте объект:
Курсы возвращайте строками.
Новые пары после импорта должны проверяться оператором вручную.
Перед передачей клиенту всегда проверяйте ZIP через «Установка плагинов».
Коротко
Плагин курсов добавляет в iEXExchanger новый внешний источник курсов.
Основной тип плагина:
Основная возможность:
Рекомендуемый runtime:
Минимальная структура плагина:
Главный метод парсера:
Пары можно описать заранее через rateParser.pairs или получить автоматически через discoverOnInstall.
Секреты описываются в settings, обычные настройки — в config_schema.
Готовый плагин нужно собрать в ZIP и проверить через «Утилиты» — «Установка плагинов».
Последнее обновление
Это было полезно?