if (resultado.categoria === "pendiente") { const esPresencial = [41, 77].includes(resultado.ultimo.int_id_forma_pago); await db.pagos.update(pagoId, { estado_local: "pendiente", int_estado_pago_zp: resultado.estado, int_id_forma_pago: resultado.ultimo.int_id_forma_pago, es_presencial: esPresencial }); // La sonda se encargará de consultar de nuevo // Mostrar mensaje al usuario (ver certificación PSE)}
if (resultado.categoria === "rechazado") { await db.pagos.update(pagoId, { estado_local: "rechazado", int_estado_pago_zp: resultado.estado, dt_cierre: new Date() }); // Permitir al usuario intentar de nuevo con un nuevo str_id_pago}
Cuando el usuario paga con pagos mixtos, int_cantidad_pagos > 1 y cada elemento de intentos es un pago parcial.
// Para un pago mixto aprobadoif (resultado.intentos.every(i => Number(i.int_estado_pago) === 1)) { // Todos los sub-pagos aprobados — pago global aprobado const totalPagado = resultado.intentos.reduce( (sum, i) => sum + Number(i.dbl_valor_pagado), 0 ); // totalPagado debe equivaler a flt_total_con_iva del pedido}
Timeout razonable (15s). Un VerificacionPago que tarda 30s bloquea tu callback.
Log completo del response (oculta la clave del request). Útil para auditoría PSE.
Nunca confíes solo en el callback — siempre verifica.
Persiste el CUS (str_codigo_transaccion) para reclamos ante el banco.
Maneja int_cantidad_pagos: 0 — puede significar que el usuario no inició el pago (el request a InicioPago fue exitoso pero el usuario nunca abrió la URL).