Pululart

Si bien es  este artículo vamos a ver la creación de usuarios en Magento 2 mediante código, lo haremos forma muy básica y a forma de introducción para más adelante continuar con la actualización de Magento 1.9 a Magento 2.

¿Por qué crear usuarios en Magento 2 mediante programación?

En Magento podemos dar de alta usuarios de múltiples formas:

  1. El propio cliente a través del formulario de registro o al finalizar su compra. Esta forma está pensada para que la misma persona de de alta su propia cuenta fácilmente sin nuestra intervención.
  2. A través del panel de control. Este método está pensado para cuando de manera puntual, nosotros, como propietarios de una tienda en Magento 2 creemos una cuenta de usuario teniendo los datos del cliente. El problema es que no deja de ser un trabajo engorroso en caso de que la cantidad de cuentas a dar de alta sea grande.
  3. Mediante programación. Si poseemos los datos de los clientes o buscamos migrar grandes cantidades de usuarios , esta es nuestra solución. Como vimos en otras ocasiones, una de las principales mejoras de Magento 2 es su mayor velocidad en este tipo de trabajos, por lo que no debemos temer hacer uso de la programación para este tipo de tareas.

Si ya nos hemos decantado por la tercera opción vamos a comenzar paso por paso con cada una de las tareas a realizar para dar de alta una cuenta de usuario en Magento 2 a través de API.

Como siempre comenzamos cargando el archivo «iniciador» de Magento 2, al archivo bootstrap.php y definiendo la tienday vista en la que trabajaremos. Lo hacemos de esta forma:

 require __DIR__ . '/app/bootstrap.php';

 $params = $_SERVER;
 $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
 $objectManager = $bootstrap->getObjectManager();
 $objectManager->get('Magento\Framework\App\State')->setAreaCode('frontend');
 $state = $objectManager->get('\Magento\Framework\App\State');
 $state->setAreaCode('frontend');
 
 
 $storeManager = $objectManager->get('\Magento\Store\Model\StoreManagerInterface');
 $storeId = $storeManager->getStore()->getId();
 
 $websiteId = $storeManager->getStore($storeId)->getWebsiteId();

Tras esto pasamos a la creación del usuario haciendo uso del objectManager y lo vinculamos a nuestra tienda:

 $cliente = $objectManager->get('\Magento\Customer\Api\Data\CustomerInterfaceFactory')->create();
 $cliente->setWebsiteId($websiteId);

Continuamos añadiendo los campos que queramos cubrir del usuario, en este caso vamos a limitarnos a únicamente añadir email, nombre y apellidos, si bien cualquier tipo de campo se cubriría siguiendo ese mismo patrón set y nombre del campo a cubrir.

 $cliente->setEmail("pruebas@pululart.com");
 $cliente->setFirstname("Nombre");
 $cliente->setLastname("Apellido1 Apellido2");

Con esto ya casi habríamos finalizado pero… Nos faltaría algo tan importante como asignar una contraseña a dicha cuenta, así que pasamos a crear una ya encriptada para añadirla al usuario y ya guardamos todo:

 $passwordEncriptado = $objectManager->get('\Magento\Framework\Encryption\EncryptorInterface')->getHash('MyNewPass', true);
 $objectManager->get('\Magento\Customer\Api\CustomerRepositoryInterface')->save($cliente, $passwordEncriptado);

Siguiendo estos sencillos pasos ya tendríamos una cuenta creada en Magento 2 usando al API. Ahora si accedemos al panel de control de nuestra tienda ya podríamos comprobar que esto es así y que todo esto ha funcionado correctamente pero ya que dimos de alta un usuario mediante programación, ¿por qué no lo comprobamos también así? Pues bien sería tan fácil como esto:

 $cliente = $objectManager->get('\Magento\Customer\Model\CustomerFactory')->create();
 $cliente->setWebsiteId($websiteId)->loadByEmail("pruebas@pululart.com");

Así tendríamos cargado el objeto del cliente cuyo email es el que utilizamos en la creación antes. Si todo fue bien si ahora podríamos acceder a los campos del usuario de esta forma e imprimirlos por pantalla obteniendo como resultado Nombre Apellido1 Apellido 2:

 echo $cliente->getFirstname() . " " . $cliente->setLastname();