feat: requiere nombre y apellido (mínimo 2 palabras) en flujo de recarga

- PublicChat: valida ≥2 palabras al ingresar nombre_remitente en chat web
- PagoValidadorService: remitenteCoincide exige ≥2 palabras que coincidan en el correo
- TelegramBotService: processRemitenteNombre exige ≥2 palabras igual que el chat web

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro
2026-07-19 23:13:55 +00:00
co-authored by Claude Sonnet 4.6
parent 10061d7c65
commit 23eb448433
3 changed files with 10 additions and 7 deletions
+3 -2
View File
@@ -416,8 +416,9 @@ class PublicChat extends Component
// Capturar nombre del titular bancario para validación de recarga
if ($this->flujo === 'pago.esperando_nombre') {
$nombre = trim($texto);
if (strlen($nombre) < 3) {
$this->guardarMensajeBot($this->convId, "Por favor escribe tu nombre completo (mínimo 3 caracteres).");
$palabras = array_filter(explode(' ', $nombre), fn($p) => strlen($p) >= 2);
if (count($palabras) < 2) {
$this->guardarMensajeBot($this->convId, "Escribe al menos nombre y apellido. Ejemplo: *Juan Garcia*");
$this->cargarMensajes();
$this->dispatchBrowserEvent('scroll-chat');
return;
+3 -2
View File
@@ -197,12 +197,13 @@ class PagoValidadorService
$re = $normalizar($remitenteEmail);
$nu = $normalizar($nombreUsuario);
$coincidencias = 0;
foreach (explode(' ', $nu) as $palabra) {
if (strlen($palabra) >= 3 && str_contains($re, $palabra)) {
return true;
$coincidencias++;
}
}
return false;
return $coincidencias >= 2;
}
private function fetchCorreos(): array
+4 -3
View File
@@ -1276,9 +1276,10 @@ class TelegramBotService
private function processRemitenteNombre(string $chatId, string $texto): void
{
$nombre = trim($texto);
if (strlen($nombre) < 3) {
$this->send($chatId, "Por favor escribe tu nombre completo (mínimo 3 caracteres).");
$nombre = trim($texto);
$palabras = array_filter(explode(' ', $nombre), fn ($p) => strlen($p) >= 2);
if (count($palabras) < 2) {
$this->send($chatId, "Escribe al menos nombre y apellido. Ejemplo: *Juan Garcia*");
return;
}