Jump to content

Usuarios duplicados


Recommended Posts

Versión: prestashop 1.7.4

Tema: personalizado

Problema: en algunos casos para un unico pedido se dan de alta dos clientes en el backoffice

 

Estamos teniendo problemas cuando los usuarios realizan pedidos en nuestra tienda, en algunos casos se está dando de alta dos veces el cliente, con diferencias de minutos o incluso segundos. Los usuarios no se duplican en todos los casos y tampoco es necesario que finalicen la compra para que se produzca esta incidencia.

Hemos intentado reproducir el error y no ha sido posible.

Adjunto imagen del listado de clientes, con usuarios duplicados.

error.thumb.jpg.d9db010e3e2a178ea7f800defc83227b.jpg

Gracias!

Raúl

 

Edited by raul.ledo (see edit history)
Link to comment
Share on other sites

34 minutes ago, raul.ledo said:

Versión: prestashop 1.7.4

Tema: personalizado

Problema: en algunos casos para un unico pedido se dan de alta dos clientes en el backoffice

 

Estamos teniendo problemas cuando los usuarios realizan pedidos en nuestra tienda, en algunos casos se está dando de alta dos veces el cliente, con diferencias de minutos o incluso segundos. Los usuarios no se duplican en todos los casos y tampoco es necesario que finalicen la compra para que se produzca esta incidencia.

Hemos intentado reproducir el error y no ha sido posible.

Adjunto imagen del listado de clientes, con usuarios duplicados.

 

Gracias!

Raúl

error.jpg

 

Utilizas algún módulo para el checkout?

 

Link to comment
Share on other sites

  • 2 months later...

Buenos días Raúl, yo también he tenido este problema con mi Prestashop (v1.7.3.0) y estoy investigando el problema. Me alegra saber que no soy el único. De momento se me ocurre que en el checkout puede que hayan hecho la compra como invitado pero que al poner sus datos se genere otro usuario idéntico. Lo curioso es que un usuario tiene hasta 4 cuentas en mi caso. No debería ser así por la integridad de la propia base de datos, pero de alguna manera el sistema lo está permitiendo. Cuando encuentre una solución te lo haré saber.

Iván.

Link to comment
Share on other sites

On 11/6/2018 at 5:29 PM, joseantgv said:

@raul.ledo @Iván Lozano podéis mirar en base de datos a que hora exactamente se han creado esos usuarios?

Lo acabo de mirar y, por ejemplo, este usuario se ha creado cuatro veces. Aunque haya diferencias de segundos entre varios registros, el usuario se ha creado en un solo momento. Lo curioso es que pasa sólo a veces.

image.png.08d2b56eac3132c627cdc7ac95bd490a.png

 

EDIT: Acabo de mirarlo más en detalle y la mayoría de usuarios duplicados están como invitados. En varios casos aparece dos veces el mismo usuario con el mismo correo electrónico y, además, como cliente ambas veces. Por lo general los repetidos son varias cuentas de invitado y una cuenta de cliente donde acaba figurando la compra que hagan. Que el correo pueda estar duplicado me parece un fallo de integridad grave, así que espero que el problema sea de alguna configuración mía.

Edited by Iván Lozano (see edit history)
Link to comment
Share on other sites

  • 7 months later...

Hola,

se que este hilo es de hace tiempo, pero me está pasando algo muy parecido y no sé por dónde empezar.

En mi caso los dos registros se crean en el mismo momento y son exactamente iguales. Pero ya nos ha ocurrido varias veces que uno de usuarios tiene el carrito y otro tiene la información de la dirección. Al final, el cliente paga, pero el pedido no se genera. No somos conscientes de que ese pago se ha efectuado hasta que el cliente no llama.

En cualquier caso, esto es algo excepcional. Yo no veo muchos clientes duplicados, pero ya nos ha pasado varias veces y me temo que sea un inconsistencia de la base de datos.

¿Alguien pudo solucionar este tema? ¿Habéis encontrado la razón por la que esto sucede?

Gracias.

Link to comment
Share on other sites

  • 6 months later...
On 1/23/2019 at 9:20 AM, Esther said:

Hola,

