Saltar al contenido principal

Visión General

Un on-ramp convierte moneda fiat (COP, MXN, USD) en criptomoneda (USDC, USDT). Los usuarios pagan con métodos de pago locales y reciben cripto en su billetera.

Flujo Completo de On-Ramp

1

Crear Usuario y Billetera

Configura perfil de usuario y billetera de destino
2

Obtener Cotización

Solicita cotización de precio para conversión
3

Crear Ramp

Ejecuta ramp con ID de cotización
4

Usuario Paga

Usuario completa pago vía PSE/SPEI/etc
5

Conversión

KillB convierte fiat a cripto
6

Cripto Entregado

USDC/USDT enviado a billetera del usuario

Ejemplo de Implementación

const executeOnRamp = async (userId, walletAddress, amount) => {
  try {
    // 1. Crear cuenta de billetera si es necesario
    let wallet = await findWalletAccount(userId, 'POLYGON', 'USDC');
    
    if (!wallet) {
      wallet = await createWalletAccount(userId, walletAddress, 'USDC', 'POLYGON');
    }
    
    // 2. Obtener cotización
    const quote = await fetch('/api/v2/quotations', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        fromCurrency: 'COP',
        toCurrency: 'USDC',
        amount: amount,
        amountIsToCurrency: false,
        cashInMethod: 'PSE',
        cashOutMethod: 'POLYGON'
      })
    }).then(r => r.json());
    
    console.log(`Recibirás: ${quote.toAmount} USDC`);
    
    // 3. Crear ramp
    const ramp = await fetch('/api/v2/ramps', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        quotationId: quote.id,
        userId: userId,
        accountId: wallet.id,
        externalId: `onramp-${Date.now()}`
      })
    }).then(r => r.json());
    
    // 4. Redirigir a pago
    return {
      rampId: ramp.id,
      paymentUrl: ramp.paymentInfo[0].url,
      expectedAmount: quote.toAmount
    };
    
  } catch (error) {
    console.error('On-ramp falló:', error);
    throw error;
  }
};

// Uso
const result = await executeOnRamp('user-id', '0x742d35...', 100000);
window.location.href = result.paymentUrl;

Métodos de Pago

Usuario redirigido a checkout PSE:
// Respuesta del ramp incluye URL de pago
const paymentUrl = ramp.paymentInfo[0].url;

// Redirigir usuario
window.location.href = paymentUrl;

// Usuario completa pago en PSE
// Webhook notifica cuando pago confirmado
Flujo:
  1. Redirigir a URL PSE
  2. Usuario selecciona banco
  3. Usuario autentica
  4. Usuario confirma pago
  5. Webhook recibido

Monitoreando Progreso

const monitorRamp = async (rampId) => {
  const pollInterval = setInterval(async () => {
    const ramp = await fetch(`/api/v2/ramps/${rampId}`, {
      headers: { 'Authorization': `Bearer ${token}` }
    }).then(r => r.json());
    
    console.log('Estado:', ramp.status);
    
    if (ramp.status === 'COMPLETED') {
      console.log('¡Cripto entregado!');
      console.log('Transacción:', ramp.transferProof);
      clearInterval(pollInterval);
    } else if (['FAILED', 'CANCELED'].includes(ramp.status)) {
      console.error('Ramp falló:', ramp.details);
      clearInterval(pollInterval);
    }
  }, 10000); // Verificar cada 10 segundos
};
Usa webhooks como método de notificación primario, con polling como respaldo.

Próximos Pasos