Este artículo muestra la forma completa, técnica y funcional de importar listas de Categorías, Atributos y Productos en el comercio electrónico de Magento 2 CE, mediante la interfaz de REST API y el código C # .NET.

En la parte inferior encontrará algunos consejos de RecuperaciónBackups de Magento.

Encontrará una guía paso a paso con ejemplos de códigos para:

  1.  Cargar las categoría;
  2.  Cargar los atributos personalizados del producto;
  3.  Cargar productos configurables;
  4.  Cargar productos simples;
  5.  Asociar opciones de productos configurables a productos configurables y productos simples; 
  6.  Crear configuraciones de productos;
  7.  Vincular productos simples a productos configurables;

Los ejemplos en esta guía han sido probados para las siguientes versiones:

  1. Magento CE 2.2.6
  2. Mysql 5.7.21
  3. Php 7.1.14

Para obtener más información sobre los requisitos previos para la instalación de Magento 2 CE, puede encontrar la documentación oficial aquí: https://devdocs.magento.com/guides/v2.0/install-gde/prereq/prereq-overview.html

Magento 2 expone tres interfaces implementables principales para cargar y administrar datos:

  1. Rest API Interface
  2. SOAP API Interface
  3. Object Manager + Object Model Interface

Al utilizar estos métodos, puede agregar fácilmente listas de productos de una fuente de datos genérica al comercio electrónico de Magento y puede mantener la sincronización de los mismos.

PHP – ObjectManager:

Es posible desarrollar código PHP personalizado, para complementos, módulos o scripts genéricos, e integrarlo en Magento. El servicio ObjectManager le permite implementar la Interfaz de Modelo de Objeto en su código y crear una instancia de sus objetos en el arranque de la aplicación. Esto se hace explotando las peculiaridades de la inyección de Dependencia.

Puede optar por no utilizar la inyección de dependencia y el arranque de Magento simplemente creando objetos “Inyectables / no inyectables”, modificando Bootstrap, creando una instancia del Administrador de objetos e invocando recursos (clases de Framework) cuando sea necesario. Con las modalidades descritas anteriormente, utilizando el Modelo de objetos, los datos de Magento se pueden cargar y manipular.

SOAP APIs:

