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);
|
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) {
|
foreach ($correos as $i => $correo) {
|
||||||
$fuera = $correo['fuera_de_ventana'] ?? false;
|
$fuera = $correo['fuera_de_ventana'] ?? false;
|
||||||
$from = $correo['from'] ?? '';
|
$from = $correo['from'] ?? '';
|
||||||
@@ -103,8 +105,9 @@ class PagoValidadorService
|
|||||||
|
|
||||||
try {
|
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}), buscando siguiente");
|
||||||
return ['estado' => 'ya_usado', 'correo' => $datosCorreo, 'motivo' => 'correo_ya_aplicado'];
|
$hayYaUsado = true;
|
||||||
|
continue; // seguir buscando: otro usuario puede tener un email fresco del mismo monto
|
||||||
}
|
}
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
// Falla cerrado: si no se puede verificar el anti-duplicado, no confirmar
|
// 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');
|
Log::info('[PagoValidador] Ningún correo coincidió con los criterios');
|
||||||
return ['estado' => 'no_encontrado', 'correo' => null, 'motivo' => 'sin_coincidencia', 'emails_revisados' => count($correos)];
|
return ['estado' => 'no_encontrado', 'correo' => null, 'motivo' => 'sin_coincidencia', 'emails_revisados' => count($correos)];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user