Cet article montre la manière complète, technique et fonctionnelle d’importer des listes de catégories, d’attributs et de produits dans le commerce électronique Magento 2 CE, en utilisant l’interface REST API et le code C# .NET.

En bas de page, vous trouverez quelques conseils pour la sauvegarde et la récupération de Magento.

Vous trouverez un guide étape par étape avec des exemples de codes pour :

  1. Télécharger les catégories ;
  2. Télécharger les attributs personnalisés des produits ;
  3. Télécharger les produits configurables ;
  4. Télécharger des produits simples ;
  5. Associer des options de produits configurables à des produits configurables et à des produits simples ;
  6. Créer des configurations de produits ;
  7. Lier des produits simples à des produits configurables ;

Les exemples de ce guide ont été testés pour les versions suivantes :

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

Pour plus d’informations sur les prérequis de l’installation de Magento 2 CE, vous pouvez trouver la documentation officielle ici : https://devdocs.magento.com/guides/v2.0/install-gde/prereq/prereq-overview.html.

Magento 2 expose trois interfaces principales implémentables pour le téléchargement et la gestion des données :

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

En utilisant ces méthodes, vous pouvez facilement ajouter des listes de produits à partir d’une source de données générique à l’ecommerce magento et vous pouvez maintenir la synchronisation de la même chose.

PHP – ObjectManager :

Il est possible de développer du code PHP personnalisé, pour des plugins, des modules ou des scripts génériques, et de l’intégrer à Magento. Le service ObjectManager vous permet d’implémenter l’interface du modèle d’objet dans votre code et d’instancier vos objets au démarrage de l’application. Ceci est réalisé en exploitant les particularités de l’injection de dépendances.

Vous pouvez choisir de ne pas utiliser l’injection de dépendances et le bootstrapping de Magento en créant simplement des objets “Newable / non-injectable”, en modifiant le Bootstrap, en instanciant le gestionnaire d’objets et en invoquant les ressources (classes du Framework) chaque fois qu’elles sont nécessaires. Avec les modalités décrites ci-dessus, en utilisant le modèle d’objet, les données Magento peuvent être chargées et manipulées.

APIs SOAP :

