Installation
npm install @xpayr/extension-kit
# or copy src/index.js into your extension —
# zero dependencies, no build step, MV3-ready
Verkaufe eine Browser-Erweiterung, ein Plugin oder eine Desktop-App gegen Krypto — ganz ohne Kontosystem. Der Käufer zahlt aus seiner Wallet, und diese Wallet ist die Lizenz: Jedes weitere Gerät wird durch das Signieren einer kostenlosen Nachricht freigeschaltet. Keine E-Mail, keine verlierbaren Lizenzschlüssel, keine Rückbuchungen.
Die Zahlungen im Chrome Web Store wurden im Februar 2021 eingestellt, daher braucht jeder Erweiterungsentwickler eine externe Zahlungsebene. Die führende Lösung setzt ein Stripe-Konto voraus und schließt damit Entwickler in der Türkei, Pakistan, Nigeria, Bangladesch, Indonesien, Ägypten und vielen weiteren Ländern schlicht aus.
Krypto-Zahlungsgateways enden bei „Zahlung eingegangen". Sie liefern einen Webhook, keine Lizenz: kein Berechtigungsspeicher, kein SDK, keine geräteübergreifende Prüfung. Die schwierige Hälfte baust du am Ende selbst. Genau diese Hälfte ist dieses Kit.
ExtensionPay Paddle / LS Krypto-Gateways XPayr Kit
Gebuhr 5% + Stripe 5% + 50c 0.5-1% 2.9% flat
ohne Stripe nein teilweise ja ja
Lizenzebene ja teilweise nein ja
Ruckbuchungen ja ja keine keine
Handler (MoR) nein ja nein nein
Wir sind kein Merchant of Record: Du kümmerst dich selbst um deine Steuern. Genau dafür zahlst du bei Paddle und Lemon Squeezy die höhere Gebühr — ein echter Kompromiss, den man vor der Wahl verstehen sollte.
Lege in deinem Händler-Dashboard ein Produkt an, um einen Produktcode zu erhalten, und binde dann das SDK ein. host_permissions sind nicht nötig, daher erscheint bei der Installation keine Warnung über Datenzugriff.
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());
}
Das ist die gesamte Integration. Den Käuferablauf — Netzwerk wählen, zahlen, signieren, freischalten — hosten wir unter xpayr.com/buy/{product_code}.
| Feld | Typ | Bedeutung |
|---|---|---|
licensed |
boolean |
Steuere deine Features hierüber. Die Antwort kommt aus einem lokal geprüften Token — sofort und auch offline. |
plan |
'lifetime' | 'prepaid_year' | null |
Der vom Käufer erworbene Plan. |
wallet |
string | null |
Die Wallet, an die die Lizenz gebunden ist — die, die bezahlt hat. |
paidAt |
Date | null |
Wann die Lizenz ausgestellt wurde. |
expiresAt |
Date | null |
Enddatum bei zeitlich begrenzten Plänen; null bei Lifetime. |
source |
'cache' | 'network' |
Woher diese Antwort stammt. |
staleSince |
Date | null |
Wird gesetzt, solange mit einem veralteten Token innerhalb der 30-tägigen Offline-Kulanz gearbeitet wird. |
| Methode | Beschreibung |
|---|---|
startBackground() |
Einmal im Service Worker aufrufen. Verbindet Token-Zustellung und den täglichen Refresh-Alarm. |
getUser() |
Offline-First-Lizenzprüfung. Verifiziert das zwischengespeicherte ES256-Token lokal — kein Netzwerk-Roundtrip im heißen Pfad. |
openCheckout() |
Öffnet den gehosteten Checkout in einem neuen Tab. Der Käufer wählt ein beliebiges von dir aktiviertes Netzwerk und Token. |
openRestore() |
„Ich habe das bereits gekauft" — schaltet ein weiteres Gerät per Wallet-Signatur frei. Keine E-Mail, kein Lizenzschlüssel. |
refresh() |
Erzwingt eine Online-Neuprüfung. Erfasst Rückerstattungen und Widerrufe sofort. |
getPlans() |
Öffentliche Produktdaten: Preis, Plantyp, zulässige Netzwerke. |
onLicenseChanged |
Wird ausgelöst, sobald sich der Lizenzstatus ändert. |
Eine Weile offline? Die Lizenz funktioniert 30 Tage über den Token-Ablauf hinaus und geht dann in eine sanfte Sperre mit Hinweis zur Neuverbindung über — niemand wird mitten im Flug ausgesperrt. Kunden erstattet? Im Dashboard widerrufen: Die Erneuerung schlägt sofort fehl und das Token stirbt binnen 7 Tagen.
Deine ersten 300 $ Lizenzumsatz sind komplett gebührenfrei. Danach gelten 2,9 % pauschal, abgezweigt in derselben On-Chain-Transaktion wie die Zahlung — keine Rechnung, nichts, was später eingezogen werden muss. Keine Grundgebühr, keine Monatsgebühr, keine Rückbuchungen. Netzwerk-Gas ist separat und zahlt der Käufer.
14-$-Lizenz, innerhalb des Freikontingents -> du erhältst 14,00 $14-$-Lizenz, nach dem Freikontingent -> du erhältst 13,59 $ (Gebühr 0,41 $)
Webhooks sind optional — das Kit stellt Lizenzen aus und prüft sie ganz ohne Backend auf deiner Seite. Falls du serverseitige Events willst: Sie nutzen dasselbe Signaturschema wie jeder andere XPayr-Webhook (siehe Signatur-Leitfaden) und werden mit Backoff wiederholt. Nutze event_id für Idempotenz.
| Ereignis | Wann |
|---|---|
license.issued |
Eine Zahlung hat eine Lizenz erzeugt. Enthält Wallet, Produktcode, Plan und Transaktions-Hash. |
license.revoked |
Du hast eine Lizenz im Dashboard widerrufen, typischerweise nach einer Erstattung. |
payment.pending |
Eine Checkout-Sitzung wurde erstellt. |
payment.processing |
Die Zahlung ist on-chain und wartet auf Bestätigungen. |
payment.completed |
Zahlung on-chain verifiziert. |
payment.failed |
Die eingereichte Transaktion ließ sich nicht gegen die Sitzung verifizieren. |
payment.expired |
Die Sitzung ist unbezahlt abgelaufen. |
Stellen Sie ES256-Wallet-Softwarelizenzen direkt aus Claude Desktop, Cursor, VS Code Copilot oder autonomen KI-Support-Agenten über den offiziellen XPayr-MCP-Server (`xpayr_issue_wallet_license`) aus und verwalten Sie diese.
{
"name": "xpayr_issue_wallet_license",
"arguments": {
"product_id": "prod_my_extension",
"buyer_wallet": "0x71C...89A",
"plan": "lifetime",
"tx_hash": "0x9f8e...3b2a"
}
}
Betten Sie dynamische SVG-Vertrauenssiegel (partner-badge.php) oder das abhängigkeitsfreie 0.5%-Gebühren- & Ersparnisrechner-Widget (xpayr-fee-widget.js) in die README Ihrer Erweiterung, Ihr Dokumentationsportal oder Ihre Agentur-Landingpage ein.
<!-- 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 Lizenz-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() |
Der einzige strukturelle Unterschied ist die Identität: ExtensionPay identifiziert Kunden per E-Mail, das Kit per Wallet. Das erspart den Magic-Link-Umweg — und bedeutet, dass eine Lizenz nur geteilt werden kann, wenn man die Wallet teilt.
Installieren Sie @xpayr/node-sdk (v0.2.0), @xpayr/payment-evidence (v0.2.0), @xpayr/extension-kit (v0.2.0)oder @xpayr/mcp-server (v1.0.0) über NPM oder führen Sie Live JSON-RPC 2.0 Tool-Aufrufe aus über POST https://xpayr.com/api/mcp.