Co możesz otrzymywać
Używaj BNB Smart Chain i zweryfikowanych kontraktów tokenów EVM, często nazywanych BEP-20. To nie jest dawny Beacon Chain. Opłaty używają BNB, nie ETH.
Skonfiguruj sklep
- Zainstaluj Wholly Crypto, utwórz projekt i sklep oraz zachowaj prywatną kopię zapasową portfela.
- Sprawdź połączenia zgodne ze skanerem i włącz blockchain oraz zamierzone aktywa w Sklep → Metody płatności.
- Ustaw potwierdzenia i termin ważności. Przetestuj fakturę na małą kwotę i zweryfikuj rozliczenie przed realizacją zamówień.
Dokąd trafiają płatności
Faktury używają osobnych adresów odbiorczych. Znajomy adres 0x nie identyfikuje sieci: klient musi wybrać BNB Smart Chain, nie Ethereum ani dawny Beacon Chain.
Przewodnik konfiguracji portfelaPrzenieś środki, gdy będziesz gotowy
Konsoliduj wpływy ręcznymi przelewami lub automatycznym sweepem. Przelewy tokenów potrzebują BNB na każdym adresie źródłowym. Gas finansowany przez projekt może pomóc w granicach limitów; ETH w Ethereum nie opłaci tych opłat.
Poradnik automatycznego sweepCzy mogę akceptować token tylko dlatego, że jego nazwa pasuje?
Nie. Sprawdź jego dokładny kontrakt BNB Smart Chain i emitenta. Wersje przeniesione mostem lub opakowane są osobnymi aktywami z własnym ryzykiem. Włącz tylko zweryfikowany kontrakt, który zamierzasz przyjmować.
Rozwiązywanie problemów z płatnościami
Najpierw sprawdź tę sieć
Wybierz BNB Smart Chain, nie Ethereum ani Beacon Chain. Pasujący adres 0x nie czyni przelewu międzyłańcuchowym. Wysyłanie tokenów potrzebuje BNB w tej sieci.
Płatność zaginęła lub jest opóźniona
Dopasuj sieć, adres, aktywo i ewentualny wymagany identyfikator do faktury. Sprawdź gotowość skanera i postęp potwierdzeń. Nie proś o drugą płatność, dopóki nie sprawdzisz pierwszej transakcji.
Przewodnik odbieraniaPrzywracaj lub konsoliduj portfele
Zachowaj prywatną kopię zapasową i szczegóły derywacji. Inna aplikacja portfela może nie wyświetlić każdego adresu odbiorczego. Wysyłanie i odzyskiwanie zależą od blockchaina i formatu portfela; samo zaimportowanie słów odzyskiwania nie gwarantuje żadnego z nich.
Kopia zapasowa i przywracanieOpłaty i weryfikacja
Domyślna opłata za przetwarzanie wynosi 1% wartości faktury w walucie fiducjarnej, płatne z oddzielnego salda. Obowiązuje przypisana Ci stawka. Opłaty sieciowe i koszty serwera są oddzielne.
Publiczni dostawcy mogą mieć awarie lub limity zapytań. Wysłana transakcja ani przekierowanie powrotne nie są dowodem płatności. Używaj zweryfikowanego statusu faktury i podpisanych powiadomień.
Środki na przetwarzanie API, IPN i webhookiKalkulator kursów
Przelicz kwotę
To wartość szacunkowa, a nie wycena płatności. Nie obejmuje opłat sieciowych, opłat giełdowych ani narzutów kursowych sprzedawcy.
Skąd pochodzą kursy?
Szacunki dla krypto korzystają z buforowanych publicznych cen Kraken oraz Binance tam, gdzie są dostępne. Niektóre ceny Binance używają USDT jako odniesienia dla USD. Kursy walut fiducjarnych pochodzą z Frankfurter i są dziennymi kursami referencyjnymi, a nie bieżącymi notowaniami rynkowymi.
Zestaw danych odświeża się automatycznie. Sprawdź daty źródeł pod wynikiem. Wpisana kwota pozostaje w Twojej przeglądarce. Obecność aktywa na liście nie gwarantuje obsługi płatności.
Kraken · Binance · Frankfurter · Nazwy i ikony aktywów: CoinGecko
Utwórz fakturę przez API
Uruchamiaj te przykłady na swoim serwerze. Zastąp host API, identyfikator projektu i sklepu oraz zachowaj dane dostępu w tajemnicy. Kwoty są ciągami dziesiętnymi.
Najpierw włącz metodę w sklepie. Wybór zawęża włączone metody; nie dodaje aktywów. Jeśli nic nie pasuje, obowiązują ustawienia domyślne sklepu. Sprawdź zwrócone metody przed pokazaniem strony płatności.
: "${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))