Les endpoints de Magento sont protégés et accessibles uniquement avec une authentification. Pour générer un proxy il est nécessaire de télécharger le WSDL (ex : http://<site url>/magento2/soap/default?wsdl=1&services=storeStoreRepositoryV1 ) du service demandé, en utilisant un logiciel qui permet les requêtes SOAP avec authentification (es Postman). Après avoir sauvegardé le WSDL avec des utilitaires dédiés, il est possible de générer des classes proxy côté client en C# et VB .NET (dans Visual Studio, l’outil le plus courant est Svcutil.exe).

APIs REST :

Chaque installation Magento dispose d’un ensemble complet de points de terminaison REST pour interagir avec les données et les structures du CMS.

La façon la plus pratique de tirer parti de l’API REST de Magento est d’utiliser les appels HTTP. En outre, vous devez générer un modèle de données local et instancier un Client REST.
Un exemple de code écrit en C # :

JsonDeserializer jsonDeSerializer = new JsonDeserializer(); 
RestClient client = new RestClient("http:///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 est un package Restsharp qui peut être téléchargé depuis le dépôt de packages NuGet.

Il y a un endpoint pour gérer chaque entité de Magento 2 CE. Pour chaque entité il y a une interface pour créer un “modèle de données” à travers lequel construire une requête au format JSON.

Vous pouvez trouver la liste complète des services disponibles ici : http://devdocs.magento.com/guides/v2.0/rest/list.html.

Pour transformer un modèle de données en une chaîne Json (sérialisation), vous pouvez utiliser la bibliothèque .NET Newtonsoft.Json, comme le montre le code suivant :

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 séquence des étapes à suivre pour un chargement de données standard et complet dans Magento sont :

  1. Création des catégories ;
  2. Création d’AttributeSet ;
  3. Création d’attributs de produits personnalisés, attribution d’AttributeSet, attribution d’AttributeGroup ;
  4. Attribution d’options à chaque attribut de produit personnalisé ;
  5. Création de produits configurables ;
    1. Attribution contextuelle à un AttributeSet ;
  6. Création de produits de type simple ;
    1. Attribution contextuelle à l’AttributeSet + Option personnalisée d’attributs de produit ;
  7. Option d’affectation d’attribut au produit configurable pour utilisation dans les combinaisons de produits ;
  8. Option d’assignation d’attributs aux produits simples pour utilisation dans les associations de produits ;
  9. Association de produits simples au produit configurable correspondant (liaison de produits) ;

Point 1 : 

L’installation de Magento crée une catégorie racine, non visible ni dans le back-end ni dans le front-end, appelée ” Root Catalog “.

Capture_2

 

Elle ne doit pas être supprimée. Sous la catégorie racine, vous devez insérer toutes les autres catégories selon la hiérarchie souhaitée. Voici un simple JSON à envoyer au point de terminaison pour insérer une catégorie : “/rest/V1/categories” :

Elle ne doit pas être supprimée. Sous la catégorie racine, vous devez insérer toutes les autres catégories selon la hiérarchie souhaitée. Voici un simple JSON à envoyer au point de terminaison pour insérer une catégorie : "/rest/V1/categories" :

Capture_10

Point 2 :

Dans Magento, les attributs de produit sont organisés et associés à un AttributeSet. Il est possible de créer plusieurs attributs de produit personnalisés et de les affecter à un AttributeSet. Un attribut de produit ne peut appartenir qu’à un ensemble d’attributs. Voici un JSON simple pour le point de terminaison “/rest/V1/products/attribute-sets” pour créer un Attribute Set :

{"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"}

Le paramètre nommé “Skeletonid” indique la création de l’ensemble d’attributs sur l’ensemble d’attributs par défaut qui, dans Magento, a toujours un id = 4.

Capture_4

 

Point 3:

Magento est livré avec certains attributs standards mais il est possible d’ajouter des attributs de produits personnalisés pour qualifier les produits. Nous devons le faire si les combinaisons de produits qui seront créées pour les produits sont basées sur des attributs non présents dans Magento. Voici un simple JSON à envoyer au end-point “/rest/V1/products/attributes” pour créer un attribut de produit personnalisé :

{"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}}
 

Pour utiliser les options des attributs dans une combinaison de produits, l’attribut doit avoir les caractéristiques suivantes :

La “portée” doit être définie sur “globale” ;
L’attribut doit être “visible” ;
L’attribut doit être de type “défini par l’utilisateur” ;
L’attribut doit utiliser un certain nombre d’options (comme les attributs “dropdown” et “multiselect”).

L’exemple de json permettant d’affecter l’attribut Custom Product Attribute à l’Attributeset et au groupe Attribute est présenté ci-dessous. Le point de terminaison est “/rest/V1/produits/attribute-sets/attributes” :

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

Capture_5
Point 4 :

Pour chaque Attribut créé, nous devons assigner les listes de valeurs des Options relatives en utilisant le endpoint “/rest/V1/products/attributes//options” avec un json comme le suivant :

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

Point 5 :

Magento 2 CE permet de créer au moins 6 types de produits : Simple, Configurable, Groupé, Virtuel, Bundle et Downlodable. En général, une boutique Magento 2 doit avoir des Produits Configurables (Parent) avec plusieurs Produits Simples (Enfant) associés en un nombre égal à toutes les combinaisons possibles pour les Attributs Options Valeurs associés.

Le produit configurable sera la seule entité visible dans le catalogue de produits de la boutique. Ainsi, les produits simples ne seront affichés que dans les pages de détail chaque fois que les clients choisiront les options disponibles.
Capture_11

Pour créer un produit de type Configurable, vous devez utiliser le endpoint “/rest/V1/produits” avec la méthode “POST”. Ci-dessous un exemple de json pour l’insertion complète d’un produit configurable avec prix, stock (stock), images, descriptions, attributs :

{"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 .... ","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
\t\t

Scarpa bassa in pelle spazzolata con inserti elasticizzati su linguetta.<\/span><\/p>\r\n\t\t

Ricamo di perline frontale .<\/span><\/p>\r\n\t\t

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”}]}}
Point 6 :

L’étape suivante pour créer un produit Simple ou Enfant, qui est la variante unique (combinaison) du produit 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"}]}}

Pour le produit simple, la visibilité est fixée à “1” (= non visible individuellement) parce que seul le produit configurable doit être visible dans le catalogue et dans les recherches, tandis que le produit simple sera affiché sur la page de détail en choisissant une combinaison relative.
Capture_6
Capture_12

 

