Qué puedes recibir
ALGO nativo usa historial de transacciones de Indexer o algod compatible. Se aplican saldos mínimos de cuenta. Algorand Standard Assets, incluidos los ASA de USDC, no son activos de factura aceptados.
Configura tu tienda
- Instala Wholly Crypto, crea un proyecto y una tienda, y guarda una copia privada de tu wallet.
- Comprueba las conexiones compatibles con el escáner y activa la cadena y los activos en Store → Payment methods.
- Configura confirmaciones y caducidad. Prueba una factura pequeña y verifica la liquidación antes de entregar pedidos.
Dónde llegan tus pagos
Cada factura usa su dirección. Guarda la copia completa, la lista de direcciones y la derivación; una wallet importada puede no encontrar todas al instante.
Guía para recibir pagosMueve los fondos cuando quieras
Los envíos y barridos admiten la moneda nativa. Reserva fondos para comisiones, reservas y almacenamiento. Poder recibir no garantiza que el proveedor permita enviar.
Tutorial de barrido automáticoProblemas con pagos
Revisa primero esta red
Ten en cuenta el saldo mínimo de la cuenta. Solo se acepta ALGO nativo; ASA o USDC no pagan este método.
Falta un pago o se retrasa
Compara red, dirección, activo y referencia con la factura. Revisa el escáner y las confirmaciones. No pidas otro pago sin comprobar la primera transacción.
Guía para recibir pagosRestaura wallets o agrupa fondos
Guarda tu copia privada y los datos de derivación. Otra wallet puede no mostrar todas las direcciones. Envío y recuperación dependen de la red y el formato; importar las palabras no los garantiza.
Copia de seguridad y restauraciónComisiones y verificación
La comisión predeterminada es el 1 % del valor fiat de la factura, pagada con créditos aparte. Se aplica tu tarifa asignada. Las comisiones de red y el servidor van aparte.
Los proveedores públicos pueden fallar o limitar peticiones. Una transacción enviada o una redirección no prueban el pago. Usa el estado verificado y las notificaciones firmadas.
Créditos de procesamiento API, IPN y webhooksCalculadora de cambio
Convertir un importe
Es una estimación, no una cotización de pago. No incluye comisiones de red, del exchange ni márgenes del comercio.
¿De dónde vienen los tipos de cambio?
Las estimaciones cripto usan precios públicos de Kraken en caché y Binance cuando está disponible. Algunos precios de Binance usan USDT como referencia de USD. Los tipos fiat vienen de Frankfurter y son referencias diarias, no cotizaciones de negociación en tiempo real.
Los datos se actualizan automáticamente. Comprueba las fechas de las fuentes debajo del resultado. El importe que introduces permanece en tu navegador. Que un activo aparezca no garantiza que admita pagos.
Kraken · Binance · Frankfurter · Nombres e iconos de activos: CoinGecko
Crea una factura con la API
Ejecuta los ejemplos en tu servidor. Sustituye el host API y los IDs de proyecto y tienda. Mantén la clave privada. Los importes son cadenas decimales.
Activa primero el método en la tienda. La selección limita los métodos activos, no añade activos. Si no coincide ninguno, se usan los predeterminados. Revisa la respuesta antes de abrir el 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": "algorand",
"asset_tickers": [
"ALGO"
]
}
]
}'// 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": "algorand",
"asset_tickers": [
"ALGO"
]
}
]
}`;
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": "algorand",
"asset_tickers": [
"ALGO"
]
}
]
}
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": "algorand",
"asset_tickers": [
"ALGO"
]
}
]
}""".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))