Los puntos finales de Magento están protegidos y son accesibles solo con autenticación. Para generar un proxy, es necesario descargar el WSDL (ej.: http://<site url>/magento2/soap/default?wsdl=1&services=storeStoreRepositoryV1 ) del servicio solicitado, mediante el uso de un software que permita las solicitudes de SOAP con autenticación (es Cartero). Después de guardar el WSDL con utilidades dedicadas, es posible generar clases proxy en el lado del cliente C # y VB .NET (en Visual Studio, la herramienta más común es Svcutil.exe).

REST APIs:

Cada instalación de Magento tiene un conjunto completo de puntos finales REST para interactuar con los datos y estructuras de CMS.

La forma más conveniente de aprovechar la API REST de Magento es usar llamadas HTTP. En detalle, debe generar un modelo de datos local y crear una instancia de un Cliente REST.
Un ejemplo de código escrito en C #:

JsonDeserializer jsonDeSerializer = new JsonDeserializer(); 
RestClient client = new RestClient("http://<your site url>/magento2/"); 
bool contentTypeHeaderWithUnderscore = false; 
string barerToken = "vztdr8zbicw4poozqfg5eo0vh3t29ikt";  
client.AddDefaultHeader(contentTypeHeaderWithUnderscore ? "Content_Type" : "Content-Type", "application/json"); 
client.ClearHandlers(); client.AddHandler("application/json", _jsonDeSerializer); 
var request = new RestRequest("rest/V1/products/000167", RestSharp.Method.GET); 
request.RequestFormat = DataFormat.Json; 
request.AddHeader("Authorization", "Bearer " + barerToken); 
request.AddHeader("Accept", "application/json");

RestClient es un paquete Restsharp que se puede descargar desde el repositorio de NuGet Package.

Hay un punto final para gestionar cada entidad de Magento 2 CE. Para cada entidad hay una interfaz para crear un “modelo de datos” a través del cual construir una solicitud en formato JSON.

Puede encontrar la lista completa de servicios disponibles aquí.:http://devdocs.magento.com/guides/v2.0/rest/list.html

Para transformar un modelo de datos en una cadena Json (serialización), puede usar .NET Newtonsoft.Json Library, como se muestra en el siguiente código

Product pd = new product(); 
pd.name = “Jacket”; 
pd.sku = “GIUB01” ……. 
string json = JsonConvert.SerializeObject(pd, Formatting.Indented); 
request.AddParameter("application/json", json, ParameterType.RequestBody); 
response = Client.Execute(request);

La secuencia de pasos a seguir para una carga de datos estándar y completa dentro de Magento son:

  1. Creación de categorías;
  2. Creación of AttributeSet;
  3. Creación de atributos de producto personalizados, asignación de atributos, asignación de grupo de atributos;
  4. Opción de asignación a un atributo de producto personalizado individual;
  5. Creación de productos configurables;
    1. Asignación contextual a AttributeSet;
  6. Creación de productos de tipo simple;
    1. Asignación contextual a AttributeSet + Atributos de producto Opción personalizada;
  7. Opción de asignación de atributo al producto configurable para su uso en las combinaciones de productos;
  8. Opción de asignación de atributos a productos simples para su uso en las asociaciones de productos ;
  9. Asociación simple de productos al producto configurable relativo (productos vinculados);

Punto 1:

La instalación de Magento crea una categoría raíz, no visible ni en el back-end ni en el front-end, llamada ” Root Catalog “.

Magento 2 Category Table with the Root Catalog

No debe ser eliminado. Debajo de la categoría raíz, debe insertar todas las demás categorías de acuerdo con la jerarquía deseada. A continuación se muestra un JSON simple para enviar al punto final para insertar una categoría:”/rest/V1/categories”:

 {"category":{"id":0,"parent_id":2,"name":"Clothing","is_active":true,"position":0,"level":0,"children":null,"created_at":null,"updated_at":null,"path":null,"available_sort_by":null,"include_in_menu":true,"custom_attributes":[{"attribute_code":"url_key","value":"clothing"}]}}

Tree of Magento Categories 2

Punto 2:

En Magento, los atributos del producto están organizados y relacionados con un conjunto de AttributeSet. Es posible crear múltiples atributos de productos personalizados y asignarlos a AttributeSet. Un atributo de producto puede pertenecer solo a un conjunto de atributos. Aquí hay un JSON simple para el punto final “/rest/V1/products/attribute-sets” para crear un conjunto de atributos:

 {"skeletonId":4,"attributeSet":{"attribute_set_id":null,"attribute_set_name":"Etos_Magento_Attr","sort_order":2,"entity_type_id":0,"extension_attributes":null},"entityTypeCode":"catalog_product"}

El parámetro llamado “Skeletonid” indica la creación del conjunto de atributos en el conjunto de atributos predeterminado que en Magento siempre tiene ID= 4.

Magento Attribute Set and Attribute Group 2

Punto 3:

Magento viene con algunos atributos estándar, pero es posible agregar Atributos de Productos Personalizados para calificar los productos. Tenemos que hacer esto si las Combinaciones de productos que se crearán para los productos se basan en atributos que no están presentes en Magento. A continuación se muestra un JSON simple para enviar al punto final “/rest/V1/products/attributes” para crear un atributo de producto personalizado:

 {"attribute":{"is_wysiwyg_enabled":false,"is_html_allowed_on_front":true,"used_for_sort_by":false,"is_filterable":false,"is_filterable_in_search":false,"is_used_in_grid":true,"is_visible_in_grid":true,"is_filterable_in_grid":false,"position":0,"apply_to":["simple","configurable","virtual"],"is_searchable":null,"is_visible_in_advanced_search":null,"is_comparable":"true","is_used_for_promo_rules":null,"is_visible_on_front":"true","used_in_product_listing":"true","is_visible":true,"scope":"Store View","attribute_id":0,"attribute_code":"a1","frontend_input":"select","entity_type_id":null,"is_required":false,"options":null,"is_user_defined":true,"default_frontend_label":"A1","frontend_labels":[{"storeId":0,"label":"A1"}],"backend_type":null,"source_model":null,"is_unique":null,"validation_rules":null}}

Para usar las Opciones de Atributos en la combinación de productos, Atributo debe tener las siguientes características:

El “scope” se debe establecer en “global”;
El atributo debe ser “visible”;
El atributo debe ser del tipo “definido por el usuario”;
El atributo debe usar varias opciones (como los atributos “dropdown” y “multiselect”)

El ejemplo json para asignar el atributo de Producto Personalizado al Attributeset y al grupo de Atributos se muestra a continuación. El punto final es: “/rest/V1/products/attribute-sets/attributes”:

 

 {"attributeSetId":16,"attributeGroupId":101,"attributeCode":"a1","sortOrder":0}

Attribute and Attribute Option in Magento 2

Punto 4:

Para cada atributo creado, tenemos que asignar las listas de valores de opciones relativas utilizando el punto final “/rest/V1/products/attributes/<attribute-code>/options” con un json como el siguiente:

 {"option":{"label":"2XS","value":"T2XS_TA","storeLabels":{"storeId":1,"label":"2XS"}},"sortOrder":1}

Punto 5:

Magento 2 CE permite crear al menos 6 tipos de productos: Simple, Configurable, Agrupado, Virtual, Bundle y Downlodable. Normalmente, la tienda de Magento 2 debe tener Productos configurables (Parent) con varios Productos simples (Child) asociados en un número igual a todas las combinaciones posibles para los Valores de Opciones de Atributos asociados.

El Producto configurable será la única entidad visible en el Catálogo de productos de la tienda. Por lo tanto, los productos simples se mostrarán solo en las páginas de detalles cada vez que los clientes elijan las opciones disponibles.

Configurable Product in Magento 2 shop lists

Para crear un producto de tipo Configurable, debe utilizar el punto final “/rest/V1/products” con el método “POST”. A continuación se muestra un ejemplo de json para la inserción completa de un producto configurable con precio, stock (stock), imágenes, descripciones, atributos:

 {"sku":"000043","product":{"id":null,"sku":"000043","name":"Apepazza Women Sold Shoes Yle01/texture-box Derby Mascherina Con Perline","attribute_set_id":16,"price":139,"status":1,"visibility":4,"type_id":"configurable","created_at":null,"updated_at":null,"extension_attributes":{"stockItem":{"itemId":null,"productId":0,"stockId":1,"qty":0,"isInStock":true,"isQtyDecimal":true,"showDefaultNotificationMessage":false, "useConfigMinQty":true,"minQty":1,"useConfigMinSaleQty":1,"minSaleQty":1,"useConfigMaxSaleQty":false,"maxSaleQty":0,"useConfigBackorders":true, "backorders":0,"useConfigNotifyStockQty":true,"notifyStockQty":1,"useConfigQtyIncrements":true,"qtyIncrements":1,"useConfigEnableQtyInc":true,"enableQtyIncrements":true,"useConfigManageStock":true,"manageStock":true, "lowStockDate":null,"isDecimalDivided":true,"stockStatusChangedAuto":0,"extensionAttributes":null},"category_links":[{"position":0,"category_id":"3","extension_attributes":null},{"position":0,"category_id":"14","extension_attributes":null},{"position":0,"category_id":"60","extension_attributes":null},{"position":0,"category_id":"84","extension_attributes":null}]},"product_links":null,"options":null,"media_gallery_entries":[{"id":null,"mediaType":"image","label":"Foto-0-APEPAZZACALZATURESALDIDONNAYLE01TEXTUREBOXDERBYMASCHERINACONPERLINE-000043","position":0,"disabled":false,"types":["image","small_image","thumbnail"],"file":null,"content":{"Base64EncodedData":"/9j/4RJQRXhpZgAATU0AKgAAAAgAEgEAAAMAAAABEKAAAA .... <stringa.dati-base64>","Type":"image/jpeg","Name":"DSE_3460jpg"},"extensionAttributes":null}],"tier_prices":null,"custom_attributes":[{"attribute_code":"url_key","value":"apepazza-calzature-saldi-donna-yle01-texture-box-derby-mascherina-con-perline"},{"attribute_code":"description","value":"YLE01/TEXTURE-BOX<br>\t\t<p><span style=\"background-color:#FFFFFF;font-family:Calibri;font-size:11pt;\">Scarpa bassa in pelle spazzolata con inserti elasticizzati su linguetta.<\/span><\/p>\r\n\t\t<p><span style=\"background-color:#FFFFFF;font-family:Calibri;font-size:11pt;\"> Ricamo di perline frontale .<\/span><\/p>\r\n\t\t<p><span style=\"background-color:#FFFFFF;font-family:Calibri;font-size:11pt;\"> Suola in gomma light e tacco 30 .<\/span><\/p>\r\n\r\n"},{"attribute_code":"barcode","value":""},{"attribute_code":"tipoprodotto","value":"CALZATURE"},{"attribute_code":"reparto","value":"SALDI DONNA"},{"attribute_code":"brand","value":"APEPAZZA"}]}}

Punto 6:

El siguiente paso consiste en crear un producto Simple o Child, que es la única variante (combinación) del producto configurable.

 {"sku":"000257.010-41","product":{"id":null,"sku":"000257.010-41","name":"Atlantic Stars Calzature Saldi Uomo Antares Bpb-63n Camoscio/nylon F.do Sport","attribute_set_id":16,"price":185,"status":1,"visibility":1,"type_id":"simple","created_at":null,"updated_at":null,"extension_attributes":{"stockItem":{"itemId":null,"productId":0,"stockId":1,"qty":1,"isInStock":true,"isQtyDecimal":true,"showDefaultNotificationMessage":false, "useConfigMinQty":true,"minQty":1,"useConfigMinSaleQty":1,"minSaleQty":1,"useConfigMaxSaleQty":false,"maxSaleQty":0,"useConfigBackorders":true, "backorders":0,"useConfigNotifyStockQty":true,"notifyStockQty":1,"useConfigQtyIncrements":true,"qtyIncrements":1,"useConfigEnableQtyInc":true,"enableQtyIncrements":true,"useConfigManageStock":true, "manageStock":true,"lowStockDate":null,"isDecimalDivided":true,"stockStatusChangedAuto":0,"extensionAttributes":null},"category_links":[{"position":0,"category_id":"3","extension_attributes":null},{"position":0,"category_id":"25","extension_attributes":null},{"position":0,"category_id":"79","extension_attributes":null},{"position":0,"category_id":"85","extension_attributes":null}]},"product_links":null,"options":null,"media_gallery_entries":[{"id":null,"mediaType":"image","label":"Foto-0-ATLANTICSTARSCALZATURESALDIUOMOANTARESBPB63NCAMOSCIONYLONFDOSPORT-000257.010-41","position":0,"disabled":false,"types":["image","small_image","thumbnail"],"file":null,"content":{"Base64EncodedData":"/9j/4RDKRXhpZgAATU0AKgAAAAgAEgEAAA ... ","Type":"image/jpeg","Name":"DSE_4063jpg"},"extensionAttributes":null},{"id":null,"mediaType":"image","label":"Foto-1-ATLANTICSTARSCALZATURESALDIUOMOANTARESBPB63NCAMOSCIONYLONFDOSPORT-000257.010-41","position":1,"disabled":false,"types":null,"file":null,"content":{"Base64EncodedData":"/9j/4RIRRXhpZgAATU0AKgAAAAgAEgEAAA ... ","Type":"image/jpeg","Name":"DSE_4064jpg"},"extensionAttributes":null},{"id":null,"mediaType":"image","label":"Foto-2-ATLANTICSTARSCALZATURESALDIUOMOANTARESBPB63NCAMOSCIONYLONFDOSPORT-000257.010-41","position":2,"disabled":false,"types":null,"file":null,"content":{"Base64EncodedData":"/9j/4RFxRXhpZgAATU0AKgAAAAgAEgEAAA ...","Type":"image/jpeg","Name":"DSE_4065jpg"},"extensionAttributes":null}],"tier_prices":null,"custom_attributes":[{"attribute_code":"calzuomo3848senza12","value":"147"},{"attribute_code":"colore","value":"326"},{"attribute_code":"url_key","value":"atlantic-stars-calzature-saldi-uomo-antares-bpb-63n-camoscio-nylon-f-do-sport"},{"attribute_code":"barcode","value":"20094581"},{"attribute_code":"tipoprodotto","value":"CALZATURE"},{"attribute_code":"reparto","value":"SALDI UOMO"},{"attribute_code":"brand","value":"ATLANTIC STARS"}]}}

Para el producto simple, la visibilidad se establece en “1” (= not visible individually) porque solo el producto configurable debe estar visible en el catálogo y en las búsquedas, mientras que el producto simple se mostrará en el detalle de la página al elegir la combinación relativa.

Configurable Product and Simple Product in Magento 2 backend

Simple Product Details with Choice Options and image swapping

Punto 7:

Ahora tenemos que asignar al producto configurable los atributos y las opciones relativas que se utilizarán para las combinaciones. La asignación de estas opciones al producto configurable corresponde al valor de las “Opciones de productos configurables”. Es posible utilizando “/rest/V1/configurable-products/{sku}/options” endpoint, y el siguiente JSON, derivado de un metodo GET (“rest/V1/products/:sku”) para un solo producto:

 {"configurable_product_options":[{"id":51642,"attribute_id":"197","label":"Colore","position":0,"values":[{"value_index":322}],"product_id":6728},{"id":51643,"attribute_id":"210","label":"Ta","position":0,"values":[{"value_index":8},{"value_index":5},{"value_index":9},{"value_index":6},{"value_index":7}],"product_id":6728}]}

Si estas opciones no están asignadas, cuando intentemos vincular el Producto simple al Configurable, el sistema Magento generará la excepción “Configurable”.

Opción para el atributo de Color 

{"option":{"attributeId":"174","label":"COLORE","position":0,"isUseDefault":true,"values":[{"valueIndex":346,"extensionAttributes":{}}],"extensionAttributes":{},"productId":0}}

Options para atributo “CALZ. WOMAN 34-42 WITH ½ “:

 {"option":{"attributeId":"160","label":"CALZ. DONNA 34-42 CON ½","position":0,"isUseDefault":true,"values":[{"valueIndex":32,"extensionAttributes":{}},{"valueIndex":33,"extensionAttributes":{}},{"valueIndex":34,"extensionAttributes":{}},{"valueIndex":35,"extensionAttributes":{}},{"valueIndex":36,"extensionAttributes":{}},{"valueIndex":37,"extensionAttributes":{}}],"extensionAttributes":{},"productId":0}}

Todas las opciones están asignadas al Configurable. Todas las opciones deben incluirse en un solo json; de lo contrario, se genera el error “Algo salió mal al guardar la opción”, que corresponde a la violación de la restricción de la clave principal.

Selecting the configurable options to generate product configurations

Punto 8:

También tenemos que asignar las Opciones de atributos configurables al producto simple, si es una combinación de un producto configurable, utilizando “/rest/V1/configurable-products/{sku}/options “.  Para el producto simple tenemos que asignar solo un valor de opción para cada atributo:

Opción para el atributo de color:
 {"option":{"attributeId":"174","label":"COLORE","position":0,"isUseDefault":true,"values":[{"valueIndex":326,"extensionAttributes":{}}],"extensionAttributes":{},"productId":0}}

Color attribute selected for Simple Product

Opción para el atributo de Tamaño:

 {"option":{"attributeId":"163","label":"CALZ.UOMO 38-48 SENZA 1/2","position":0,"isUseDefault":true,"values":[{"valueIndex":150,"extensionAttributes":{}}],"extensionAttributes":{},"productId":0}}

Punto 9:

El último paso es asociar el producto simple con el configurable. A través del punto final “/ rest / V1 / configurable-products / {sku} / child” y el siguiente ejemplo json:

{ "childSku": "000042.032-36" }

 

Configurations List / Simple Products Associated with the Configurable product

Backup y Seguridad de Magento 2 e-commerce

Antes de realizar una carga completa de productos u otros datos, es importante realizar una copia de seguridad completa de la base de datos Magento MySQL y los archivos Magento ubicados en el espacio FTP.
En primer lugar, es necesario configurar MySQL para permitir conexiones remotas (esto debe ser permitido por su proveedor de alojamiento), luego debe ubicar el archivo de configuración de MySQL donde, en una directiva específica, debe indicar la dirección IP desde la que debe conectarse.

 bind-address = 192.168.0Then access MySQL server by using root credentials and run the following script:.97

Luego acceda al servidor MySQL usando credenciales de root y ejecute el siguiente script:

 GRANT ALL ON <mysql db name>.* TO <utente accesso remoto>@<indirizzo ip computer remoto> IDENTIFIED BY '<password utente remoto>';

Pr ejemplo:

 GRANT ALL ON magento2.* TO root@192.168.0.200 IDENTIFIED BY 'mypswd';
Para realizar los procedimientos de copia de seguridad de comercio electrónico de Magento, utilizaremosIperius Backup.

En la imagen de abajo puede ver la configuración simple para descargar automáticamente el sitio a través de FTP y realizar una copia de seguridad de MySQL (dump).

Backup of MySql with Iperius Backup

Para mas informacion, ver el tutorial: Copia de Seguridad de MySQL Iperius

Es esencial realizar una copia de seguridad completa de todos los archivos de instalación de Magento 2 CE. Para hacer esto, debe configurar una nueva operación de copia de seguridad en Iperius, donde los elementos de origen son los archivos de Magento ubicados en el espacio web, accesibles a través de FTP:

Backup Ftp Web Space with Iperius Backup

Para mas información, ver el tutorial: Automatic download of websites with Iperius

Haga Clic aquí para descargar la ultima version de Iperius Backup

Software de gestión para tiendas y comercio electrónico

Importar listas de productos en un comercio electrónico es una operación de gran importancia si tiene un software de administración de tienda que administra una gran cantidad de datos. De hecho, una de las mejores maneras para que una tienda amplíe su oferta y sus clientes es vender productos a través de un comercio electrónico de Magento. Las tiendas y las empresas a menudo encuentran dificultades para integrar su software de gestión con una estrategia de comercio electrónico efectiva. Para simplificar este proceso, existen soluciones completas que le permiten importar automáticamente listas de productos en un comercio electrónico de Magento, como el software de administración para tiendas Etos : https://www.etosweb.com/negozio-online/

 

(Inglés, Italiano, Francés, Portugués, Brasil)



Magento 2: cómo agregar productos en Magento mediante REST API y C #
Iperius Backup Spain
*****************************************

PLEASE NOTE: if you need technical support or have any sales or technical question, don't use comments. Instead open a TICKET here: https://www.iperiusbackup.com/contact.aspx

*****************************************

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*****************************************

PLEASE NOTE: if you need technical support or have any sales or technical question, don't use comments. Instead open a TICKET here: https://www.iperiusbackup.com/contact.aspx

*****************************************