fix(pago): try/catch en PagoConfirmado.yaUsado/marcar por tabla faltante

Si pagos_confirmados no existe en producción (migración pendiente), la excepción
escapaba hasta handlePhoto y mostraba "Error analizando el comprobante".
Safety catch permite que la confirmación proceda aunque la tabla no esté.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro
2026-07-18 17:17:17 +00:00
co-authored by Claude Sonnet 4.6
parent 507281e56e
commit 8da7a9fdb4
+9
View File
@@ -75,10 +75,15 @@ class PagoValidadorService
// ── 2. Hash único (anti-doble-uso) ───────────────────── // ── 2. Hash único (anti-doble-uso) ─────────────────────
$emailHash = sha1($body . $date); $emailHash = sha1($body . $date);
try {
if (PagoConfirmado::yaUsado($emailHash)) { if (PagoConfirmado::yaUsado($emailHash)) {
Log::info("[PagoValidador] Correo #{$i}: ya usado (hash={$emailHash})"); Log::info("[PagoValidador] Correo #{$i}: ya usado (hash={$emailHash})");
return ['estado' => 'ya_usado', 'correo' => $datosCorreo, 'motivo' => 'correo_ya_aplicado']; 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
}
// ── 3. Fecha (mismo día) — solo si ambos tienen fecha ── // ── 3. Fecha (mismo día) — solo si ambos tienen fecha ──
if ($fechaIA && ($datosCorreo['fecha'] ?? '')) { if ($fechaIA && ($datosCorreo['fecha'] ?? '')) {
@@ -110,6 +115,7 @@ class PagoValidadorService
Log::info("[PagoValidador] Correo #{$i}: CONFIRMADO (remitente_coincide=" . ($coincideRemitente ? 'SI' : 'NO') . ")"); Log::info("[PagoValidador] Correo #{$i}: CONFIRMADO (remitente_coincide=" . ($coincideRemitente ? 'SI' : 'NO') . ")");
try {
PagoConfirmado::marcar($emailHash, [ PagoConfirmado::marcar($emailHash, [
'usuario_id' => $usuarioId, 'usuario_id' => $usuarioId,
'valor' => $valorIA, 'valor' => $valorIA,
@@ -117,6 +123,9 @@ class PagoValidadorService
'banco' => $datosCorreo['banco'] ?? null, 'banco' => $datosCorreo['banco'] ?? null,
'referencia' => $datosPago['referencia'] ?? null, 'referencia' => $datosPago['referencia'] ?? null,
]); ]);
} catch (\Throwable $e) {
Log::warning('[PagoValidador] No se pudo marcar hash (tabla pagos_confirmados existe?): ' . $e->getMessage());
}
return [ return [
'estado' => 'confirmado', 'estado' => 'confirmado',