ما يمكنك استقباله
يستقبل Lightning عملة BTC، لا العملات المستقرة أو تحويلات العناوين على السلسلة. لكل طلب دفع مبلغ وبصمة دفع ووقت انتهاء خاص به. يدفع العميل فاتورة Lightning كاملة.
مدفوعات Bitcoin على السلسلةأعدّ متجرك
في الإعدادات ← اتصالات الشبكات، أضف LND عبر HTTPS أوNostr Wallet Connect عبر WSS، ثم فعّل الاتصال في المتجر. تتطلب سياسة الاتصال الحالية نقاط نهاية يمكن الوصول إليها علنًا؛ لن يعمل عنوان LAN فقط أوTor فقط مباشرة.
بيانات الاعتماد وحفظ الأموال
استخدم بيانات اعتماد استقبال محدودة، ولا تستخدم macaroon لمسؤول LND أو للإنفاق أبدًا. يصف NWC الاتصال لا نموذج حفظ الأموال؛ تحقق مما إذا كانت المحفظة المختارة تحتفظ بالمفاتيح نيابة عنك.
أين تصل مدفوعاتك
يحتوي QR على فاتورة Lightning بصيغة BOLT11، لا عنوان Bitcoin. لا ترسل معاملة على السلسلة لدفعها أبدًا. أنشئ فاتورة جديدة إذا انتهى الطلب؛ لا يمكن تمديد موعده ببساطة.
متى يكتمل الدفع؟
يتحقق Wholly Crypto من التسوية التي تبلغ عنها المحفظة المتصلة. فاتورة مفتوحة أوHTLC محتجز ليسا دفعة مكتملة. لا تنطبق تأكيدات الكتل أو روابط مستكشف معاملات عام على استلام Lightning.
انقل الأموال عندما تكون جاهزًا
استخدم المحفظة أو العقدة الخارجية للمدفوعات الصادرة وسيولة القنوات والنسخ الاحتياطية. لا ينقل التجميع على السلسلة في Wholly Crypto أرصدة Lightning. تصدير محفظة المشروع لا ينسخ تلك المحفظة الخارجية احتياطيًا.
دليل محفظة Lightningاستكشاف مشكلات الدفع
إذا تعذر توجيه الدفع، فتحقق من السيولة الواردة وتوفر المحفظة وانتهاء الطلب. API سليمة لا تضمن التوجيه. بعد دفعة غير مؤكدة النتيجة، تحقق من التسوية قبل مطالبة العميل بإعادة المحاولة.
الرسوم والتحقّق
رسوم المعالجة الافتراضية 1% من قيمة الفاتورة النقدية، تُدفع من رصيد منفصل. تنطبق النسبة المحددة لك. رسوم الشبكة وتكاليف الخادم منفصلة.
قد تتعرض المزوّدات العامة لانقطاعات أوحدود طلبات. ليست المعاملة المُرسلة أوإعادة التوجيه للعودة إثبات دفع. استخدم حالة الفاتورة المتحقّق منها والإشعارات الموقّعة.
رصيد المعالجة API وIPN وwebhooksحاسبة أسعار الصرف
حوّل مبلغًا
تقدير، وليس عرض دفع. لا يشمل رسوم الشبكة أو منصة التداول أو هوامش التاجر.
من أين تأتي الأسعار؟
تستخدم تقديرات العملات المشفّرة أسعار Kraken العامة المخزّنة مؤقتًا، مع Binance حيث تتوفر. تستخدم بعض أسعار Binance عملة USDT مرجعًا للدولار. تأتي أسعار العملات النقدية من Frankfurter، وهي أسعار مرجعية يومية وليست عروض تداول مباشرة.
تتحدث البيانات تلقائيًا. راجع تواريخ المصادر أسفل النتيجة. يبقى المبلغ المُدخل في متصفحك. إدراج أصل لا يضمن دعمه للدفع.
Kraken · Binance · Frankfurter · أسماء الأصول وأيقوناتها: CoinGecko
أنشئ فاتورة عبر API
شغّل هذه الأمثلة على خادمك. استبدل مضيف API ومعرّف المشروع والمتجر، واحتفظ ببيانات الاعتماد خاصة. المبالغ نصوص عشرية.
فعّل الطريقة في المتجر أولًا. يضيّق الاختيار الطرق المفعّلة ولا يضيف أصولًا. إذا لم يطابق شيء تُطبّق افتراضيات المتجر. افحص الطرق المرتجعة قبل عرض الدفع.
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new invoice.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: order-1042-attempt-1' \
--header 'Content-Type: application/json' \
--data-raw '{
"amount": "25.00",
"currency": "EUR",
"order_id": "order-1042",
"payment_methods": [
{
"chain_slug": "bitcoin",
"payment_rail": "lightning"
}
]
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new invoice.
const body = `{
"amount": "25.00",
"currency": "EUR",
"order_id": "order-1042",
"payment_methods": [
{
"chain_slug": "bitcoin",
"payment_rail": "lightning"
}
]
}`;
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "order-1042-attempt-1",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new invoice.
$body = <<<'JSON'
{
"amount": "25.00",
"currency": "EUR",
"order_id": "order-1042",
"payment_methods": [
{
"chain_slug": "bitcoin",
"payment_rail": "lightning"
}
]
}
JSON;
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: order-1042-attempt-1", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new invoice.
headers = {
"Idempotency-Key": "order-1042-attempt-1",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"amount": "25.00",
"currency": "EUR",
"order_id": "order-1042",
"payment_methods": [
{
"chain_slug": "bitcoin",
"payment_rail": "lightning"
}
]
}""".encode("utf-8")
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))