Những gì bạn có thể nhận
Dùng Arbitrum One. ETH trên Ethereum mainnet hoặc mạng Arbitrum khác không cấp tiền cho hóa đơn Arbitrum One. Giữ ETH trên chuỗi này để gom token.
Thiết lập cửa hàng
- Cài Wholly Crypto, tạo dự án và cửa hàng, giữ sao lưu ví riêng tư.
- Kiểm tra kết nối tương thích máy quét và bật chuỗi, tài sản muốn dùng trong Cửa hàng → Phương thức thanh toán.
- Đặt xác nhận và thời hạn. Thử hóa đơn nhỏ và xác minh quyết toán trước khi hoàn tất đơn hàng.
Nơi tiền thanh toán đến
Hóa đơn dùng địa chỉ nhận riêng. Giữ sao lưu đầy đủ, danh sách địa chỉ và chi tiết dẫn xuất; ví nhập vào có thể không phát hiện ngay mọi địa chỉ hóa đơn.
Hướng dẫn thiết lập víChuyển tiền khi bạn sẵn sàng
Gửi thủ công và gom tự động hỗ trợ đồng gốc và token ERC-20 đã xác minh. Mỗi nguồn token cần đồng gốc của mạng này để trả gas. Gas do dự án cấp có thể cấp cho nguồn đủ điều kiện trong giới hạn của bạn.
Hướng dẫn gom tiền tự độngKhắc phục sự cố thanh toán
Kiểm tra mạng này trước
Chọn Arbitrum One, không phải Nova hoặc Ethereum. Giữ ETH trên Arbitrum One để gửi. Phí mạng có thể gồm cả chi phí thực thi lẫn dữ liệu.
Thanh toán thiếu hoặc chậm
Đối chiếu mạng, địa chỉ, tài sản và mọi tham chiếu bắt buộc với hóa đơn. Kiểm tra máy quét sẵn sàng và tiến độ xác nhận. Đừng yêu cầu thanh toán lần hai trước khi kiểm tra giao dịch đầu.
Hướng dẫn nhận tiềnKhôi phục hoặc hợp nhất ví
Giữ sao lưu riêng và chi tiết dẫn xuất. Ứng dụng ví khác có thể không hiển thị mọi địa chỉ nhận. Gửi và khôi phục phụ thuộc chuỗi, định dạng ví; chỉ nhập từ khôi phục không bảo đảm cả hai.
Sao lưu & khôi phụcPhí 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": "arbitrum",
"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": "arbitrum",
"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": "arbitrum",
"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": "arbitrum",
"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))