Prestashop : Créer ou modifier un produit via l’api

Cet article est assez ancien, malgré toute l'attention que j' apporte à mes contenus il est possible que celui-ci ne soit plus d'actualité.
N'hésitez pas à me le signaler si nécessaire via le formulaire de contact.

J’ai récemment du tester le bon fonctionnement d’une api produit et j’ai un peu galérer à trouver un script fonctionnel pour créer et modifier un produit via l’api Prestashop.

Si d’autres personnes rencontrent le même problème voici des exemples basiques mais fonctionnels de création et de mise à jour de produits via l’api Prestashop

Le code a été testé sur une version 1.7.6 mais devrait fonctionner sur toutes les versions 1.7 , voir même les versions 1.6 vu que l’api a assez peu bougée.

Les exemples utilisent la librairie du webservice prestashop ( cf. https://devdocs.prestashop.com/1.7/development/webservice/tutorials/prestashop-webservice-lib/ )

Pour créer un produit

try {
        //Création d'un produit avec uniquement les champs requis
        $webService = new PrestaShopWebservice($url, $key, $debug);
 
        $xmlResponse = $webService->get(['url' => $url . '/api/products?schema=blank']);
        $productXML = $xmlResponse->product[0]; //Récupération du schéma de création
        $productXML->name->language[0] = "test de produit Langue 1";
        $productXML->name->language[1] = "test de produit FR";
        $productXML->description->language[0] = "test de description langue 1";
        $productXML->description->language[1] = "test de description FR";
        $productXML->price = "1000.000";
        $productXML->id_category_default = 2;
        $productXML->state = 1;//Cette valeur doit être à 1 pour que le produit soit visible dans les listings admin
 
        //On ajoute également dans une catégorie
        //La première catégorie est déjà présente dans le schéma
        $productXML->associations->categories->category[0]->id = 6;
 
        //Si on veut en ajouter d'autres il faut procéder différement en rajoutant des noeuds
        $categoriesNode = $productXML->associations->categories;
        $categoriesNode->addChild('category')->addChild('id',7);
        $categoriesNode->addChild('category')->addChild('id',8);
 
 
        //Envoi des informations au webservice
        $opt = ['resource' => 'products'];
        $opt['postXml'] = $xmlResponse->asXML();
        $return = $webService->add($opt);
        $id = $return->product->id;
        echo "Création du produit $id <br />";
 
    } catch ( PrestaShopWebserviceException $e){
        echo $e->getMessage();
    }

Pour modifier un produit :

 

try {
        //Mise à jour d'un produit
        $webService = new PrestaShopWebservice($url, $key, $debug);
 
        //identifiant du produit
        $idProduct = 22;
 
        //Mise à jour d'un produit
        $xmlResponse = $webService->get(['resource' => 'products', 'id' => $idProduct]);
 
        $updateProductXML = $xmlResponse->product[0]; //Récupération des infos produits
 
        //Changement des champs
        $updateProductXML->reference = "modified";
 
        //Supprimer ces noeuds pour mettre à jour sinon erreur 400
        unset($updateProductXML->manufacturer_name);
        unset($updateProductXML->position_in_category);
        unset($updateProductXML->quantity);
 
 
		//Envoi des infos
        $response = $webService->edit([
            'resource' => 'products',
            'id' => (int) $updateProductXML->id,
            'putXml' => $xmlResponse->asXML(),
        ]);
 
    } catch ( PrestaShopWebserviceException $e){
        echo $e->getMessage();
    }

7 réflexions sur “Prestashop : Créer ou modifier un produit via l’api”

  1. Merci pour cet article, ça dépanne. Les ressources pour PS 1.7 se font rare.

    Vous ne parlez pas des images, avez-vous trouver comment créer un produit avec des images ?

  2. Bonjour et merci pour ce super blog!

    Je rencontre un problème avec ce code quand le champ name ou bien description contient du html:

    par exemple avec: description = ‘bonjour & test’;

    cela retourne une erreur 404, alors que si j’écris juste « bonjour test » cela met à jour le produit correctement!

    Une idée du problème? J’ai essayé en ajoutant un noeud CDATA à la description mais cela ne fonctionne pas mieux, erreur 404 (pas 400, 404, vraiment étrange)

    merci 🙂

      1. Bonjour,
        J’ai essayé mais ça ne fonctionne pas mieux, même avec & cela bloque.
        Le seul moyen que j’ai trouvé est de faire un urlencode puis un urldecode dans un override de WebserviceRequest.php
        J’ai décrit le problème en détail sur https://stackoverflow.com/questions/67236478/prestashop-webservices-api-html-in-description-gives-an-error-404 , je me demande si ce n’est pas un bug dans la dernière version de Prestashop car l’erreur est un 404 « normal » de Presta, pas un 404 du Webservices (mais il passe bien par WebserviceRequest.php jusqu’au moment où il commence le processus d’update, je ne comprends pas à quel moment cela coince)

Répondre à Cryonos Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *