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 !
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 ?
Bonjour,
Je n’ai jamais rencontré ce soucis.
Attention car comme précisé dans la documentation officielle dans certains cas il faut penser à supprimer des informations dans l’envoi pour que cela fonctionne.
cf. https://devdocs.prestashop-project.org/8/webservice/tutorials/prestashop-webservice-lib/update-resource/
Cordialement,
Hervé
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