Skip to content

Instantly share code, notes, and snippets.

@Giovasdf
Created April 9, 2025 21:43
Show Gist options
  • Select an option

  • Save Giovasdf/5049f19e2dc0fd95760c49ad95b12f82 to your computer and use it in GitHub Desktop.

Select an option

Save Giovasdf/5049f19e2dc0fd95760c49ad95b12f82 to your computer and use it in GitHub Desktop.
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const { Options, Environment, WebpayPlus } = require('transbank-sdk');
const app = express();
const PORT = 3001;
app.use(cors());
app.use(bodyParser.json());
// Configuración de Transbank (usando credenciales de integración)
const tx = new WebpayPlus.Transaction(
new Options(
'597055555532', // Código de comercio (usar el real en producción)
'579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C', // API Key (usar el real en producción)
Environment.Integration // Ambiente de integración
)
);
// Endpoint para crear transacción
app.post('/api/create-transaction', async (req, res) => {
try {
const { amount, sessionId, buyOrder, returnUrl } = req.body;
if (!amount || !sessionId || !buyOrder || !returnUrl) {
return res.status(400).json({ error: 'Faltan datos requeridos' });
}
console.log('🔁 Creando transacción con:', { amount, sessionId, buyOrder, returnUrl });
const response = await tx.create(
buyOrder,
sessionId,
amount,
returnUrl
);
console.log('✅ Transacción creada:', response);
res.json(response);
} catch (error) {
console.error('❌ Error creando transacción:', error);
res.status(500).json({ error: error.message || 'Error al crear la transacción' });
}
});
// Endpoint para confirmar transacción
app.post('/api/commit-transaction', async (req, res) => {
try {
const { token } = req.body;
if (!token) {
return res.status(400).json({ error: 'Token es requerido' });
}
console.log('🔁 Confirmando transacción con token:', token);
const response = await tx.commit(token);
console.log('✅ Transacción confirmada:', response);
res.json(response);
} catch (error) {
console.error('❌ Error confirmando transacción:', error);
res.status(500).json({ error: error.message || 'Error al confirmar transacción' });
}
});
// Endpoint para obtener estado de transacción
app.post('/api/transaction-status', async (req, res) => {
try {
const { token } = req.body;
if (!token) {
return res.status(400).json({ error: 'Token es requerido' });
}
const response = await tx.status(token);
res.json(response);
} catch (error) {
console.error('❌ Error obteniendo estado:', error);
res.status(500).json({ error: error.message || 'Error al obtener estado' });
}
});
// Endpoint de ejemplo para página de éxito
app.get('/api/success', (req, res) => {
res.json({ message: 'Pago exitoso' });
});
// Endpoint de ejemplo para página de fracaso
app.get('/api/failure', (req, res) => {
res.json({ message: 'Pago fallido' });
});
app.listen(PORT, () => {
console.log(`🚀 Servidor corriendo en http://localhost:${PORT}`);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment