Що можна отримувати
Використовуй BNB Smart Chain і перевірені контракти токенів EVM, які часто називають BEP-20. Це не колишня Beacon Chain. Комісії сплачуються в BNB, а не ETH.
Налаштуй магазин
- Встанови Wholly Crypto, створи проєкт і магазин та зберігай приватну резервну копію гаманця.
- Перевір підключення, сумісні зі сканером, і ввімкни мережу й потрібні активи в «Магазин → Способи оплати».
- Налаштуй підтвердження й строк дії. Перевір невеликий рахунок і переконайся в завершенні розрахунку перед виконанням замовлень.
Куди надходять твої платежі
Рахунки використовують окремі адреси отримання. Знайома адреса 0x не визначає мережу: клієнт має вибрати BNB Smart Chain, а не Ethereum чи колишню Beacon Chain.
Посібник із налаштування гаманцівПереміщуй кошти, коли будеш готовий
Об’єднуй надходження ручним надсиланням або автоматичним sweep. Для переказів токенів потрібен BNB на кожній вихідній адресі. Gas коштом проєкту може допомогти в межах твоїх лімітів; ETH в Ethereum не може сплачувати ці комісії.
Посібник з автоматичного sweepЧи можна приймати токен лише тому, що його назва збігається?
Ні. Перевір точний контракт у BNB Smart Chain та емітента. Мостові або обгорнуті версії - окремі активи з власними ризиками. Увімкни лише перевірений контракт, який ти маєш намір приймати.
Усунення проблем із платежами
Спершу перевір цю мережу
Вибери BNB Smart Chain, а не Ethereum чи Beacon Chain. Однакова адреса 0x не робить переказ міжмережевим. Для надсилання токенів потрібен BNB у цій мережі.
Платіж відсутній або затримується
Зістав мережу, адресу, актив і будь-який обов’язковий ідентифікатор із рахунком. Перевір готовність сканера й перебіг підтвердження. Не проси другого платежу, доки не перевіриш першу транзакцію.
Посібник з отриманняВідновлюй або об’єднуй гаманці
Зберігай приватну резервну копію й деталі виведення. Інший застосунок гаманця може не показати всі адреси отримання. Надсилання й відновлення залежать від мережі та формату гаманця; сам імпорт слів відновлення не гарантує ні того, ні іншого.
Резервне копіювання та відновленняКомісії й перевірка
Стандартна комісія за обробку становить 1% фіатної вартості рахунку й сплачується з окремих коштів. Застосовується призначена тобі ставка. Мережеві комісії й витрати на сервер оплачуються окремо.
Публічні провайдери можуть мати збої або обмеження частоти запитів. Надіслана транзакція або зворотне переспрямування не є доказом оплати. Використовуй перевірений статус рахунку й підписані сповіщення.
Кошти на обробку API, IPN та вебхукиКалькулятор курсів
Конвертувати суму
Орієнтовний розрахунок, не платіжне котирування. Мережеві й біржові комісії та спреди мерчантів не включено.
Звідки беруться курси?
Крипторозрахунки використовують кешовані публічні ціни Kraken, а де доступно - Binance. Деякі ціни Binance використовують USDT як орієнтир USD. Фіатні курси надходять із Frankfurter і є щоденними довідковими курсами, не поточними торговими котируваннями.
Знімок оновлюється автоматично. Перевір дати джерел під результатом. Введена сума залишається в браузері. Наявність активу в списку не гарантує підтримки платежів.
Kraken · Binance · Frankfurter · Назви й іконки активів: CoinGecko
Створюй рахунок через API
Запускай ці приклади на своєму сервері. Заміни хост API, ID проєкту й ID магазину та зберігай облікові дані в таємниці. Суми передаються десятковими рядками.
Спочатку ввімкни спосіб у магазині. Вибір звужує увімкнені способи, а не додає активів. Якщо нічого не збігається, діють стандартні налаштування магазину. Перевір повернуті способи перед показом сторінки оплати.
: "${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": "bnb-chain",
"asset_tickers": [
"BNB"
]
}
]
}'// 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": "bnb-chain",
"asset_tickers": [
"BNB"
]
}
]
}`;
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": "bnb-chain",
"asset_tickers": [
"BNB"
]
}
]
}
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": "bnb-chain",
"asset_tickers": [
"BNB"
]
}
]
}""".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))