Những gì bạn có thể nhận
Lightning nhận BTC, không phải stablecoin hay chuyển đến địa chỉ trên chuỗi. Mỗi yêu cầu thanh toán có số tiền, hash thanh toán và thời hạn riêng. Khách trả toàn bộ hóa đơn Lightning.
Thanh toán Bitcoin trên chuỗiThiết lập cửa hàng
Trong Cài đặt → Kết nối chuỗi, thêm LND qua HTTPS hoặc Nostr Wallet Connect qua WSS, rồi bật kết nối đó trong cửa hàng. Chính sách kết nối hiện tại yêu cầu endpoint truy cập được công khai; địa chỉ chỉ dùng LAN hoặc Tor không hoạt động trực tiếp.
Thông tin xác thực và lưu ký
Dùng thông tin xác thực nhận tiền bị giới hạn, không bao giờ dùng macaroon quản trị hoặc chi tiêu LND. NWC mô tả kết nối, không phải lưu ký: kiểm tra ví đã chọn có giữ khóa thay bạn không.
Nơi tiền thanh toán đến
Mã QR chứa hóa đơn Lightning BOLT11, không phải địa chỉ Bitcoin. Không bao giờ gửi giao dịch trên chuỗi để trả nó. Tạo hóa đơn mới nếu yêu cầu hết hạn; không thể đơn giản kéo dài thời hạn.
Khi nào thanh toán hoàn tất?
Wholly Crypto xác minh quyết toán do ví đã kết nối báo. Hóa đơn mở hoặc HTLC đang giữ không phải thanh toán. Khoản nhận Lightning không áp dụng xác nhận block hoặc liên kết trình khám phá giao dịch công khai.
Chuyển tiền khi bạn sẵn sàng
Dùng ví hoặc node bên ngoài để thanh toán đi, quản lý thanh khoản kênh và sao lưu. Gom trên chuỗi của Wholly Crypto không chuyển số dư Lightning. Bản xuất ví dự án không sao lưu ví bên ngoài đó.
Hướng dẫn ví LightningKhắc phục sự cố thanh toán
Nếu thanh toán không tìm được tuyến, kiểm tra thanh khoản nhận, tình trạng ví và thời hạn yêu cầu. API khỏe không đảm bảo định tuyến. Sau khoản thanh toán chưa rõ kết quả, xác minh quyết toán trước khi yêu cầu khách thử lại.
Phí và xác minh
Phí xử lý mặc định là 1% giá trị tiền pháp định hóa đơn, trả từ tín dụng riêng. Áp dụng mức được gán cho bạn. Phí mạng và chi phí máy chủ riêng biệt.
Nhà cung cấp công khai có thể gặp sự cố hoặc giới hạn tần suất. Giao dịch đã gửi hay chuyển hướng quay lại không phải bằng chứng thanh toán. Dùng trạng thái hóa đơn đã xác minh và thông báo đã ký.
Tín dụng xử lý API, IPN & webhookCông cụ tính tỷ giá
Quy đổi số tiền
Đây là ước tính, không phải báo giá thanh toán. Không gồm phí mạng, phí sàn và mức chênh lệch của nhà bán hàng.
Tỷ giá đến từ đâu?
Ước tính tiền mã hóa dùng giá công khai Kraken được lưu đệm, với Binance khi có sẵn. Một số giá Binance dùng USDT làm tham chiếu USD. Tỷ giá tiền pháp định đến từ Frankfurter và là tỷ giá tham chiếu hằng ngày, không phải báo giá giao dịch trực tiếp.
Snapshot tự làm mới. Kiểm tra ngày nguồn bên dưới kết quả. Số tiền bạn nhập nằm trong trình duyệt. Tài sản được liệt kê không bảo đảm được hỗ trợ thanh toán.
Kraken · Binance · Frankfurter · Tên & biểu tượng tài sản: CoinGecko
Tạo hóa đơn bằng API
Chạy ví dụ này trên máy chủ của bạn. Thay máy chủ API, ID dự án và ID cửa hàng, giữ thông tin xác thực riêng tư. Số tiền là chuỗi thập phân.
Bật phương thức trong cửa hàng trước. Lựa chọn thu hẹp phương thức đã bật; không thêm tài sản. Nếu không khớp gì, áp dụng mặc định cửa hàng. Kiểm tra phương thức trả về trước khi hiển thị trang thanh toán.
: "${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))