Skip to main content

▶ شاهد تدفق 402 أولاً

عرض توضيحي تفاعلي في الطرفية — شاهد الطلب → 402 → دفع Lightning → 200 OK، مباشرةً في متصفحك.

الخيار أ — بناء خادم كامل بأمر واحدة (الأسرع)

npx create-l402-app my-api
يُنشئ هذا مشروع Express + l402-kit كاملاً: server.ts، .env.example، tsconfig.json، ونقطة نهاية /premium جاهزة لقبول مدفوعات Lightning.
my-api/
  src/server.ts      ← واجهة برمجة التطبيقات الخاصة بك مع وسيط l402
  .env.example       ← قالب بيانات اعتماد Blink/OpenNode
  package.json       ← npm install l402-kit + tsx
  tsconfig.json
  README.md
ثم:
cd my-api
cp .env.example .env   # أضف مفتاح Blink API الخاص بك
npm install
npm run dev
# ⚡ l402-kit server running on http://localhost:3000
# curl http://localhost:3000/premium  →  402 Payment Required

الخيار ب — الإضافة إلى مشروع قائم

1. اختر وضعك

ManagedSoberano
وقت الإعداد~2 دقيقة~5 دقائق
التكلفة الشهرية0$0$
رسوم كل معاملة0.3%0%
ما تحتاجهعنوان Lightningحساب Blink / Alby / BTCPay
معالجة 10,000 satsرسوم 30 satرسوم 0$
الأفضل لـالبدء السريعالحجم الكبير / الإنتاج
غير متأكد؟ ابدأ بـ Managed — لا عقدة، ولا حساب، فقط عنوان Lightning. انتقل إلى Soberano بسطر واحد من الكود متى أردت رسوم 0%. الرموز المدفوعة مسبقاً تستمر في العمل بعد التبديل. احصل على عنوان Lightning (مجاني، دقيقتان): سجّل في dashboard.blink.sv — ستحصل على yourname@blink.sv. أو استخدم Alby أو Phoenix أو Wallet of Satoshi. إعداد Soberano: سجّل في dashboard.blink.svAPI Keys → أنشئ مفتاحاً → انسخ BTC Wallet ID الخاص بك من صفحة المحفظة. عيّن BLINK_API_KEY وBLINK_WALLET_ID في ملف .env الخاص بك.

2. التثبيت

npm install l402-kit

3. أضف إلى واجهة برمجة التطبيقات الخاصة بك

4. اختبر

curl http://localhost:3000/premium
الاستجابة:
{
  "error": "Payment Required",
  "price_sats": 100,
  "invoice": "lnbc1u1p...",
  "macaroon": "eyJoYXNo..."
}
ادفع الفاتورة بأي محفظة Lightning، ثم:
curl http://localhost:3000/premium \
  -H "Authorization: L402 <macaroon>:<preimage>"
الاستجابة:
{ "data": "You paid 100 sats. Here is your data." }
واجهة برمجة التطبيقات الخاصة بك تقبل الآن مدفوعات Bitcoin.

الاختبار بدون sats حقيقية

لا تحتاج إلى محفظة Lightning لاختبار تكاملك. استخدم مزوداً وهمياً — يُولّد أزواج رموز تشفيرية صالحة محلياً، بدون أي استدعاءات للشبكة:
import { createHash, randomBytes } from "crypto";
import { l402 } from "l402-kit";
import type { LightningProvider, Invoice } from "l402-kit";

// Drop-in mock — generates real SHA256 hash/preimage pairs
function makeMockProvider(): LightningProvider & { preimage: string } {
  const preimage = randomBytes(32).toString("hex");
  const paymentHash = createHash("sha256").update(Buffer.from(preimage, "hex")).digest("hex");
  return {
    preimage, // use this in your test Authorization header
    async createInvoice(amountSats: number): Promise<Invoice> {
      const macaroon = Buffer.from(
        JSON.stringify({ hash: paymentHash, exp: Date.now() + 3_600_000 })
      ).toString("base64");
      return { paymentRequest: "lnbc_mock", paymentHash, macaroon, amountSats };
    },
    async checkPayment(): Promise<boolean> { return true; },
  };
}

// Usage in tests:
const mock = makeMockProvider();
app.get("/premium", l402({ priceSats: 10, lightning: mock }), handler);

// Step 1 — unauthenticated → 402
const res402 = await request(app).get("/premium");
// res402.body.macaroon  ← use this

// Step 2 — pay with mock preimage → 200
const res200 = await request(app)
  .get("/premium")
  .set("Authorization", `L402 ${res402.body.macaroon}:${mock.preimage}`);
// res200.status === 200 ✓
للاختبار بأموال حقيقية مع بيئة الاختبار، استخدم وضع الاختبار في OpenNode:
const lightning = new OpenNodeProvider(process.env.OPENNODE_KEY!, true); // testMode: no real sats
دليل الاختبار الكامل ← الاختبار