สิ่งที่รับได้
ใช้ DOT บน Polkadot Asset Hub ไม่ใช่ relay chain ต้องมี API ธุรกรรม Asset Hub ที่เข้ากันได้หรือตัวสแกนบล็อกดิบที่รองรับ โทเคน Asset Hub อื่นไม่ใช่วิธีชำระใบแจ้งหนี้
ตั้งค่าร้านของคุณ
- ติดตั้ง Wholly Crypto สร้างโปรเจกต์และร้าน และเก็บไฟล์สำรองกระเป๋าเป็นส่วนตัว
- ตรวจการเชื่อมต่อที่ใช้กับตัวสแกนได้ และเปิดเชนกับสินทรัพย์ที่ต้องการใน ร้าน → วิธีชำระ
- ตั้งจำนวนการยืนยันและวันหมดอายุ ทดสอบใบแจ้งหนี้ยอดเล็กและตรวจว่าชำระเสร็จก่อนดำเนินการตามคำสั่งซื้อ
เงินที่รับจะไปที่ใด
ใบแจ้งหนี้ใช้ที่อยู่รับแยกกัน เก็บไฟล์สำรอง รายชื่อที่อยู่ และรายละเอียดการสร้างที่อยู่ให้ครบ กระเป๋าที่นำเข้าอาจไม่พบทันทีทุกที่อยู่ใบแจ้งหนี้
คู่มือรับเงินย้ายเงินเมื่อคุณพร้อม
การส่งเองและ sweep อัตโนมัติรองรับเหรียญหลัก เก็บให้พอสำหรับค่าธรรมเนียม เงินสำรองเครือข่าย หรือข้อกำหนดพื้นที่จัดเก็บ การรองรับรับเงินอย่างเดียวไม่ได้ยืนยันว่าผู้ให้บริการส่งธุรกรรมได้
บทสอนรวบรวมเงินอัตโนมัติแก้ปัญหาการชำระเงิน
ตรวจเครือข่ายนี้ก่อน
ใช้ช่องทาง Polkadot Asset Hub ที่รองรับ ไม่ใช่การฝาก Relay Chain ทั้งประวัติการรับและ runtime การส่งต้องเข้ากันได้กับผู้ให้บริการที่ตั้งไว้
การชำระหายไปหรือล่าช้า
เทียบเครือข่าย ที่อยู่ สินทรัพย์ และข้อมูลอ้างอิงที่จำเป็นให้ตรงใบแจ้งหนี้ ตรวจความพร้อมตัวสแกนและความคืบหน้าการยืนยัน อย่าขอให้จ่ายครั้งที่สองจนกว่าจะตรวจธุรกรรมแรกแล้ว
คู่มือรับเงินกู้คืนหรือรวมกระเป๋า
เก็บไฟล์สำรองส่วนตัวและรายละเอียดการสร้างที่อยู่ แอปกระเป๋าอื่นอาจไม่แสดงทุกที่อยู่รับเงิน การส่งและกู้คืนขึ้นกับเชนและรูปแบบกระเป๋า การนำเข้าคำกู้คืนอย่างเดียวไม่รับประกันทั้งสองอย่าง
สำรองและกู้คืนค่าธรรมเนียมและการตรวจสอบ
ค่าธรรมเนียมประมวลผลเริ่มต้นคือ 1% ของมูลค่าใบแจ้งหนี้ในเงินตราทั่วไป จ่ายจากเครดิตแยก ใช้อัตราที่กำหนดให้คุณ ค่าธรรมเนียมเครือข่ายและค่าเซิร์ฟเวอร์แยกต่างหาก
ผู้ให้บริการสาธารณะอาจหยุดทำงานหรือจำกัดอัตรา ธุรกรรมที่ส่งแล้วหรือการเปลี่ยนเส้นทางกลับไม่ใช่หลักฐานชำระ ใช้สถานะใบแจ้งหนี้ที่ตรวจสอบแล้วและการแจ้งเตือนที่ลงนาม
เครดิตประมวลผล API, IPN และ webhookเครื่องคำนวณอัตราแลกเปลี่ยน
แปลงจำนวนเงิน
เป็นค่าประมาณ ไม่ใช่ราคาเสนอชำระเงิน ไม่รวมค่าธรรมเนียมเครือข่าย ค่าธรรมเนียมศูนย์ซื้อขาย และส่วนต่างผู้ค้า
อัตรามาจากไหน?
ค่าประมาณคริปโตใช้ราคาสาธารณะ Kraken ในแคช และ Binance เมื่อมี บางราคา Binance ใช้ USDT อ้างอิง USD อัตราเงินตราทั่วไปมาจาก 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": "polkadot",
"asset_tickers": [
"DOT"
]
}
]
}'// 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": "polkadot",
"asset_tickers": [
"DOT"
]
}
]
}`;
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": "polkadot",
"asset_tickers": [
"DOT"
]
}
]
}
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": "polkadot",
"asset_tickers": [
"DOT"
]
}
]
}""".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))