Нативно-криптовое лицензирование

Лицензия — это кошелёк.

Продавайте расширение браузера, плагин или десктопное приложение за криптовалюту без системы аккаунтов. Покупатель платит со своего кошелька, и этот кошелёк и есть лицензия — любое другое устройство открывается подписью бесплатного сообщения. Без email, без лицензионных ключей, без чарджбэков.

Зачем это нужно

Платежи Chrome Web Store закрылись в феврале 2021 года, поэтому каждому разработчику расширений нужен внешний платёжный слой. Ведущее решение требует аккаунт Stripe, что полностью исключает разработчиков из Турции, Пакистана, Нигерии, Бангладеш, Индонезии, Египта и многих других стран.

Криптоплатёжные шлюзы останавливаются на «платёж получен». Они дают вебхук, а не лицензию: нет хранилища прав, нет SDK, нет проверки между устройствами. Сложную половину вы пишете сами. Этот набор и есть та половина.

Сравнение

                        ExtensionPay   Paddle / LS   Kriptoshlyuzy     XPayr Kit
komissiya               5% + Stripe    5% + 50c      0.5-1%            2.9% flat
bez Stripe              net            chastichno    da                da
sloy litsenzii          da             chastichno    net               da
charjbeki               da             da            net               net
prodavets (MoR)         net            da            net               net

Мы не merchant of record: налоги вы декларируете сами. Именно это покупает более высокая комиссия Paddle и Lemon Squeezy — реальный компромисс, который стоит понять до выбора.

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

Создайте продукт в панели мерчанта, чтобы получить код продукта, затем подключите SDK. host_permissions не нужны, поэтому при установке расширения не появляется предупреждение о доступе к данным.

Установка

npm install @xpayr/extension-kit

# or copy src/index.js into your extension —
# zero dependencies, no build step, MV3-ready

manifest.json

{
  "manifest_version": 3,
  "permissions": ["storage", "alarms"],
  "externally_connectable": { "matches": ["https://xpayr.com/*"] }
}

background.js

import XPayrKit from '@xpayr/extension-kit';

const xpayr = XPayrKit('prod_my_extension');
xpayr.startBackground();          // required: token delivery + daily refresh

xpayr.onLicenseChanged.addListener(user => {
  console.log(user.licensed ? 'unlocked' : 'locked');
});

Ограничение функции

const user = await xpayr.getUser();

if (user.licensed) {
  enableProFeatures();
} else {
  showUpgradeButton(() => xpayr.openCheckout());
}

Это вся интеграция. Путь покупателя — выбрать сеть, оплатить, подписать, разблокировать — размещён у нас по адресу xpayr.com/buy/{product_code}.

Объект user

Поле Тип Значение
licensed boolean Ограничивайте функции по этому полю. Ответ приходит из локально проверенного токена — мгновенно и офлайн.
plan 'lifetime' | 'prepaid_year' | null План, который приобрёл покупатель.
wallet string | null Кошелёк, к которому привязана лицензия, — тот, что оплатил.
paidAt Date | null Когда была выдана лицензия.
expiresAt Date | null Дата окончания для срочных планов; null для пожизненных.
source 'cache' | 'network' Откуда получен этот ответ.
staleSince Date | null Устанавливается при работе с устаревшим токеном в течение 30-дневного офлайн-периода.

API

Метод Описание
startBackground() Вызовите один раз в service worker. Подключает доставку токена и ежедневный будильник обновления.
getUser() Проверка лицензии offline-first. Локально проверяет кешированный токен ES256 — без сетевого обращения на горячем пути.
openCheckout() Открывает размещённую страницу оплаты в новой вкладке. Покупатель выбирает любую включённую вами сеть и токен.
openRestore() «Я уже купил» — открывает другое устройство подписью кошелька. Без email и лицензионного ключа.
refresh() Принудительная онлайн-проверка. Сразу подхватывает возвраты и отзывы.
getPlans() Публичная информация о продукте: цена, тип плана, разрешённые сети.
onLicenseChanged Срабатывает при каждом изменении состояния лицензии.

Как работает проверка

  1. Покупатель платит со своего кошелька на размещённой странице оплаты.
  2. XPayr записывает право на адрес кошелька, с которого оплатили.
  3. Покупатель подписывает бесплатное одноразовое сообщение, подтверждая контроль над кошельком. Средства не перемещаются.
  4. XPayr возвращает токен, подписанный ES256, привязанный к вашему продукту и действительный 7 дней.
  5. Ваше расширение локально проверяет этот токен через WebCrypto при каждом getUser() и раз в сутки молча продлевает его.

Долго были офлайн? Лицензия продолжает работать ещё 30 дней после истечения токена, затем мягко блокируется с предложением переподключиться — никого не отрежет на полпути. Вернули деньги клиенту? Отзовите в панели: продление сразу не пройдёт, а токен умрёт в течение 7 дней.

Цены

