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
+19 -10
View File
@@ -75,9 +75,14 @@ class PagoValidadorService
// ── 2. Hash único (anti-doble-uso) ─────────────────────
$emailHash = sha1($body . $date);
if (PagoConfirmado::yaUsado($emailHash)) {
Log::info("[PagoValidador] Correo #{$i}: ya usado (hash={$emailHash})");
return ['estado' => 'ya_usado', 'correo' => $datosCorreo, 'motivo' => 'correo_ya_aplicado'];
try {
if (PagoConfirmado::yaUsado($emailHash)) {
Log::info("[PagoValidador] Correo #{$i}: ya usado (hash={$emailHash})");
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 ──
@@ -110,13 +115,17 @@ class PagoValidadorService
Log::info("[PagoValidador] Correo #{$i}: CONFIRMADO (remitente_coincide=" . ($coincideRemitente ? 'SI' : 'NO') . ")");
PagoConfirmado::marcar($emailHash, [
'usuario_id' => $usuarioId,
'valor' => $valorIA,
'canal' => $canal,
'banco' => $datosCorreo['banco'] ?? null,
'referencia' => $datosPago['referencia'] ?? null,
]);
try {
PagoConfirmado::marcar($emailHash, [
'usuario_id' => $usuarioId,
'valor' => $valorIA,
'canal' => $canal,
'banco' => $datosCorreo['banco'] ?? null,
'referencia' => $datosPago['referencia'] ?? null,
]);
} catch (\Throwable $e) {
Log::warning('[PagoValidador] No se pudo marcar hash (tabla pagos_confirmados existe?): ' . $e->getMessage());
}
return [
'estado' => 'confirmado',