Установка
npm install @xpayr/extension-kit
# or copy src/index.js into your extension —
# zero dependencies, no build step, MV3-ready
Продавайте расширение браузера, плагин или десктопное приложение за криптовалюту без системы аккаунтов. Покупатель платит со своего кошелька, и этот кошелёк и есть лицензия — любое другое устройство открывается подписью бесплатного сообщения. Без 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_version": 3,
"permissions": ["storage", "alarms"],
"externally_connectable": { "matches": ["https://xpayr.com/*"] }
}
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}.
| Поле | Тип | Значение |
|---|---|---|
licensed |
boolean |
Ограничивайте функции по этому полю. Ответ приходит из локально проверенного токена — мгновенно и офлайн. |
plan |
'lifetime' | 'prepaid_year' | null |
План, который приобрёл покупатель. |
wallet |
string | null |
Кошелёк, к которому привязана лицензия, — тот, что оплатил. |
paidAt |
Date | null |
Когда была выдана лицензия. |
expiresAt |
Date | null |
Дата окончания для срочных планов; null для пожизненных. |
source |
'cache' | 'network' |
Откуда получен этот ответ. |
staleSince |
Date | null |
Устанавливается при работе с устаревшим токеном в течение 30-дневного офлайн-периода. |
| Метод | Описание |
|---|---|
startBackground() |
Вызовите один раз в service worker. Подключает доставку токена и ежедневный будильник обновления. |
getUser() |
Проверка лицензии offline-first. Локально проверяет кешированный токен ES256 — без сетевого обращения на горячем пути. |
openCheckout() |
Открывает размещённую страницу оплаты в новой вкладке. Покупатель выбирает любую включённую вами сеть и токен. |
openRestore() |
«Я уже купил» — открывает другое устройство подписью кошелька. Без email и лицензионного ключа. |
refresh() |
Принудительная онлайн-проверка. Сразу подхватывает возвраты и отзывы. |
getPlans() |
Публичная информация о продукте: цена, тип плана, разрешённые сети. |
onLicenseChanged |
Срабатывает при каждом изменении состояния лицензии. |
Долго были офлайн? Лицензия продолжает работать ещё 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 |
Сессия истекла без оплаты. |
Выпускайте и управляйте программными лицензиями ES256 на базе кошелька прямо из Claude Desktop, Cursor, VS Code Copilot или автономных ИИ-агентов поддержки с помощью официального MCP-сервера XPayr (`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 расширения, портал документации или лендинг агентства.
<!-- 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 | Комплект 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 и означает, что поделиться лицензией нельзя, не поделившись кошельком.
Установите @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.