Первые 300 $ продаж лицензий — вообще без комиссии. Дальше — 2,9% фиксировано, удерживается в той же ончейн-транзакции, что и платёж: ни счёта, ни последующего сбора. Без фиксированной платы, без ежемесячной платы, без чарджбэков. Сетевой газ отдельно и оплачивается покупателем.

Лицензия 14 $, в пределах бесплатного лимита  ->  вы получаете 14,00 $Лицензия 14 $, после бесплатного лимита  ->  вы получаете 13,59 $  (комиссия 0,41 $)

Вебхуки

Вебхуки необязательны — Kit выдаёт и проверяет лицензии без какого-либо бэкенда с вашей стороны. Если серверные события всё же нужны, они используют ту же схему подписи, что и все вебхуки XPayr (см. руководство по подписи), и повторяются с нарастающей задержкой. Для идемпотентности используйте event_id.

Событие Когда
license.issued Платёж создал лицензию. Содержит кошелёк, код продукта, план и хеш транзакции.
license.revoked Вы отозвали лицензию в панели, обычно после возврата средств.
payment.pending Создана сессия оплаты.
payment.processing Платёж в сети и ожидает подтверждений.
payment.completed Платёж подтверждён в сети.
payment.failed Отправленная транзакция не прошла проверку по сессии.
payment.expired Сессия истекла без оплаты.

Лицензирование через ИИ-агентов и MCP (@xpayr/mcp-server)

Выпускайте и управляйте программными лицензиями ES256 на базе кошелька прямо из Claude Desktop, Cursor, VS Code Copilot или автономных ИИ-агентов поддержки с помощью официального MCP-сервера XPayr (`xpayr_issue_wallet_license`).

Вызов инструмента MCP (xpayr_issue_wallet_license)

{
  "name": "xpayr_issue_wallet_license",
  "arguments": {
    "product_id": "prod_my_extension",
    "buyer_wallet": "0x71C...89A",
    "plan": "lifetime",
    "tx_hash": "0x9f8e...3b2a"
  }
}

Бейджи проверенного партнера и встраиваемый виджет калькулятора комиссий

Встраивайте динамические SVG-бейджи доверия (partner-badge.php) или автономный виджет калькулятора комиссии 0.5% и экономии (xpayr-fee-widget.js) в README расширения, портал документации или лендинг агентства.

Динамический SVG-бейдж партнера и встраиваемый калькулятор

<!-- Official Dynamic SVG Trust Badge -->
<a href="https://xpayr.com?utm_source=partner_badge" target="_blank" rel="noopener">
  <img src="https://xpayr.com/partner-badge.php?type=powered_by&theme=dark" alt="Powered by XPayr — 0.5% Non-Custodial Crypto Checkout" height="28">
</a>

<!-- Interactive 0.5% Fee & Savings Calculator Widget -->
<div data-xpayr-fee-widget data-volume="100000" data-invoice="250" data-rate="1.0"></div>
<script src="https://xpayr.com/public/sdk/xpayr-fee-widget.js" async></script>

Переход с ExtensionPay

ExtensionPayКомплект XPayr Kit
ExtPay('extension-id') XPayrKit('prod_code')
extpay.startBackground() xpayr.startBackground()
user.paid user.licensed
user.email user.wallet
openPaymentPage() openCheckout()
openLoginPage() openRestore()
onPaid.addListener onLicenseChanged.addListener
getPlans() getPlans()

Единственное структурное различие — идентичность: ExtensionPay определяет клиента по email, Kit — по кошельку. Это убирает цикл magic-link и означает, что поделиться лицензией нельзя, не поделившись кошельком.

Честные ограничения

  • Клиентское лицензирование — это сдерживающий фактор, а не DRM. Настойчивый пользователь может пропатчить локальную проверку — это верно для любой библиотеки этой категории, включая нашу.
  • Мы не merchant of record. За налоговую отчётность отвечаете вы.
  • Покупателю нужен кошелёк. Для крипто-аудитории это не проблема; для широкого потребителя держите рядом фиатный канал.
  • Без подписок со списанием. В крипте нет сохранённой карты, поэтому v1 поддерживает пожизненные и предоплаченные годовые лицензии.

Начать

Официальные NPM SDK (v0.2.0) и удаленный MCP-сервер

Быстрая интеграция с официальными пакетами XPayr и MCP без установки

Установите @xpayr/node-sdk (v0.2.0), @xpayr/payment-evidence (v0.2.0), @xpayr/extension-kit (v0.2.0)или @xpayr/mcp-server (v1.0.0) из NPM или выполняйте живые вызовы инструментов JSON-RPC 2.0 через POST https://xpayr.com/api/mcp.

Живая песочница MCP (/tools/mcp-playground) Верификатор лицензий ES256 Симулятор политик ИИ-агентов Тестер вебхуков HMAC-SHA256 mcp.xpayr.com docs.xpayr.com api-docs.xpayr.com