fix: ya_usado no bloquea a otros usuarios con el mismo monto
Con return inmediato, si Usuario A usaba email_A ($20k), Usuario B (también $20k) encontraba ese email ya_usado y se bloqueaba sin revisar el email_B que le pertenecía. Ahora: ya_usado → continue (sigue iterando); solo retorna ya_usado al final del loop si todos los emails coincidentes estaban agotados (caso real de comprobante reutilizado). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
e42dd40d74
commit
65d4155f02
@@ -38,6 +38,8 @@ class PagoValidadorService
|
||||
|
||||
Log::info('[PagoValidador] Buscando: valor=' . $valorIA . ' fecha=' . $fechaIA . ' hora=' . $horaIA . ' llave=' . $llaveIA);
|
||||
|
||||
$hayYaUsado = false; // email que coincide en todo pero ya fue usado
|
||||
|
||||
foreach ($correos as $i => $correo) {
|
||||
$fuera = $correo['fuera_de_ventana'] ?? false;
|
||||
$from = $correo['from'] ?? '';
|
||||
@@ -103,8 +105,9 @@ class PagoValidadorService
|
||||
|
||||
try {
|
||||
if (PagoConfirmado::yaUsado($emailHash)) {
|
||||
Log::info("[PagoValidador] Correo #{$i}: ya usado (hash={$emailHash})");
|
||||
return ['estado' => 'ya_usado', 'correo' => $datosCorreo, 'motivo' => 'correo_ya_aplicado'];
|
||||
Log::info("[PagoValidador] Correo #{$i}: ya usado (hash={$emailHash}), buscando siguiente");
|
||||
$hayYaUsado = true;
|
||||
continue; // seguir buscando: otro usuario puede tener un email fresco del mismo monto
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
// Falla cerrado: si no se puede verificar el anti-duplicado, no confirmar
|
||||
@@ -138,6 +141,11 @@ class PagoValidadorService
|
||||
];
|
||||
}
|
||||
|
||||
if ($hayYaUsado) {
|
||||
Log::info('[PagoValidador] Todos los emails coincidentes ya fueron usados');
|
||||
return ['estado' => 'ya_usado', 'correo' => null, 'motivo' => 'correo_ya_aplicado'];
|
||||
}
|
||||
|
||||
Log::info('[PagoValidador] Ningún correo coincidió con los criterios');
|
||||
return ['estado' => 'no_encontrado', 'correo' => null, 'motivo' => 'sin_coincidencia', 'emails_revisados' => count($correos)];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user