ewestpay-node
v1.0.0
Published
SDK oficial de ewestpay para Node.js — procesa cobros desde tu servidor.
Maintainers
Readme
ewestpay-node
SDK oficial de ewestpay para Node.js. Procesa cobros desde tu servidor usando tokens generados por el SDK de frontend.
Instalación
npm install ewestpay-nodeUso
const Ewestpay = require('ewestpay-node');
// Inicializar con tu clave secreta (sk_live_ o sk_test_)
// NUNCA pongas la sk_ en el frontend ni en el repositorio.
const ew = new Ewestpay(process.env.EWESTPAY_SECRET_KEY);
// En tu endpoint de checkout (ej: POST /api/pagar)
app.post('/api/pagar', async (req, res) => {
const { token } = req.body; // tok_xxx que envió tu frontend
try {
const charge = await ew.charges.create({
token, // REQUERIDO: tok_xxx del SDK frontend
amount: 10000, // REQUERIDO: entero (CLP sin decimales, USD en cents)
currency: 'CLP', // REQUERIDO: código ISO 4217
description: 'Plan Premium Jun 2026', // REQUERIDO: visible al pagador
reference: 'ORD-2026-00123', // REQUERIDO: tu ID de orden (para reversas)
customerEmail: req.user.email, // REQUERIDO: email del pagador (para reversas)
customerName: req.user.name, // Recomendado: nombre del pagador
ip: req.ip, // Recomendado: IP del pagador
metadata: { // Opcional: datos extra para tu registro
plan: 'premium',
userId: req.user.id,
},
});
// charge.status === 'APPROVED'
res.json({ success: true, chargeId: charge.id });
} catch (err) {
if (err.name === 'EwestpayValidationError') {
return res.status(400).json({ error: err.message, fields: err.fields });
}
if (err.name === 'EwestpayAuthError') {
return res.status(401).json({ error: 'Credenciales inválidas.' });
}
if (err.name === 'EwestpayTokenError') {
return res.status(400).json({ error: err.message }); // token usado, modo incorrecto, etc.
}
res.status(500).json({ error: 'Error al procesar el pago.' });
}
});Campos del cobro
| Campo | Tipo | Req. | Descripción |
|----------------|----------|------|-------------|
| token | string | ✅ | tok_xxx generado por el SDK frontend |
| amount | integer | ✅ | Monto en unidad mínima (CLP: pesos enteros, USD: centavos) |
| currency | string | ✅ | Código ISO 4217: CLP, USD, etc. |
| description | string | ✅ | Descripción del cobro (ej: "Suscripción mensual") |
| reference | string | ✅ | Tu ID de orden — crítico para reversas |
| customerEmail | string | ✅ | Email del pagador — crítico para reversas |
| customerName | string | ⚡ | Nombre del pagador (muy recomendado para disputas) |
| customerId | string | ❌ | ID del usuario en tu sistema |
| ip | string | ⚡ | IP del pagador (para defensa en disputas) |
| metadata | object | ❌ | Datos adicionales libres en JSON |
⚡ = Opcional pero muy recomendado para ganar disputas y reversas de cargo.
Respuesta exitosa
{
"id": "uuid-de-la-transaccion",
"object": "charge",
"livemode": true,
"status": "APPROVED",
"amount": 10000,
"currency": "CLP",
"description": "Plan Premium Jun 2026",
"reference": "ORD-2026-00123",
"customerEmail": "[email protected]",
"last4": "4242",
"brand": "visa",
"acquirerTxId": "...",
"created": 1748576400
}Errores
| Clase | Cuándo ocurre |
|--------------------------|---------------|
| EwestpayValidationError | Campos faltantes o inválidos |
| EwestpayAuthError | sk_ inválida o merchant inactivo |
| EwestpayTokenError | Token no existe, ya usado, o modo incorrecto |
| EwestpayNetworkError | Error de conexión o timeout |
Variables de entorno recomendadas
EWESTPAY_SECRET_KEY=sk_live_xxx # o sk_test_xxx para sandbox