Yang dapat kamu terima
Gunakan mainnet Ethereum. Token ERC-20 terverifikasi seperti USDC dan USDT membutuhkan ETH pada setiap alamat pengirim saat kamu memindahkannya nanti. Mengimpor frasa pemulihan ke MetaMask mungkin hanya menampilkan akun pertama.
Siapkan tokomu
- Pasang Wholly Crypto, buat proyek dan toko, lalu simpan cadangan dompet secara privat.
- Periksa koneksi yang kompatibel dengan pemindai dan aktifkan chain serta aset yang dimaksud di Toko → Metode pembayaran.
- Atur konfirmasi dan masa berlaku. Uji invoice kecil dan verifikasi penyelesaian sebelum memenuhi pesanan.
Tempat pembayaranmu diterima
Setiap invoice mendapat alamat penerima baru. Cadanganmu mencakup kunci turunan, tetapi mengimpor kata pemulihan ke MetaMask mungkin hanya menampilkan akun pertama. Simpan juga detail alamat dan derivasi.
Panduan penyiapan dompetPindahkan dana saat kamu siap
Gunakan sweep otomatis untuk mengumpulkan penerimaan ke satu tujuan. Setiap alamat pemegang token membutuhkan ETH untuk mengirim. Gas yang didanai proyek dapat memasok alamat yang memenuhi syarat dalam batasmu; alamat invoice kosong yang belum dibayar tidak didanai.
Tutorial sweep otomatisBisakah saya menerima USDT dan USDC di alamat yang sama?
Dompet dapat menyimpan keduanya, tetapi setiap invoice memiliki metode pembayaran dan jumlahnya sendiri. Aktifkan kontrak Ethereum yang tepat di toko. Jangan menggantinya dengan token berticker sama dari jaringan lain.
Pemecahan masalah pembayaran
Periksa jaringan ini terlebih dahulu
Periksa mainnet Ethereum dan kontrak token yang tepat. Saldo token tidak dapat membayar gasnya sendiri: setiap alamat pengirim membutuhkan ETH di Ethereum.
Pembayaran tidak ditemukan atau tertunda
Cocokkan jaringan, alamat, aset, dan referensi yang diwajibkan dengan invoice. Periksa kesiapan pemindai dan progres konfirmasi. Jangan meminta pembayaran kedua sebelum memeriksa transaksi pertama.
Panduan penerimaanPulihkan atau gabungkan dompet
Simpan cadangan privat dan detail derivasimu. Aplikasi dompet lain mungkin tidak menampilkan setiap alamat penerima. Pengiriman dan pemulihan bergantung pada chain serta format dompet; keduanya tidak dijamin hanya dengan mengimpor kata pemulihan.
Pencadangan & pemulihanBiaya dan verifikasi
Biaya pemrosesan bawaan adalah 1% dari nilai fiat invoice, dibayar dari kredit terpisah. Tarif yang ditetapkan untukmu berlaku. Biaya jaringan dan server terpisah.
Penyedia publik dapat mengalami gangguan atau batas laju. Transaksi yang diajukan atau pengalihan kembali bukan bukti pembayaran. Gunakan status invoice terverifikasi dan notifikasi bertanda tangan.
Kredit pemrosesan API, IPN & webhookKalkulator kurs
Konversikan jumlah
Perkiraan, bukan kuotasi pembayaran. Biaya jaringan, biaya bursa, dan spread merchant tidak termasuk.
Dari mana kurs berasal?
Perkiraan kripto menggunakan harga publik Kraken dalam cache, dengan Binance jika tersedia. Beberapa harga Binance menggunakan USDT sebagai acuan USD. Kurs fiat berasal dari Frankfurter dan merupakan kurs referensi harian, bukan kuotasi perdagangan langsung.
Snapshot diperbarui otomatis. Periksa tanggal sumber di bawah hasilmu. Jumlah yang kamu masukkan tetap di browsermu. Pencantuman aset tidak menjamin dukungan pembayaran.
Kraken · Binance · Frankfurter · Nama & ikon aset: CoinGecko
Buat invoice dengan API
Jalankan contoh ini di servermu. Ganti host API, ID proyek, dan ID toko, serta jaga kerahasiaan kredensial. Jumlah berupa string desimal.
Aktifkan metode di toko terlebih dahulu. Pemilihan mempersempit metode yang diaktifkan; bukan menambahkan aset. Jika tidak ada yang cocok, pengaturan bawaan toko berlaku. Periksa metode yang dikembalikan sebelum menampilkan checkout.
: "${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": "ethereum",
"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": "ethereum",
"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": "ethereum",
"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": "ethereum",
"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))