Saltar al contenido principal

Ejemplos

Esta página contiene ejemplos prácticos de uso del SDK de Retorna para Java.

Ejemplo Básico: Consultar Balance

import com.retorna.sdk.config.Environment;
import com.retorna.sdk.config.LoggingLevel;
import com.retorna.sdk.core.RetornaClient;
import com.retorna.sdk.core.RetornaClientOptions;
import com.retorna.sdk.account.BalanceResponse;

public class BasicExample {
public static void main(String[] args) {
RetornaClient client = RetornaClient.create(
RetornaClientOptions.builder()
.environment(Environment.DEVELOP)
.loggingLevel(LoggingLevel.INFO)
.clientId(System.getenv("RETORNA_CLIENT_ID"))
.clientSecret(System.getenv("RETORNA_CLIENT_SECRET"))
.privateKey(System.getenv("RETORNA_PRIVATE_KEY"))
.build()
);

try {
BalanceResponse balance = client.account.getBalance();
System.out.println("Balance: " + balance.getTotalBalance());
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
}

Ejemplo Completo: Flujo de Pago

import com.retorna.sdk.config.Environment;
import com.retorna.sdk.config.LoggingLevel;
import com.retorna.sdk.core.RetornaClient;
import com.retorna.sdk.core.RetornaClientOptions;
import com.retorna.sdk.quotation.CreateQuoteInput;
import com.retorna.sdk.quotation.QuoteResponse;
import com.retorna.sdk.quotation.AmountType;
import com.retorna.sdk.order.CreateOrderInput;
import com.retorna.sdk.order.OrderResponse;
import com.retorna.sdk.order.PaymentInstructions;
import com.retorna.sdk.order.PaymentPurpose;

public class CompletePaymentFlow {
public static void main(String[] args) {
RetornaClient client = RetornaClient.create(
RetornaClientOptions.builder()
.environment(Environment.DEVELOP)
.loggingLevel(LoggingLevel.INFO)
.clientId(System.getenv("RETORNA_CLIENT_ID"))
.clientSecret(System.getenv("RETORNA_CLIENT_SECRET"))
.privateKey(System.getenv("RETORNA_PRIVATE_KEY"))
.build()
);

try {
// 1. Crear cotización
CreateQuoteInput quoteInput = new CreateQuoteInput(
"USD", "CO", "COP", 100.0, "BANK_TRANSFER", AmountType.SOURCE
);
QuoteResponse quote = client.quotation.createQuote(quoteInput);
System.out.println("Cotización: " + quote.getId());
System.out.println("Monto destino: " + quote.getTargetAmount() + " COP");

// 2. Crear orden
PaymentInstructions instructions = new PaymentInstructions(
"Banco de Bogotá",
"1234567890",
"CHECKING",
"+573001234567",
"001"
);

CreateOrderInput orderInput = new CreateOrderInput(
quote.getId().intValue(),
"ORD-" + System.currentTimeMillis(),
"BANK_TRANSFER",
"Juan", "Pérez", "juan@example.com", "+573001234567",
"1234567890", "CC", "US", "US",
"María", "García", "maria@example.com", "+573009876543",
"9876543210", "CC",
instructions,
PaymentPurpose.FAMILY_SUPPORT
);

OrderResponse order = client.order.createPayoutOrder(orderInput);
System.out.println("Orden creada: " + order.getId());
System.out.println("Estado: " + order.getStatus());

// 3. Consultar orden
OrderResponse status = client.order.getOrderById(order.getId().toString());
System.out.println("Estado actual: " + status.getStatus());

} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
e.printStackTrace();
}
}
}

Ejemplo: Listar Rutas por País

import com.retorna.sdk.account.PayoutRoute;
import java.util.List;
import java.util.Map;
import java.util.HashMap;

public class ListRoutesExample {
public static void listRoutesByCountry(RetornaClient client, String country) {
try {
Map<String, Object> params = new HashMap<>();
params.put("country", country);

List<PayoutRoute> routes = client.account.getRoutes(params);

System.out.println("Rutas disponibles para " + country + ":");
for (PayoutRoute route : routes) {
System.out.println("- " + route.getName() +
" (" + route.getStatus() + ")");
}
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
}

Ejemplo: Monitorear Estado de Orden

import java.util.concurrent.TimeUnit;

public class MonitorOrderExample {
public static void monitorOrder(RetornaClient client, String orderId) {
try {
int maxAttempts = 10;
int attempt = 0;

while (attempt < maxAttempts) {
OrderResponse order = client.order.getOrderById(orderId);
String status = order.getStatus();

System.out.println("Intento " + (attempt + 1) + ": Estado = " + status);

if ("COMPLETED".equals(status)) {
System.out.println("✅ Orden completada exitosamente");
break;
} else if ("FAILED".equals(status) || "CANCELLED".equals(status)) {
System.out.println("❌ Orden " + status.toLowerCase());
break;
}

attempt++;
if (attempt < maxAttempts) {
TimeUnit.SECONDS.sleep(5); // Esperar 5 segundos
}
}
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
}

Ejemplo: Manejo de Errores Robusto

import com.retorna.sdk.errors.RetornaErrorReport;
import com.retorna.sdk.errors.RetornaErrorCategory;

public class ErrorHandlingExample {
public static void safeOperation(RetornaClient client) {
try {
BalanceResponse balance = client.account.getBalance();
System.out.println("Balance: " + balance.getTotalBalance());
} catch (RuntimeException e) {
// Error de API
System.err.println("Error de API: " + e.getMessage());

// Aquí podrías parsear el error si el SDK lo proporciona
// RetornaErrorReport errorReport = parseError(e);
// if (errorReport.getCategory() == RetornaErrorCategory.AUTHENTICATION) {
// // Manejar error de autenticación
// }
} catch (IllegalArgumentException e) {
// Error de validación
System.err.println("Error de validación: " + e.getMessage());
} catch (Exception e) {
// Error general
System.err.println("Error inesperado: " + e.getMessage());
e.printStackTrace();
}
}
}

Ejemplo: Spring Boot Service

import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import com.retorna.sdk.core.RetornaClient;
import com.retorna.sdk.account.BalanceResponse;

@Service
public class RetornaService {

@Autowired
private RetornaClient retornaClient;

public BalanceResponse getBalance() {
try {
return retornaClient.account.getBalance();
} catch (Exception e) {
throw new RuntimeException("Error al obtener balance", e);
}
}

public OrderResponse createOrder(CreateOrderInput input) {
try {
return retornaClient.order.createPayoutOrder(input);
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("Datos de orden inválidos", e);
} catch (Exception e) {
throw new RuntimeException("Error al crear orden", e);
}
}
}

Ejemplo: Múltiples Cotizaciones

public class MultipleQuotesExample {
public static void compareQuotes(RetornaClient client) {
try {
// Cotización 1: 100 USD a COP
CreateQuoteInput quote1Input = new CreateQuoteInput(
"USD", "CO", "COP", 100.0, "BANK_TRANSFER", AmountType.SOURCE
);
QuoteResponse quote1 = client.quotation.createQuote(quote1Input);

// Cotización 2: 200 USD a COP
CreateQuoteInput quote2Input = new CreateQuoteInput(
"USD", "CO", "COP", 200.0, "BANK_TRANSFER", AmountType.SOURCE
);
QuoteResponse quote2 = client.quotation.createQuote(quote2Input);

System.out.println("Cotización 1 (100 USD): " + quote1.getTargetAmount() + " COP");
System.out.println("Cotización 2 (200 USD): " + quote2.getTargetAmount() + " COP");
System.out.println("Tasa 1: " + quote1.getExchangeRate());
System.out.println("Tasa 2: " + quote2.getExchangeRate());

} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
}

Siguiente Paso

Envía dinero
Desde Latinoamérica
ChileColombiaPerú
Desde Europa
EspañaItaliaFranciaAlemaniaPortugalPaíses Bajos
Recursos
Blog
Encuéntranos en redes
Para denuncias, por favor contactar al correo electrónico denuncias@retorna.app
Pertenecemos a la Unidad de Análisis Financiero (UAF).
Supervisados por
Registration number is C100000211.
Miembros de
Con el apoyo deCon el apoyo de
Copyright © Retorna Holding Spa 2024