se que este hilo es de hace tiempo, pero me está pasando algo muy parecido y no sé por dónde empezar.

En mi caso los dos registros se crean en el mismo momento y son exactamente iguales. Pero ya nos ha ocurrido varias veces que uno de usuarios tiene el carrito y otro tiene la información de la dirección. Al final, el cliente paga, pero el pedido no se genera. No somos conscientes de que ese pago se ha efectuado hasta que el cliente no llama.

En cualquier caso, esto es algo excepcional. Yo no veo muchos clientes duplicados, pero ya nos ha pasado varias veces y me temo que sea un inconsistencia de la base de datos.

¿Alguien pudo solucionar este tema? ¿Habéis encontrado la razón por la que esto sucede?

Gracias.

Tengo el mismo problema em 1.7.6.0!!!!!

Alguna solucion?

No tengo guest checkout

 

Link to comment
Share on other sites

  • 1 month later...

Hola a tod@s, 

También me ocurre lo mismo, en mi caso con la versión 1.7.5.2, no dispongo de módulo de checkout externo y tampoco tengo activada la opción pedidos de invitados, el cliente se da de alta una vez y sin embargo en el backend aparece dos, (id´s correlativos y misma fecha y hora en el  registro de creación del cliente) uno con dirección y el otro sin dirección, ambos en el mismo grupo de "clientes" y no "invitados". Luego realiza el pedido y el pago, y no aparece el pedido en el backend, nos enteramos del pedido por que el pago es por paypal y llega email de notificación de paypal. 

Para más información, he comprobado que hay un carrito de este cliente dias anteriores con el producto que compró según paypal. Ese carrito aparece en la ficha del cliente que se creo primero de los dos, en el otro cliente, en su ficha no hay carritos. 

También en cada cliente repetido (que son dos), en ambos, en la ficha del cliente, hay dos envíos de bienvenidos en la sección de "últimos emails".

En el cliente que se creó en primer lugar por fecha de creación, tiene en su ficha "productos más vistos" el producto que se realizó el pedido (que no aparece en el backoffice) y que llegó la notificación de paypal por email . 

Otro dato que se me olvidaba comentar, el pedido se realizó a través de móvil, y lo se porque en la notificación de pago de paypal, pone que el tipo de pago es mediante móvil.

Al no ver solución al problema de momento, lo que he hecho es enviar un email al cliente en concreto, para ver si puede de alguna manera, describir los pasos realizados a la hora de darse de alta y de realizar el pedido y pago. También preguntarle si ha visto algo extraño en cualquiera de los procesos mencionados anteriormente. 

Nada más reciba respuesta por parte del cliente, lo anotaré en este post para ver si sirve de ayuda y podamos resolver este enigma.

Un saludo a tod@s ;)

 

Edited by 2byte (see edit history)
Link to comment
Share on other sites

A mí me ha pasado hace tiempo algo parecido. Era por culpa del módulo oficial de MailChimp. ¿Lo tenéis activado? Sí es así, probad a desactivarlo.

En mi caso no solo duplicaba usuarios, sino que también cruzaba las direcciones de unos con otros, como he visto que se mencionaba en algunos mensajes (eso es lo que me ha puesto sobre aviso de que podría tratarse del mismo caso).

Edited by Prestafan33 (see edit history)
Link to comment
Share on other sites

  • 2 weeks later...

Siento mucho decir lo que voy a decir, pero es mi realidad, y ya no soporto la sinvergonzonería de Prestashop, que lanza software inconcluso  y con problemas tan obvios, que es de ignorantes pensar que es un descuido o error.  Desde el 1.6 en adelante, la barbaridad de errores que traen, es imposible que no lo sepan, ylos problemas que esto genera a los clientes es obvio que les da igual..

No veo otra solución que pasarme a Magento,  Llevo montando tiendas desde la versión 1.2 y desde Prestashop 1.6 en adelante esto es  un timo. Llevan años sin solucionar nada, este software está abandonado. Vive de las rentas de la versión 1.4 que funcionaba de verdad. Es más,  llevo unas 8 tiendas de Prestashop (ahora solo 6, 2 ya estan en Magento) y la única que sigue con el 1.4 es la que mejor funciona y la más rentable. 

