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();
    }

10 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)

  3. Bonjour

    D’abord merci pour votre travail, il m’aide beaucoup actuellement.

    J’ai utilisé cet article
    https://www.h-hennes.fr/blog/2018/06/25/prestashop-ajouter-un-objet-dans-lapi/
    que vous avez écrit pour la création de BDD personnalisé dans mon PrestaShop.

    Depuis je ne travaille qu’avec le Webservice sur mon projet Presta.
    Seulement voilà, autant je n’ai aucune difficulté à effectué des PUT et des GET mais lorsque je POST et que je suis votre code en haut de cette page, j’obtiens constamment la même erreur :

    This call to PrestaShop Web Services failed and returned an HTTP status of 400. That means: Bad Request – (Code 123): Parameter « date » can’t be set to the object « ContentNew » – (Code 123): Parameter « month » can’t be set to the object « ContentNew » – (Code 123): Parameter « year » can’t be set to the object « ContentNew » – (Code 123): Parameter « content » can’t be set to the object « ContentNew ».

    Pourriez vous m’aider ?

  4. Hello,

    Merci pour ces examples.
    Serait-il possible d’avoir un example de mise à jour d’un produit avec des caractéristiques personnalisées ? J’arrive bien à les lire, mais impossible de les mettre à jour…
    Merci en tout cas pour toutes ces ressources.
    fabien

Laisser un commentaire

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