К содержимому
Интеграции

Реестр лицензий

Обновлено

Проверка и реестр

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.
Если строк больше лимита, получи следующие страницы.