Registrar un usuario en Prestashop desde un archivo externo

Pongamos por caso que tenemos una base de datos de usuarios y queremos importarlos a nuestra nueva tienda Prestashop.

Antes de empezar, es importante que tengamos claro el id de por defecto del idioma que le queremos asignar y el grupo de usuarios al que queremos que pertenezca el nuevo cliente.

Conectamos con el core de Prestashop, visto en «Conectar un archivo externo a Prestashop«:

include 'config/settings.inc.php';
include 'config/defines.inc.php';
include 'config/config.inc.php';
include 'init.php';

Insertamos los datos de usuario en la tabla ps_customer:


$password = '1234';
$company =  'Nombre de Empresa';
$nombre = 'Nombre';
$apellidos = 'Apellidos';
$email = 'Email';
$password = 'password1234';
$aniversario = '1990-04-20 13:34:26'; 

Db::getInstance()->insert('customer', array(
    "email"=>$email,
    "firstname"=>$nombre,
    "lastname"=>$apellidos,
    "passwd"=>ToolsCore::encrypt($password),
    "company"=>$company,
    "active"=>1,
    "secure_key"=>md5(uniqid(rand(), true)),
    "id_default_group"=>3,
    "id_lang"=>3,
    "newsletter"=>1,
    "id_risk"=>0,
    "birthday"=>$aniversario,
    "newsletter_date_add"=>"0000-00-00",
    "max_payment_days"=>0,
    "date_upd"=>date("Y-m-d H:i:s"),
    "date_add"=>date("Y-m-d H:i:s")
));

Ahora, necesitaríamos obtener el id del cliente que acabamos de insertar, para ello realizaremos la siguiente consulta (apoyandonos en el email anteriormente insertado):

$sql = 'SELECT id_customer FROM '._DB_PREFIX_.'customer WHERE email="'.$email.'" LIMIT 1';
$results = Db::getInstance()->ExecuteS($sql);

Y finalmente, intertaremos en la tabla customer_group el id del usuario y el grupo al cual pertenece:

Db::getInstance()->insert('customer_group', array(
    "id_customer"=>$results[0]['id_customer'],
    "id_group"=>3
));

Y por fin, el código completo:

// Nos conectamos al core de Prestashop
include 'config/settings.inc.php';
include 'config/defines.inc.php';
include 'config/config.inc.php';
include 'init.php';

// Seteamos las variables
$password = '1234';
$company =  'Nombre de Empresa';
$nombre = 'Nombre';
$apellidos = 'Apellidos';
$email = 'Email';
$password = 'password1234';

// Insertamos los datos de usuario
Db::getInstance()->insert('customer', array(
    "email"=>$email,
    "firstname"=>$nombre,
    "lastname"=>$apellidos,
    "passwd"=>ToolsCore::encrypt($password),
    "company"=>$company,
    "active"=>1,
    "secure_key"=>md5(uniqid(rand(), true)),
    "id_default_group"=>3,
    "id_lang"=>3,
    "newsletter"=>1,
    "id_risk"=>0,
    "birthday"=>"0000-00-00",
    "newsletter_date_add"=>"0000-00-00",
    "max_payment_days"=>0,
    "date_upd"=>date("Y-m-d H:i:s"),
    "date_add"=>date("Y-m-d H:i:s")
));

// Buscamos el usuario que acabamos de crear
$sql = 'SELECT id_customer FROM '._DB_PREFIX_.'customer WHERE email="'.$email.'" LIMIT 1';
$results = Db::getInstance()->ExecuteS($sql);

// Añadimos el grupo de usuario a la tabla ps_customer_group
Db::getInstance()->insert('customer_group', array(
    "id_customer"=>$results[0]['id_customer'],
    "id_group"=>3
));

Happy code!
🙂


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

6 Comments

jose a.

Buenas, soy nuevo en esto, he colocado tu codigo pero no agrega el usuario en prestashop 1.4.
¿cómo puedo hacer que php me envie dónde está el error? porque aparentemente todo funciona ok.
Gracias

Reply
kike

Hola Jose!

Gracias por escribir 🙂

En Prestashop 1.4 no lo he probado :/

Para activar los errores en Prestashop debes de modificar el fichero archivo config/defines.inc.php

Cambia

define('_PS_MODE_DEV_', false);

por:

define('_PS_MODE_DEV_', true);

Un saludo!
Kike.

Reply
Alvaro

Hola Jose, pues muchas gracias porque me viene al pelo para un script de migración de usuarios que tengo que hacer. Me surgió una problemática que no sé si contemplaste o te pudo surgir también.

En la variable de contraseña, si es una cadena de texto, no hay problema y la encripta y sin problema en la función ToolsCore::encrypt que aparece en la línea 20 de tu código. Ahora bien, si no uso esta función y le paso directamente la clave en modo texto (ya que ya poseo esas claves encriptadas desde otra base de datos), entonces las inserta pero no funcionan a la hora de identificarse los usuarios. No sé si porque esta función haga algo más y quede vinculada en algún otro sitio. Cualquier atisbo de luz es agradecido 🙂

Reply
kike

Gracias por tu comentario Álvaro 🙂
Prestashop utiliza su propia encriptación basadao entre otras cosas con la «COOKIE_KEY» de tu PS… con lo cual no te sirve pasarle un md5 (por ejemplo) con string porque no lo reconocería.
(Me llamo Kike ;))

Reply

Responder a kike Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*