สิ่งที่รับได้
ใช้ Base ไม่ใช่ Ethereum mainnet แม้ทั้งคู่ใช้ ETH และที่อยู่คล้ายกัน เลือกสัญญาโทเคนให้ตรง รุ่นผ่านบริดจ์และรุ่นออกโดยตรงเป็นคนละสินทรัพย์
ตั้งค่าร้านของคุณ
- ติดตั้ง Wholly Crypto สร้างโปรเจกต์และร้าน และเก็บไฟล์สำรองกระเป๋าเป็นส่วนตัว
- ตรวจการเชื่อมต่อที่ใช้กับตัวสแกนได้ และเปิดเชนกับสินทรัพย์ที่ต้องการใน ร้าน → วิธีชำระ
- ตั้งจำนวนการยืนยันและวันหมดอายุ ทดสอบใบแจ้งหนี้ยอดเล็กและตรวจว่าชำระเสร็จก่อนดำเนินการตามคำสั่งซื้อ
เงินที่รับจะไปที่ใด
Base และ Ethereum ใช้ที่อยู่คล้ายกันแต่เป็นคนละเครือข่าย แต่ละใบแจ้งหนี้มีที่อยู่รับบนเชนที่เลือก ต้องถือว่า native USDC กับเวอร์ชัน bridged เป็นคนละสินทรัพย์
คู่มือตั้งค่ากระเป๋าย้ายเงินเมื่อคุณพร้อม
เก็บ ETH บน Base สำหรับค่าธรรมเนียมขาออก ตั้ง sweep ไปปลายทางที่รับฝากบน Base และตรวจยอดขั้นต่ำ การส่งไปช่องทางฝากที่รองรับเฉพาะ Ethereum ไม่ได้ย้ายเงินข้ามเครือข่าย
บทสอนรวบรวมเงินอัตโนมัติการเชื่อมต่อ Base จะ bridge เงินไป Ethereum ให้ไหม?
ไม่ การรับและ sweep อยู่บน Base การแปลงผ่านตลาดซื้อขายเป็นทางเลือกและต้องมีช่องทางฝาก Base กับคู่ซื้อขายที่รองรับ เงินทั่วไปที่ได้อยู่ในบัญชีตลาดซื้อขาย ไม่ได้เข้าธนาคารอัตโนมัติ
แก้ปัญหาการชำระเงิน
ตรวจเครือข่ายนี้ก่อน
ETH บน Ethereum จ่ายค่าธรรมเนียม Base ไม่ได้ ตรวจเครือข่ายฝากเป็น Base และแยก native USDC ออกจาก USDC เวอร์ชัน bridged
การชำระหายไปหรือล่าช้า
เทียบเครือข่าย ที่อยู่ สินทรัพย์ และข้อมูลอ้างอิงที่จำเป็นให้ตรงใบแจ้งหนี้ ตรวจความพร้อมตัวสแกนและความคืบหน้าการยืนยัน อย่าขอให้จ่ายครั้งที่สองจนกว่าจะตรวจธุรกรรมแรกแล้ว
คู่มือรับเงินกู้คืนหรือรวมกระเป๋า
เก็บไฟล์สำรองส่วนตัวและรายละเอียดการสร้างที่อยู่ แอปกระเป๋าอื่นอาจไม่แสดงทุกที่อยู่รับเงิน การส่งและกู้คืนขึ้นกับเชนและรูปแบบกระเป๋า การนำเข้าคำกู้คืนอย่างเดียวไม่รับประกันทั้งสองอย่าง
สำรองและกู้คืนค่าธรรมเนียมและการตรวจสอบ
ค่าธรรมเนียมประมวลผลเริ่มต้นคือ 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": "base",
"asset_tickers": [
"ETH"
]
}
]
}'// 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": "base",
"asset_tickers": [
"ETH"
]
}
]
}`;
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": "base",
"asset_tickers": [
"ETH"
]
}
]
}
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": "base",
"asset_tickers": [
"ETH"
]
}
]
}""".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))