Що можна отримувати
Lightning приймає BTC, а не стейблкоїни чи перекази на блокчейн-адреси. Кожен запит має власну суму, хеш платежу й термін дії. Клієнт оплачує повний рахунок Lightning.
Платежі Bitcoin у блокчейніНалаштуй магазин
У налаштуваннях → Підключення мереж додай LND через HTTPS або Nostr Wallet Connect через WSS, потім увімкни це підключення в магазині. Поточна політика підключень вимагає публічно доступних endpoint; адреса лише в LAN чи Tor напряму не працюватиме.
Облікові дані та зберігання коштів
Використовуй обмежені облікові дані лише для отримання, ніколи не адміністративний чи витратний macaroon LND. NWC описує підключення, а не зберігання: перевір, чи вибраний гаманець тримає ключі замість тебе.
Куди надходять твої платежі
QR містить рахунок Lightning BOLT11, а не адресу Bitcoin. Ніколи не надсилай транзакцію в блокчейні для його оплати. Створи новий рахунок, якщо запит прострочено; його термін не можна просто продовжити.
Коли платіж завершено?
Wholly Crypto перевіряє завершення, про яке повідомляє підключений гаманець. Відкритий рахунок або утримуваний HTLC не є оплатою. Для надходження Lightning немає підтверджень блоків чи публічного посилання на оглядач транзакцій.
Переміщуй кошти, коли будеш готовий
Використовуй зовнішній гаманець або вузол для вихідних платежів, ліквідності каналів і резервних копій. Блокчейн-sweep Wholly Crypto не переміщує баланси Lightning. Експорт гаманця проєкту не створює копію цього зовнішнього гаманця.
Посібник із гаманця LightningУсунення проблем із платежами
Якщо платіж не знаходить маршрут, перевір вхідну ліквідність, доступність гаманця й термін дії запиту. Справний API не гарантує маршрут. Після платежу з невизначеним результатом перевір його завершення, перш ніж просити клієнта повторити спробу.
Комісії й перевірка
Стандартна комісія за обробку становить 1% фіатної вартості рахунку й сплачується з окремих коштів. Застосовується призначена тобі ставка. Мережеві комісії й витрати на сервер оплачуються окремо.
Публічні провайдери можуть мати збої або обмеження частоти запитів. Надіслана транзакція або зворотне переспрямування не є доказом оплати. Використовуй перевірений статус рахунку й підписані сповіщення.
Кошти на обробку API, IPN та вебхукиКалькулятор курсів
Конвертувати суму
Орієнтовний розрахунок, не платіжне котирування. Мережеві й біржові комісії та спреди мерчантів не включено.
Звідки беруться курси?
Крипторозрахунки використовують кешовані публічні ціни Kraken, а де доступно - Binance. Деякі ціни Binance використовують USDT як орієнтир USD. Фіатні курси надходять із Frankfurter і є щоденними довідковими курсами, не поточними торговими котируваннями.
Знімок оновлюється автоматично. Перевір дати джерел під результатом. Введена сума залишається в браузері. Наявність активу в списку не гарантує підтримки платежів.
Kraken · Binance · Frankfurter · Назви й іконки активів: CoinGecko
Створюй рахунок через API
Запускай ці приклади на своєму сервері. Заміни хост API, ID проєкту й ID магазину та зберігай облікові дані в таємниці. Суми передаються десятковими рядками.
Спочатку ввімкни спосіб у магазині. Вибір звужує увімкнені способи, а не додає активів. Якщо нічого не збігається, діють стандартні налаштування магазину. Перевір повернуті способи перед показом сторінки оплати.
: "${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))