fix(seguridad): falla cerrado si anti-duplicado no puede verificar/registrar
Si pagos_confirmados no existe o falla la BD, NO confirmar el pago (fail-closed). Antes fallaba abierto: ignoraba el error y confirmaba igual, permitiendo recargar con el mismo comprobante múltiples veces. Agrega motivo error_sistema en Telegram para casos de error interno. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
8da7a9fdb4
commit
5ea4f3c9e5
@@ -81,8 +81,9 @@ class PagoValidadorService
|
||||
return ['estado' => 'ya_usado', 'correo' => $datosCorreo, 'motivo' => 'correo_ya_aplicado'];
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
Log::warning('[PagoValidador] Error al verificar hash (tabla pagos_confirmados existe?): ' . $e->getMessage());
|
||||
// Continuar sin bloquear — el anti-duplicado no debe impedir confirmaciones
|
||||
// Falla cerrado: si no se puede verificar el anti-duplicado, no confirmar
|
||||
Log::error('[PagoValidador] ERROR tabla pagos_confirmados (ejecutar migrate): ' . $e->getMessage());
|
||||
return ['estado' => 'no_encontrado', 'correo' => null, 'motivo' => 'error_sistema'];
|
||||
}
|
||||
|
||||
// ── 3. Fecha (mismo día) — solo si ambos tienen fecha ──
|
||||
@@ -124,7 +125,9 @@ class PagoValidadorService
|
||||
'referencia' => $datosPago['referencia'] ?? null,
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
Log::warning('[PagoValidador] No se pudo marcar hash (tabla pagos_confirmados existe?): ' . $e->getMessage());
|
||||
// Falla cerrado: si no se puede registrar el hash, no confirmar
|
||||
Log::error('[PagoValidador] ERROR al marcar hash (ejecutar migrate): ' . $e->getMessage());
|
||||
return ['estado' => 'no_encontrado', 'correo' => null, 'motivo' => 'error_sistema'];
|
||||
}
|
||||
|
||||
return [
|
||||
|
||||
@@ -239,6 +239,7 @@ class TelegramBotService
|
||||
'error_imap' => '📧 Error al leer correos IMAP',
|
||||
'sin_correos' => '📧 Sin correos recientes en bandeja',
|
||||
'sin_coincidencia' => '📧 Ningún correo coincide con este monto/fecha',
|
||||
'error_sistema' => '⚙️ Error interno — un asesor revisará manualmente',
|
||||
default => '📧 No se pudo verificar',
|
||||
};
|
||||
$texto .= "\nEstado: *⚠️ No confirmado*\n_{$motivo}_\n\nUn asesor revisará tu pago.";
|
||||
|
||||
Reference in New Issue
Block a user