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'];
|
return ['estado' => 'ya_usado', 'correo' => $datosCorreo, 'motivo' => 'correo_ya_aplicado'];
|
||||||
}
|
}
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
Log::warning('[PagoValidador] Error al verificar hash (tabla pagos_confirmados existe?): ' . $e->getMessage());
|
// Falla cerrado: si no se puede verificar el anti-duplicado, no confirmar
|
||||||
// Continuar sin bloquear — el anti-duplicado no debe impedir confirmaciones
|
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 ──
|
// ── 3. Fecha (mismo día) — solo si ambos tienen fecha ──
|
||||||
@@ -124,7 +125,9 @@ class PagoValidadorService
|
|||||||
'referencia' => $datosPago['referencia'] ?? null,
|
'referencia' => $datosPago['referencia'] ?? null,
|
||||||
]);
|
]);
|
||||||
} catch (\Throwable $e) {
|
} 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 [
|
return [
|
||||||
|
|||||||
@@ -239,6 +239,7 @@ class TelegramBotService
|
|||||||
'error_imap' => '📧 Error al leer correos IMAP',
|
'error_imap' => '📧 Error al leer correos IMAP',
|
||||||
'sin_correos' => '📧 Sin correos recientes en bandeja',
|
'sin_correos' => '📧 Sin correos recientes en bandeja',
|
||||||
'sin_coincidencia' => '📧 Ningún correo coincide con este monto/fecha',
|
'sin_coincidencia' => '📧 Ningún correo coincide con este monto/fecha',
|
||||||
|
'error_sistema' => '⚙️ Error interno — un asesor revisará manualmente',
|
||||||
default => '📧 No se pudo verificar',
|
default => '📧 No se pudo verificar',
|
||||||
};
|
};
|
||||||
$texto .= "\nEstado: *⚠️ No confirmado*\n_{$motivo}_\n\nUn asesor revisará tu pago.";
|
$texto .= "\nEstado: *⚠️ No confirmado*\n_{$motivo}_\n\nUn asesor revisará tu pago.";
|
||||||
|
|||||||
Reference in New Issue
Block a user