Реестр лицензий
Обновлено
Проверка и реестр
devapi_check_license проверяет одно значение: домен, заказ или идентификатор инсталлера. Для списка покупателей используйте реестр: сначала devapi_sync_licenses, затем devapi_list_licenses.
Оба инструмента требуют отдельных прав группы «Реестр лицензий». Сбор обращается к кассе и заказам кабинета, а результаты сохраняет в собственных таблицах плагина. Чтение реестра выполняется локально, без запроса к кабинету.
Сбор реестра
Параметр devapi_sync_licenses |
Что делает | Значения / по умолчанию |
|---|---|---|
account_id |
Выбирает аккаунт | Можно не указывать при единственном аккаунте |
product |
Ограничивает продукты по slug или подстроке | Пусто — все; пример: site/themes/seller2 или seller2 |
full |
Сбрасывает отметку обхода для выбранного аккаунта и фильтра продукта | false; true — пройти историю заново |
max_orders |
Ограничивает число обрабатываемых групп «заказ + продукт» за вызов | 500; неположительное значение заменяется на 500 |
Укажите продукт, чтобы сократить число запросов к заказам. Даже с этим фильтром при первом сборе плагин просматривает страницы кассы. Фиксированного времени завершения нет.
После вызова проверьте:
orders_processed— сколько групп заказов обработано;orders_failed,failures— ошибки получения заказов, которые следует повторить;orders_skipped,skipped— заказы, по которым получен отказ кабинета и которые пропущены;orders_remaining— отложенные группы и ошибки, требующие повтора;backfill_done— закончено ли чтение истории;licenses_written— число записанных строк за вызов, включая обновления существующих;registry— итоговая сводка накопленного реестра по продукту.
Если история не дочитана, повторите вызов с теми же account_id и product, без full=true. Для каждого сочетания аккаунта и фильтра хранится своя отметка обхода. Повторять full=true на каждом шаге не нужно: это снова сбрасывает отметку.
Синхронизация не меняет кабинет и не требует confirm. Обычный повтор догоняет новые транзакции; это не гарантирует обновление старых заказов после смены домена или редакции лицензии.
Поиск и выгрузка
Параметр devapi_list_licenses |
Что делает | Значения / по умолчанию |
|---|---|---|
account_id |
Выбирает аккаунт | Необязателен при единственном аккаунте |
product |
Ищет slug по подстроке | Пусто — все продукты |
domain_kind |
Оставляет указанные типы доменов | Массив значений из таблицы ниже; без фильтра |
edition |
Фильтрует редакцию заказа | PREMIUM или STANDARD; без фильтра |
installed_from |
Начало периода установки включительно | YYYY-MM-DD или YYYY-MM-DD HH:MM:SS; без ограничения |
installed_to |
Конец периода установки включительно | Те же форматы; дата без времени включает день до 23:59:59 |
domain |
Ищет домен по подстроке | Пусто — без фильтра; значение нормализуется |
limit |
Число строк | Для JSON — 100, для CSV — 1000; диапазон 1–1000 |
offset |
Число пропущенных строк | 0; не меньше 0 |
format |
Формат результата | json или csv; по умолчанию json |
В ответе total — общее число строк по фильтрам. summary содержит количество строк лицензий (licenses), уникальных заказов (orders), непустых доменов (domains), строк редакции Премиум (premium) и разбивку by_kind. Сводка не ограничивается текущей страницей.
CSV возвращается текстом в поле csv, с разделителем ; и UTF-8 BOM. Колонки: «Домен», «URL», «Тип домена», «Редакция», «Заказ», «Куплено», «Установлено», «Статус заказа», «Начислено, ₽». За один вызов выдаётся до 1000 строк; для следующей страницы увеличивайте offset. Ссылка на скачивание файла самим инструментом не создаётся.
Типы доменов
| Значение | Подпись в ответе | Как определяется |
|---|---|---|
live |
боевой | Остальные непустые домены, не попавшие под правила ниже |
cloud |
облако | webasyst.cloud и его поддомены, кроме технических |
cloud_tech |
облако (техдомен) | Имя по шаблону w + шесть цифр + - + буквенно-цифровой суффикс или _, затем .webasyst.cloud |
test |
тестовый | Начинается с test., dev., stage., staging., demo. либо содержит .test- |
hosting_stub |
хостинг-заглушка | Поддомены .beget.tech, .mcdir.ru, .temp.swtest.ru |
local |
локальный | localhost и его поддомены |
ip |
IP | IP-адрес |
none |
нет лицензии | Пустой домен в полученной записи лицензии |
Классификация выполняется по строке домена, без посещения сайта. Например, demo.webasyst.cloud относится к облаку: облачные правила проверяются раньше тестовых. Категория «боевой» не подтверждает доступность сайта или фактическое использование продукта. Подпись «нет лицензии» означает пустой домен записи, а не отсутствие покупки у клиента.
Редакции и повторяющиеся домены
edition — редакция покупки, определённая по комментарию транзакции: при наличии premium или «премиум» ставится PREMIUM, иначе STANDARD. Это классификация по тексту, а не отдельная проверка лицензии.
license_edition — значение редакции лицензии, полученное из кабинета на момент сбора. После обновления лицензии оно может отличаться от редакции исходной покупки.
Один домен может встречаться в нескольких заказах, например после перехода на Премиум. Поэтому число строк лицензий и число уникальных доменов различаются. Поле payout в каждой строке берётся из суммы транзакций группы «заказ + продукт»; при нескольких лицензиях группы не следует суммировать его по строкам как отдельные начисления.
full=true сбрасывает только отметку обхода, а не очищает реестр. Записи обновляются по сочетанию аккаунта, заказа, продукта и домена. После смены домена прежняя строка автоматически не удаляется; реестр следует рассматривать как накопленные данные, а не гарантированно полный снимок текущих установок.
Пример просьбы
Получи slug темы Seller 2.0 из списка продуктов.
Собери по ней реестр лицензий. Если история не дочитана,
продолжай тем же фильтром без сброса full.
Покажи число уникальных доменов и выгрузи строки типа live в CSV.
Если строк больше лимита, получи следующие страницы.