For the complete documentation index, see llms.txt. This page is also available as Markdown.

Парсер курсов

Плагин курсов — это внешний модуль iEXExchanger, который добавляет в систему новый источник курсов.

После установки через раздел «Установка плагинов» такой модуль может создать группу в системе «Курсы из источников», загрузить валютные пары и использоваться в направлениях обмена как обычный источник курса.

Этот документ предназначен для разработчиков и описывает создание плагина курсов: структуру файлов, файл iex-plugin.json, PHP-класс парсера, настройки, секреты, пары, health-check, миграции и сборку ZIP-архива.

Общий принцип работы

Плагин не изменяет ядро iEXExchanger и не устанавливается в папку packages.

Он поставляется как отдельный ZIP-архив, проходит проверку через админку и сохраняется в системе внешних плагинов.

Общая схема работы:

  1. Разработчик создаёт папку плагина.

  2. Внутри добавляет файл iex-plugin.json.

  3. Создаёт PHP-класс парсера.

  4. PHP-класс получает курсы из API, файла или другого источника.

  5. Плагин упаковывается в ZIP.

  6. Администратор загружает ZIP через «Утилиты» — «Установка плагинов».

  7. Система проверяет пакет.

  8. После установки создаётся источник курсов.

  9. Пары курсов импортируются в раздел источников.

  10. Оператор включает нужные пары и использует их в направлениях обмена.

Основной стандарт плагина

Для плагинов курсов используется тип:

Основная возможность плагина:

Стандарт совместимости:

Рекомендуемый runtime:

Runtime js сохранён только для совместимости со старыми parser-rate модулями. Для новых плагинов рекомендуется использовать PHP.


Быстрый старт

Для создания шаблона плагина используйте команду:

После выполнения будет создана папка:

Структура шаблона:

Чтобы сразу собрать ZIP-архив, используйте:

Если нужно, чтобы плагин при установке попробовал получить пары из источника:


Структура плагина

Минимальная структура PHP-плагина курсов:

Расширенная структура:

Иконка плагина

Иконку можно добавить в корень плагина.

Поддерживаемые имена:

Для SVG система выполняет дополнительную проверку безопасности. Нельзя использовать скрипты, активные события и внешние ссылки внутри SVG.

Примеры

5KB
Открыть
6KB
Открыть


Файл iex-plugin.json

iex-plugin.json — главный файл описания плагина.

Через него система понимает:

  • какой это тип плагина;

  • как он называется;

  • какая у него версия;

  • какой runtime используется;

  • с какими версиями iEXExchanger он совместим;

  • какие настройки нужно показать в админке;

  • какие секреты нужно запросить;

  • какие пары курсов можно создать;

  • какой PHP-класс нужно запустить.

Полный пример iex-plugin.json


Основные поля iex-plugin.json

1

type

Тип плагина.

Для парсера курсов всегда используется:

2

runtime

Среда выполнения плагина.

Для новых плагинов рекомендуется:

3

standard

Стандарт совместимости.

Для парсера курсов:

4

name

Системное имя плагина.

Требования:

  • только латиница;

  • можно использовать цифры;

  • можно использовать - и _;

  • нельзя использовать пробелы;

  • нельзя использовать кириллицу;

  • нельзя использовать /, \, ...

name используется как системный slug плагина и alias источника курсов.

5

title

Название плагина в админке.

6

description

Краткое описание плагина.

7

version

Версия плагина.

8

activeByDefault

Определяет, будет ли плагин активен сразу после установки.

Рекомендуется оставлять false, чтобы администратор сначала проверил настройки и health-check.


Совместимость

Блок 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-ключи:

Основное поле
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

1

Через команду

2

Вручную

Перейдите в папку плагина:

Соберите архив:

В архиве должна быть структура:

Допустимо также:

Система умеет определить одну корневую папку.

Не добавляйте в архив:

  • .env;

  • .git;

  • node_modules;

  • vendor;

  • логи;

  • временные файлы;

  • личные ключи;

  • пароли;

  • дампы базы данных.


Проверка плагина в админке

После сборки ZIP проверьте его через панель управления.

plugУстановка плагинов
  1. Откройте «Утилиты» — «Установка плагинов».

  2. Нажмите «Установить».

  3. Выберите тип «Курсы».

  4. Загрузите ZIP-архив.

  5. Нажмите «Проверить пакет».

  6. Проверьте результат предпросмотра.

  7. Если отображается «Пакет можно установить», нажмите «Установить».

  8. Если у плагина есть секреты или настройки, заполните их.

  9. Нажмите «Проверить состояние».

  10. Откройте раздел источников курсов и убедитесь, что группа плагина создана.

Проверка через консоль

После установки можно проверить совместимость установленных плагинов:

Для JSON-вывода:


Частые ошибки

Не найден основной файл

Проверьте, что файл существует:

Если файл называется иначе, укажите entry явно.

Класс не найден

Для:

по умолчанию ожидается:

Если namespace или имя класса другие, укажите class явно.

Класс не реализует интерфейс

Класс должен реализовать:

Метод rates ничего не вернул

Метод rates() должен вернуть хотя бы один корректный курс с полями:

Пары не появились в источниках

Проверьте:

  • включён ли discoverOnInstall;

  • какой режим выбран при установке;

  • вернул ли runtime пары;

  • запущена ли очередь задач;

  • нет ли ошибок импорта на странице установки плагинов.

Ошибка совместимости

Проверьте:

  • core_min;

  • core_max;

  • php;

  • extensions.


Рекомендации

Для новых плагинов используйте 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 и проверить через «Утилиты» — «Установка плагинов».

Последнее обновление

Это было полезно?