Point 7 :
Il faut maintenant attribuer au produit configurable les attributs et les options relatives à utiliser pour les combinaisons. L’assignation de ces options au produit configurable correspond à la valeur de l’option “Options des produits configurables”. Cela est possible en utilisant le endpoint “/rest/V1/configurable-products/{sku}/options”, et le JSON suivant, dérivé d’une méthode GET (“rest/V1/products/:sku”) pour un seul produit :

{"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 ces options ne sont pas attribuées, lorsque nous essayons de lier un produit simple à un produit configurable dans le système Magento, l’exception “Configurable” sera levée.

Option pour l’attribut Couleur

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

Options pour l’attribut “CALZ. FEMME 34-42 AVEC ½ ” :

{"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}}

Toutes les options sont affectées au Configurable. Toutes les options doivent être incluses dans un seul json, sinon l’erreur “Something went wrong while saving the option” est levée, ce qui correspond à la violation de la contrainte de clé primaire.
Capture_9

 

Point 8 :

Nous devons également attribuer les options des attributs configurables au produit simple, s’il s’agit d’une combinaison d’un produit configurable, en utilisant “/rest/V1/configurable-products/{sku}/options”. Pour le produit simple, nous devons attribuer une seule valeur d’option pour chaque attribut :

Option pour l’attribut de couleur :

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

Capture_8

Option pour l’attribut Taille :

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

Point 9 :
La dernière étape consiste à associer le produit simple au configurable. Via le endpoint “/ rest / V1 / configurable-products / {sku} / child” et l’exemple json suivant :

{   "childSku": "000042.032-36" }

Capture_7

Backup and Security of Magento 2 e-commerce

Avant de procéder à un téléchargement complet de produits ou d’autres données, il est important de faire une sauvegarde complète de la base de données MySQL de Magento et des fichiers Magento situés sur l’espace FTP.
Tout d’abord, il est nécessaire de configurer MySQL pour permettre les connexions à distance (cela doit être autorisé par votre fournisseur d’hébergement), puis vous devez localiser le fichier de configuration MySQL où, dans une directive spécifique, vous devez indiquer l’adresse IP à partir de laquelle vous devez vous connecter :

bind-address = 192.168.0.97

Accédez ensuite au serveur MySQL en utilisant les informations d’identification root et exécutez le script suivant :

GRANT ALL ON .* TO @ IDENTIFIED BY '';

Par exemple :

GRANT ALL ON magento2.* TO root@192.168.0.200 IDENTIFIED BY 'mypswd';

Pour effectuer les procédures de sauvegarde de Magento e-commerce, nous utiliserons Iperius Backup.

Dans l’image ci-dessous, vous pouvez voir la configuration simple pour télécharger automatiquement le site via FTP et pour effectuer une sauvegarde MySQL (dump).
Capture_3

Pour plus d’informations, consultez le tutoriel approprié : Sauvegarde de MySQL avec Iperius

Il est indispensable d’effectuer une sauvegarde complète de tous les fichiers d’installation de Magento 2 CE. Pour ce faire, vous devez configurer une nouvelle opération de sauvegarde sur Iperius où les éléments sources sont les fichiers Magento situés sur l’espace web, accessibles via FTP :

Capture_13

 

Pour plus d’informations, consultez le tutoriel approprié : Téléchargement automatique de sites web avec Iperius

Cliquez ici pour télécharger la dernière version d’Iperius Backup

Logiciel de gestion de magasins et de commerce électronique
L’importation de listes de produits dans un e-commerce est une opération de grande importance si vous disposez d’un logiciel de gestion de magasin qui gère beaucoup de données. En effet, l’une des meilleures façons pour une boutique d’élargir son offre et sa clientèle est de vendre des produits par le biais d’un système de commerce électronique Magento. Les magasins et les entreprises rencontrent souvent des difficultés pour intégrer leur logiciel de gestion à une stratégie de commerce électronique efficace. Pour simplifier ce processus, il existe des solutions complètes qui permettent d’importer automatiquement des listes de produits dans un système de commerce électronique Magento, comme le logiciel de gestion pour magasins Etos : https://www.etosweb.com/negozio-online/.

(Anglais, Italien, Espagnol, Portugais - du Brésil)



Magento 2 – Comment ajouter des produits dans Magento à l’aide de l’API REST et du C #.
Iperius Backup France
*****************************************

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

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