Etude de cas : Un webservice de regroupement produit simple/produit configurable dans Magento
Par Grégoire Genestier le 27 septembre 2010Magento propose, dès la version communautaire, une API Webservice SOAP et XML-RPC permettant d’échanger simplement des informations avec la base de données. Il est donc possible, via une série de méthodes prédéfinies (http://www.magentocommerce.com/support/magento_core_api), de récupérer des informations, d’en mettre à jour, d’en envoyer ou d’en supprimer de la base de données, sans avoir à intervenir dans le code ou dans l’interface d’administration du site Ecommerce.
Cela est très pratique, notamment, pour insérer de nouveaux produits, en mettre à jour les données, mettre à jour ses stocks, créer des expéditions, récupérer des données clients ou commandes, etc…
Néanmoins, les méthodes présentes par défaut dans l’API Magento ne permettent pas de tout faire, et leur utilisation, dans une démarche organisationnelle d’une société, connaît ainsi certaines limites.
Ainsi, concernant le catalogue produits, il est possible de créer de nouveaux produits, si tant est que l’on reste dans le cadre de produits vendus de manière directe (ce que l’on appelle dans Magento des « produits simples »).
Magento comporte en effet de nombreux types de produits, permettant au marchand d’organiser de manière très souple son catalogue produits :
- Produits simples
- Produits configurables
- Produits groupés
- Produits téléchargeables
- Produits « Bundles »
- Produits virtuels
Grâce aux produits « configurables », le marchand est donc capable de proposer sur son site une unique fiche produit pour un article déclinable en plusieurs combinaisons.
C’est typiquement le cas d’un t-shirt disponible en plusieurs tailles et plusieurs coloris.
Prenons un exemple concret, pour un t-shirt disponible :
- En tailles L, XL et XXL
- En coloris Rouge, Jaune et violet
Du point de vue logistique, le marchand possède un stock de produits relatif à chaque combinaison de valeurs, et donc à chaque référence produit distincte. Il a donc un stock donné pour son t-shirt Rouge taille L, un stock pour le Rouge taille XL, un stock pour le Rouge taille XXL, un stock pour le Jaune taille L, etc…
Dans Magento, pour qu’un produit ait un stock spécifique, il doit avoir une référence spécifique, et doit être un « produit simple ».
On aura donc 6 produits simples dans Magento :
- Rouge / taille L
- Rouge / taille XL
- Rouge / taille XXL
- Jaune / taille L
- Jaune / taille XL
- Jaune / taille XXL
Le marchand ne souhaite pas afficher chaque combinaison de valeurs sur le site (ce qui reviendrait dans notre cas à afficher 6 fiches produits différentes sur le site, pour en fait un même produit, pour lequel seules la taille et la couleur changent…).
Il va donc créer un produit dit « configurable » qui sera le seul affiché sur le site, et qui présentera deux listes déroulantes : l’une pour choisir la taille et l’autre pour choisir la couleur. Pour cela, il crée son produit configurable en BackOffice de Magento, et y rattache les 6 produits simples correspondant aux 6 déclinaisons possibles du produit.

Revenons-en à notre API :
Il est possible, via l’API Magento, de créer ces types de produits, à savoir les produits simples et le produit configurable. Ce qu’il n’est pas possible de faire, c’est de regrouper les produits simples au sein du produit configurable, de sorte que l’on ne peut pas mettre en place (avec l’API standard) des scripts automatiques entre un ERP et Magento qui s’affranchiraient de toute manipulation sur le BackOffice pour regrouper les produits.
Dans le cadre d’un projet pour l’un de nos clients, nous avons ainsi créé une nouvelle méthode que nous avons intégrée à l’API Magento, permettant de faire ce regroupement de produits simples et configurables.
En voici les spécifications :
Objectif
L’objectif est de créer un nouvel outil Webservice permettant de regrouper facilement des produits simples au sein d’un produit configurable. Cette fonctionnalité n’existe pas en standard sur Magento 1.4.0.1.
Description technique
Pré-requis
Pour que la méthode webservice puisse être appelée, les pré-requis suivants doivent être respectés :
- Le produit configurable doit déjà exister (mais sans avoir obligatoirement de produit simple qui lui est relié), dont l’attribut de regroupement est initialisé ou non.
- Le(s) produit(s) simple(s) que l’on souhaite rattacher au produit configurable doi(ven)t déjà exister
Paramètres du webservice
Les paramètres à passer à la nouvelle méthode webservice seront les suivants :
- SKU du produit configurable existant
- SKU du produit simple existant
- Prix spécifique à appliquer (optionnel)
- Règle d’application du prix spécifique (optionnel mais obligatoire si un prix spécifique doit être appliqué)
- « POURCENT » (pourcentage du prix de base)
- « EURO » (nouveau montant en euros)
- Vide si aucun prix n’a été saisi précédemment
- Attribut configurable
Format du webservice
Le webservice suivra le format ci-dessous :
Nom de méthode : catalog_product.assignConfigurable
Retour : Codes de retour suivant résultat
Arguments :
- Chaîne de caractères : SKU Produit configurable
- Chaîne de caractères : SKU Produit simple
- Valeur décimale : Prix à appliquer
- Chaîne de caractères : Valeur prédéfinie parmi « POURCENT » ou « EURO »
- Attribut configurable
Exemples d’appels
Avec prix applicable directement
$proxy-> catalogProductAssignConfigurable(‘sessionId’, ‘skuConfigurable’, ‘skuSimple’, 12.90, ‘EURO’, ‘attribut’);
Avec prix applicable en pourcentage
$proxy-> catalogProductAssignConfigurable(‘sessionId’, ‘skuConfigurable’, ‘skuSimple’, 20, ‘POURCENT’, ‘attribut’);
Sans prix spécifique
$proxy-> catalogProductAssignConfigurable(‘sessionId’, ‘skuConfigurable’, ‘skuSimple’,,, ‘attribut’);
Codes retour
Suivant le résultat de l’action de rattachement du produit simple au produit configurable, plusieurs codes peuvent être retournés :
| Résultat | Code Retour | Retour du Webservice |
| Succès | 1 | success |
| Produit configurable non trouvé | 2 | SKU du produit configurable |
| Produit simple non trouvé | 3 | SKU du produit simple |
| Règle d’application du prix non reconnue | 4 | ‘POURCENT-EURO-missing’ |
| Echec pour raison inconnue | 0 | unknown reason |
| Attribut configurable non affecté au produit simple | 5 | Super attribute [Code de l'attribut] not in simple product [SKU du produit simple] |
| Un autre attribut configurable est déjà affecté au produit Configurable | 6 | Super attribute [Code de l'attribut] already affected to [SKU du produit configurable] |
| Un autre produit simple est déjà affecté au produit configurable avec les mêmes valeurs d’attributs | 7 | Product([SKU du produit simple similaire]) with this combination of attributes already associated to configurable. |
Spécificités
Le webservice sera développé pour la V2 de l’API Magento, sur la version 1.4.0.1 de Magento. La nouvelle méthode Webservice sera donc intégrée au document WSDL de l’API :
http://www.nomdusite.com/index.php/api/v2_soap/index?wsdl
Les produits configurables initialisés sont créés via l’API Magento et l’(les)attribut(s) de regroupement n’est (ne sont) pas forcément initialisé(s). Le webservice devra donc détecter cela et, si l’attribut n’est effectivement pas initialisé, l’initialiser avec l’(les)attribut(s) donné(s) en paramètre(s). Si le produit configurable est déjà initialisé avec un autre attribut, le webservice retournera une erreur (voir tableau ci-dessus – code retour 6) et l’appel webservice sera ignoré (le webservice ne modifie pas un attribut de regroupement déjà initialisé, il initialise seulement l’attribut au niveau du produit configurable s’il ne l’est pas déjà.
Le webservice vérifie déjà si les attributs de regroupement sont initialisés. Si ce n’est pas le cas, il les initialise avec les attributs passés en paramètre. Ensuite, il lie le produit simple au produit configurable.
Ce type de méthode en webservice peut être également utile dans le cadre des autres produits Magento, notamment les « produits groupés » ou les « produits Bundle ».
Toutes les principales fonctions existent dans Magento. Par exemple, la fonction d’assignation d’un produit simple à un produit configurable est la fonction suivante :
$productConfigurable->setConfigurableAttributesData($dataAttributes)
Il a donc fallu construire le tableau de « super-attribut » $dataAttributes et créer une méthode dans l’API Magento.
Le module est compatible avec Magento 1.4.