Hoy por hoy ni los desarrolladores de Prestashop saben solucionar los problemas.

Para cuando terminen su migración al nuevo framework, muchos usuarios, como yo,  habrán perdido la paciencia o habrán abandonado su proyecto de tienda. Sinceramente no merece la pena trabajar tantas horas solo para reparar los fallos de Prestashop. En mi opinión, a la gente de Prestashop se la "suda" el cliente y lleva más de 2 años demostrándolo.

Con Magento community, no tienes más que centrarte en la forma de vender, no hay un bug cada dia, por supuesto algún bug tiene, pero no a diario. Migrar la tienda de Prestashop a Magento es 1 dia de trabajo y a partir de ahí es incomparable, Prestashop, es ahora mismo el más caro, con diferencia,  de todas las tiendas online porque no te deja tiempo para trabajar en vender , todo son errores.
Os animo a pasar vuestras tiendas a Magento y a lo mejor esta gente se da cuenta del daño que está haciendo, mientras sigamos intentando arreglar su "cacicada" seguirán contentos.

Link to comment
Share on other sites

Por desgracia, Chicho,no te falta razón.

Yo tampoco comulgo con la actual política de los responsables del proyecto, más preocupado por migrar las herramientas a un nuevo framework más moderno, que atraiga a los desarrolladores para que creen funcionalidades nuevas (de pago), antes que solucionar los cientos de Bugs identificados, cuya lista crece días tras día, y que causan en demasiadas ocasiones graves perjuicios a los propietarios de las tiendas.

En mi opinión, es una estrategia claramente equivocada. Lo que busca el usuario de un software como este es estabilidad y seguridad, y le da igual si emplea una tecnología más antigua o más moderna, porque al final los fallos se traducen en pèrdida de ventas, de reputación y de dinero, cuando tienes que emplearlo en buscar a alguien que te solucione los errores que los responsables del software no arreglan. Y los desarrolladores al final se mueven por la bolsa de usuarios, si PrestaShop pierde usuarios porque se van a otras plataformas, nadie querrá desarrollar para ellos, por muy modernas que sean las herramientas que pongan a su disposición.

Yo llevo sólo un par de años trabajando con esta plataforma, y cuanto más me meto en las "tripas" del código, más miedo me da lo que me encuentro, porque veo muchos errores, cosas cogidas con alfileres y otras claramente mejorables, y no veo a nadie preocupado en dar un puñetazo encima de la mesa y decir "vamos a parar, vamos a arreglar todo lo que falla, a corregir lo que está mal y a estabilizar el software antes de seguir desarrollando cosas nuevas o de incorporar nuevas tecnologías".

¿Cuánto tiempo hace que se empezó con la versión 1.7? ¿3 años? ¿Cómo es posible que aún sigan fallando en determinadas circunstancias cosas básicas, como los cupones de descuento o el cálculo de los gastos de envío? ¿Por qué aún no existe una forma fiable de migrar una instalación de una versión 1.6 a una 1.7, y el módulo que han creado para ello es  una lotería (donde además tienes el 90% de posibilidades de que no funcione bien)?

No sé, es posible que los equivocados seamos nosotros, pero yo también le veo poco futuro al proyecto de seguir así las cosas.

Edited by Prestafan33 (see edit history)
Link to comment
Share on other sites

  • 3 weeks later...
  • 1 year later...

Buenas,

Tengo meses con el mismo problema, (ps 1.7.6.3)

puedo ver que el problema está en el botón de submit o continuar al registrarse para comprar (no evita el doble click) ;

si la pagina tarda unos segundos y se hacen varios clicks,  cada click registra un usuario duplicado.

Veré como lo soluciono por PHP o por Js ,  ya que esto no le deja al user terminar de comprar por un conflicto con el ID que se integro a un Erp.

Que raro que nadie de Prestashop de una solución a esto....

Link to comment
Share on other sites

  • 1 month later...
  • 2 months later...

Buenos días, el problema sigue sin solución, hoy me lo ha reportado un cliente q tiene hasta tres veces el mismo usuario registrado con una diferencia de pocos segundos. Se me ocurre poner la propiedad UNIQUE en el campo mail de la tabla de clientes.... alguien lo ha probado??

