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(); } |
Muchas gracias por compartirlo, tienes un blog repleto de contenido de calidad.
Simplemente eres una maquina!
Muchas gracias 🙂
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 ?
Bonjour,
Concernant les images la documentation officielle est plutôt complète sur le sujet 😉
Cf. https://devdocs.prestashop.com/1.7/webservice/tutorials/advanced-use/image-management/
Cordialement,
Hervé
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 🙂
Bonjour,
Est-ce que vous avez essayé avec un htmlentities ?
Complété du CDATA ça devrait fonctionner je pense.
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)
Merci l’ami !