Ejemplos de código
Snippets en JavaScript para los casos de uso más comunes. Copiá, pegá y adaptá a tu stack.
#
Crear un cobro
crear-cobro.js
// POST /integration/payment-request
// Base URL: https://integration-api.chytapay.com.ar
const response = await fetch(baseUrl + '/integration/payment-request', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + idToken,
'Content-Type': 'application/json',
},
body: JSON.stringify({
referenceId: 'factura-2026-03-001',
description: 'Cuota marzo 2026',
amount: 25000,
dueDates: ['2026-03-10', '2026-03-20'],
customer: {
name: 'Juan García',
email: '[email protected]',
phoneNumber: { countryCode: '+54', number: '1112345678' },
},
sendEmailNotification: true,
sendWhatsappNotification: true,
}),
});
const data = await response.json();
// data.CVU → CVU único para este cobro
// data.calculatedAmounts → montos por vencimiento#
Recibir el webhook
webhook.js
// Tu endpoint recibe POST cuando el cliente paga
// Validar el token antes de procesar
app.post('/webhook/chytapay', (req, res) => {
const validationToken = req.headers['validation-token'];
if (validationToken !== ({}).CHYTAPAY_TOKEN) {
return res.status(401).json({ error: 'Unauthorized' });
}
const {
referenceId, // tu ID interno
requestedAmount, // monto original
paidAmount, // monto pagado
remainingAmount, // saldo pendiente
stateType, // 'total_payment' | 'partial_payment'
activeDueDate, // fecha de vencimiento activa
activeDueDateIndex,
totalDueDates,
} = req.body;
// Actualizar estado en tu base de datos
await updatePaymentStatus(referenceId, {
paid: paidAmount,
remaining: remainingAmount,
status: stateType,
});
res.status(200).json({ received: true });
});#
Consultar cobros
consultar.js
// GET por referenceId
const response = await fetch(
baseUrl + '/integration/payment-request/' + referenceId,
{
headers: {
'Authorization': 'Bearer ' + idToken,
},
}
);
const data = await response.json();
// data.stateType, data.paidAmount, data.customer...
// GET listado con filtros
const list = await fetch(
baseUrl + '/integration/payment-request' +
'?startDate=2026-03-01&endDate=2026-03-31',
{ headers: { 'Authorization': 'Bearer ' + idToken } }
);#
Flujo OAuth2
oauth2.js
// Paso 1: Redirigir al usuario a Chytapay
// Test: https://auth-api.test.chytapay.com.ar
// Prod: https://auth-api.chytapay.com.ar
const authUrl = 'https://auth-api.chytapay.com.ar/integration/oauth2/authorize?' +
'response_type=code' +
'&clientId=' + CLIENT_ID +
'&redirectUri=' + encodeURIComponent(REDIRECT_URI) +
'&scope=openid profile' +
'&state=' + generateRandomState();
window.location.href = authUrl;
// Paso 2: Recibir el código en tu callback
// GET /tu-app/callback?code=xxx&state=yyy
const { code, state } = getQueryParams();
validateState(state); // prevenir CSRF
// Paso 3: Intercambiar código por tokens
const tokenResponse = await fetch(
'https://auth-api.chytapay.com.ar/integration/oauth2/token',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
code,
clientId: CLIENT_ID,
clientSecret: CLIENT_SECRET,
redirectUri: REDIRECT_URI,
}),
}
);
const { idToken, refreshToken, expiresIn } = await tokenResponse.json();