Gracias,

un saludo.

Link to comment
Share on other sites

  • 4 weeks later...

Buenas tardes a todos,

Uno mas que se une al problema. He estado realizando pruebas en un entorno de desarrollo y mi problema es el siguiente:

1 - Un usuario hace un pedido como invitado
2 - Después de completar el pedido, por comodidad, el usuario se registra para futuros pedidos
3 - El sistema no detecta que ya existe un usuario invitado con ese email y lo duplica

El resultado son dos veces el mismo usuario. El cliente luego quiere acceder a ver sus pedidos pero le sale que no tienen ninguno o solo le aparecen los que hizo como usuario registrado, porque ya no puede acceder a ver sus pedidos anteriores como invitado ya que le obliga a iniciar sesión al tener ya una cuenta creada.

Es un problema de flujo de trabajo nada más. Aunque si es importante que los emails no se repitan y el primer limitador como dice @qlio es crear un indice UNIQUE para el campo email, mas allá de luego comprobar en el controlador si existe o no.

Voy a indagar en el código a ver de que manera lo solucionamos.

Link to comment
Share on other sites

On 10/9/2019 at 7:59 PM, Chicho1969 said:

Siento mucho decir lo que voy a decir, pero es mi realidad, y ya no soporto la sinvergonzonería de Prestashop, que lanza software inconcluso  y con problemas tan obvios, que es de ignorantes pensar que es un descuido o error.  Desde el 1.6 en adelante, la barbaridad de errores que traen, es imposible que no lo sepan, ylos problemas que esto genera a los clientes es obvio que les da igual..

No veo otra solución que pasarme a Magento,  Llevo montando tiendas desde la versión 1.2 y desde Prestashop 1.6 en adelante esto es  un timo. Llevan años sin solucionar nada, este software está abandonado. Vive de las rentas de la versión 1.4 que funcionaba de verdad. Es más,  llevo unas 8 tiendas de Prestashop (ahora solo 6, 2 ya estan en Magento) y la única que sigue con el 1.4 es la que mejor funciona y la más rentable. 

Hoy por hoy ni los desarrolladores de Prestashop saben solucionar los problemas.

Para cuando terminen su migración al nuevo framework, muchos usuarios, como yo,  habrán perdido la paciencia o habrán abandonado su proyecto de tienda. Sinceramente no merece la pena trabajar tantas horas solo para reparar los fallos de Prestashop. En mi opinión, a la gente de Prestashop se la "suda" el cliente y lleva más de 2 años demostrándolo.

Con Magento community, no tienes más que centrarte en la forma de vender, no hay un bug cada dia, por supuesto algún bug tiene, pero no a diario. Migrar la tienda de Prestashop a Magento es 1 dia de trabajo y a partir de ahí es incomparable, Prestashop, es ahora mismo el más caro, con diferencia,  de todas las tiendas online porque no te deja tiempo para trabajar en vender , todo son errores.
Os animo a pasar vuestras tiendas a Magento y a lo mejor esta gente se da cuenta del daño que está haciendo, mientras sigamos intentando arreglar su "cacicada" seguirán contentos.

Entiendo tu frustración y la comparto en ciertos aspectos. Vengo de Wordpress y me he topado con proyectos en el que era imperativo trabajar con Prestashop por decisiones del cliente. He desarrollado plugins e integraciones para ambas plataformas y en definitiva creo que Wordpress tiene mas estabilidad a pesar de que el modelo de datos no es para nada optimo. Para Prestashop actualmente es mas complicado desarrollar ya que mitad del proyecto esta en Symfony y la otra no.

Mi resumen sin mojarme es que recomendaría Wordpress para proyectos mas pequeños y Prestashop para mas grandes. Al menos a día de hoy si.

Sin embargo, creo que no nos podemos cabrear cuando algo funcione mal o se tomen decisiones en la plataforma que pueden no ser las mejores. El núcleo de Prestashop al igual que Wordpress es gratuito y no podemos exigir que una herramienta sea infalible sin aportar nada a la misma. Puedo entenderlo si adquieres un plugin de pago y este no funciona como debería y no te dan el soporte que mereces. Que en Prestashop porcierto no son nada baratos 😜

 

Dejando esta disputa de lado os dejo por aquí el problema y una posible solución:

El problema a día de hoy está en que el usuario cambia de Invitado a Cliente correctamente cuando estas dentro del seguimiento de un pedido. Prestashop te da la opción de convertir tu cuenta de invitado en una de cliente dentro de esta sección.

La cosa hasta ahí funciona bien pero lo que ocurre es que si un usuario que ya hizo una compra como invitado, toma la iniciativa de querer registrarse por su cuenta, se duplica el usuario y aquí está el problema. Ahora tienes una cuenta de invitado y una de cliente para el mismo usuario.

Sin embargo esto no es del todo erróneo, ya que si un usuario quiere registrarse y existe una cuenta de invitado, si fusionaríamos las dos cuentas podemos estar ante una brecha de seguridad. ¿Porque? Fácil, si una persona conoce el email de otra que ha realizado un pedido como invitado puede intentar registrarse posteriormente y capturaría todos los datos de la persona suplantada, exponiendo todos los datos de la misma.

Para evitar esto lo que se me ha ocurrido es modificar la linea 119 del archivo classes/form/CustomerForm.php

De

$id_customer = Customer::customerExists($emailField->getValue(), true, true);

A

$id_customer = Customer::customerExists($emailField->getValue(), true, false);

Esta linea verifica si el cliente existe o no y la ultima variable sirve para ignorar a los usuarios invitados o no.

El resultado es que a la hora de registrarse va a dar el error de que el usuario ya existe en la plataforma. La única manera de recuperar el acceso a esta cuenta seria acceder como invitado a tu pedido y crearte la cuenta sabiendo al menos el numero de referencia del ultimo pedido o que la propia tienda te active el usuario. No es la mejor manera pero al menos evita duplicados de usuarios. Esto podria evitarse si las cuentas tuvieran verificacion de email por defecto :P

 

Para los mas puritanos que no quieran tocar el core de Prestashop (Os lo recomiendo) pueden hacer uso de este override:

<?php
    
    
class CustomerForm extends CustomerFormCore {
    
    public function validate()
    {
        $emailField = $this->getField('email');
        $id_customer = Customer::customerExists($emailField->getValue(), true, false);
        $customer = $this->getCustomer();
        
        if ($id_customer && $id_customer != $customer->id) {
            $emailField->addError($this->translator->trans(
                'The email is already used, please choose another one or sign in',
                [],
                'Shop.Notifications.Error'
            ));
        }

        // check birthdayField against null case is mandatory.
        $birthdayField = $this->getField('birthday');
        if (!empty($birthdayField) &&
            !empty($birthdayField->getValue()) &&
            Validate::isBirthDate($birthdayField->getValue(), $this->context->language->date_format_lite)
        ) {
            $dateBuilt = DateTime::createFromFormat(
                $this->context->language->date_format_lite,
                $birthdayField->getValue()
            );
            $birthdayField->setValue($dateBuilt->format('Y-m-d'));
        }
        $this->validateFieldsLengths();
        $this->validateByModules();

        return parent::validate();
    }

    public function validateByModules()
    {
        $formFieldsAssociated = [];
        // Group FormField instances by module name
        foreach ($this->formFields as $formField) {
            if (!empty($formField->moduleName)) {
                $formFieldsAssociated[$formField->moduleName][] = $formField;
            }
        }
        // Because of security reasons (i.e password), we don't send all
        // the values to the module but only the ones it created
        foreach ($formFieldsAssociated as $moduleName => $formFields) {
            if ($moduleId = Module::getModuleIdByName($moduleName)) {
                // ToDo : replace Hook::exec with HookFinder, because we expect a specific class here
                $validatedCustomerFormFields = Hook::exec('validateCustomerFormFields', ['fields' => $formFields], $moduleId, true);

                if (is_array($validatedCustomerFormFields)) {
                    array_merge($this->formFields, $validatedCustomerFormFields);
                }
            }
        }
    }
}

Cabe decir que esto se ha realizado en la version de Prestashop 1.7.7,5

  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...