{"id":2252,"date":"2021-03-12T22:51:25","date_gmt":"2021-03-12T20:51:25","guid":{"rendered":"https:\/\/www.h-hennes.fr\/blog\/?p=2252"},"modified":"2022-02-14T09:54:58","modified_gmt":"2022-02-14T07:54:58","slug":"prestashop-gerer-les-images-produits-via-lapi","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2021\/03\/12\/prestashop-gerer-les-images-produits-via-lapi\/","title":{"rendered":"Prestashop : g\u00e9rer les images produits via l&rsquo;api"},"content":{"rendered":"\n<p>En compl\u00e9ments des informations d\u00e9j\u00e0 disponible sur la documentation d\u00e9veloppeur de prestashop sur la gestion globale des images : https:\/\/devdocs.prestashop.com\/1.7\/webservice\/tutorials\/advanced-use\/image-management\/<br>Cet article d\u00e9taille bri\u00e8vement la gestion des images des produits via l&rsquo;api sous Prestashop.<br><br>Les tests ont \u00e9t\u00e9 fait sur une version 1.7.6.x de prestashop mais l&rsquo;api ayant assez peu boug\u00e9 cela doit \u00eatre fonctionnel sans doute sur les versions 1.6 \u00e9galement.<br><br>Le point essentiel \u00e0 retenir dans les api \u00e9tant qu&rsquo;une url peut avoir un comportement diff\u00e9rent en fonction de la m\u00e9thode par laquelle elle est appell\u00e9e ( GET \/ POST \/ PUT )<br><br>Je pars du principe que les acc\u00e8s n\u00e9cessaire \u00e0 l&rsquo;api sont d\u00e9j\u00e0 d\u00e9finis, et la gestion de l&rsquo;api est effectu\u00e9e via la librairie propos\u00e9e par Prestashop en php ( cf. https:\/\/devdocs.prestashop.com\/1.7\/webservice\/tutorials\/prestashop-webservice-lib\/ )<br><br>Pour mon exemple d&rsquo;illustration je me sers d&rsquo;une version d\u00e9mo de prestahop avec les produits de base.<br>Dont l&rsquo;url sera http:\/\/www.prestashop.local\/tests\/1769\/<br>Et on va jouer avec l\u2019identifiant produit <strong>19<\/strong> , le \u00ab\u00a0mug personnalisable\u00a0\u00bb<br><br>Les appels webservice qui seront ex\u00e9cut\u00e9 via la lib Prestashop seront wrapp\u00e9s dans le code suivant<br>Et je rajoute \u00e9galement une fonction qui va permettre de simplifier les appels \u00e0 la librairie curl .<\/p>\n\n\n\n<pre escaped=\"true\" lang=\"php\">\n<?php\nini_set('display_errors', 'on');\nrequire_once('.\/PSWebServiceLibrary.php');\n\n#Mettre ici les acc\u00e8s api \n$url = 'http:\/\/www.prestashop.local\/tests\/1769\/';\n$key = 'cleAPI'; \n\n\ntry {\n    \n    $webService = new PrestaShopWebservice($url, $key, false);\n    \/\/Les codes via l'api seront \u00e0 placer ici\n    \n} catch (PrestaShopWebserviceException $e) {\n  \n    echo $e-&gt;getTraceAsString();\n    echo $e-&gt;getMessage();\n   \n}\n\n\/**\n * Fonction d'appel d'une url via curl\n * @param $apiurl url de l'api a appeller avec curl\n * @return CurlHandle|false|resource\n *\/\nfunction initCurl($apiurl)\n{\n    global $key, $url;\n    \/\/echo $url .'api\/'.$apiurl;\n    $ch = curl_init();\n    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);\n    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);\n    curl_setopt($ch, CURLOPT_VERBOSE, false);\n    curl_setopt($ch, CURLOPT_USERPWD, $key . ':');\n    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n    curl_setopt($ch, CURLOPT_URL, $url .'api\/'. $apiurl);\n\n    return $ch;\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Visualiser la liste images d'un produits<\/h3>\n\n\n\n<p>Il est possible de visualiser directement les informations en acc\u00e9dant \u00e0 l'url http:\/\/www.prestashop.local\/tests\/1769\/api\/images\/products\/<strong>19 <\/strong>( m\u00e9thode GET )<br>ou via un appel du webservice :<\/p>\n\n\n\n<pre escaped=\"true\" lang=\"php\">$webService = new PrestaShopWebservice($url, $key, false);\n    $opt = array('resource' =&gt; 'images\/products'); \/\/Url d'appel\n    $opt['id'] = '19'; \/\/Identifiant du produit\n    $xml = $webService-&gt;get($opt);\n    echo $xml-&gt;asXML();\n<\/pre>\n\n\n\n<p>On obtiens la r\u00e9ponse suivante :<\/p>\n\n\n\n<pre lang=\"xml\" escaped=\"true\">\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<prestashop xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\">\n<image id=\"19\">\n<declination id=\"22\" xlink:href=\"http:\/\/www.prestashop.local\/tests\/1769\/api\/images\/products\/19\/22\"\/>\n<\/image>\n<\/prestashop>\n<\/pre>\n\n\n\n<p>Ce qui nous permets de savoir que l'identifiant de l'image de ce produit est le <strong>22<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Visualiser une image produit<\/h3>\n\n\n\n<p>A partir de l'identifiant r\u00e9cup\u00e9r\u00e9 plus haut il est maintenant possible visualiser l'image du produit directement dans le navigateur en chargeant l'url :<br>http:\/\/www.prestashop.local\/tests\/1769\/api\/images\/products\/19\/22<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/03\/image.png\"><img loading=\"lazy\" decoding=\"async\" width=\"503\" height=\"573\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/03\/image.png\" alt=\"\" class=\"wp-image-2253\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/03\/image.png 503w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/03\/image-263x300.png 263w\" sizes=\"auto, (max-width: 503px) 100vw, 503px\" \/><\/a><\/figure>\n\n\n\n<p>Ou alors de l'enregistrer dans un fichier via un appel du code suivant ( pas besoin d'appel api )<\/p>\n\n\n\n<pre escaped=\"true\" lang=\"php\">file_put_contents(\n        'img-produit-19-22.jpg',\n        file_get_contents('http:\/\/apiKey@www.prestashop.local\/tests\/1769\/api\/images\/products\/19\/22')\n    );\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ajouter une image \u00e0 un produit<\/h3>\n\n\n\n<p>L'appel doit se faire via un appel curl ou via un formulaire html sur l'url en <strong>POST<\/strong> sur l'url http:\/\/www.prestashop.local\/tests\/1769\/api\/images\/products\/<strong>19<\/strong> <br>( qui est la m\u00eame que pour avoir la liste des image du produit )<\/p>\n\n\n\n<pre escaped=\"true\" lang=\"php\">\/**\n * Ajout d'une image\n *\/\n$ch = initCurl('images\/products\/19');\ncurl_setopt($ch, CURLOPT_POST, true);\ncurl_setopt(\n    $ch,\n    CURLOPT_POSTFIELDS,\n    array(\n        'image' =&gt; new CurlFile(\n            '\/chemin\/absolu\/ver\/image.png'\n        )\n    )\n);\n<\/pre>\n\n\n\n<p>Dans la r\u00e9ponse api on re\u00e7oit les informations de la nouvelle image envoy\u00e9e ( son identifiant notamment), qui est <strong>24<\/strong><\/p>\n\n\n\n<pre lang=\"xml\" escaped=\"true\">\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<prestashop xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\">\n<image>\n<id><![CDATA[24]]><\/id>\n<id_product><![CDATA[19]]><\/id_product>\n<position><![CDATA[2]]><\/position>\n<cover><\/cover>\n<legend><language id=\"1\" xlink:href=\"http:\/\/www.prestashop.local\/tests\/1769\/api\/languages\/1\"><![CDATA[]]><\/language><language id=\"2\" xlink:href=\"http:\/\/www.prestashop.local\/tests\/1769\/api\/languages\/2\"><![CDATA[]]><\/language><\/legend>\n<\/image>\n<content encode=\"base64\"><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAIgAAAB\/CAYAAAA0LYrzAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFl0lEQVR42u3dQYscVRQF4HNuDRIUAtmpqFnrRrNxJbgV8nMF\/QMuReJO3KggRFxpQBRm6h4X91V3O+DtIj1d0wPnI6SHMNP1qurUe6+zOENJgtn\/iPsegF02B8RaDoi1HBBrOSDWckCsdXXfAzjFi1ff49k3n9z3MI767rMXePb44\/sexmvxDGItB8RaDoi1HBBrOSDWckCs5YBYywGxlgNiLQfEWg6ItRwQazkg1nJArOWAWMsBsZYDYi0HxFoOiLUcEGs5INZyQKzlgFjLAbGWA2ItB8RaDoi1HBBrOSDWckCs5YBYa1VApBkYZZnz1iPUrdcUhMSD6e4ka\/gSUH8g5HIyGw4kd8eu13VWBCRBTgDrXafDA2qbuAgAOF6DIAIUNjv+aYMXGALB+loANS67zj+B78NY14xJEAlqxpqAHh2hEPVGAkSMN01IBDgd+\/HTMaEReS4npPp3BM9\/\/FOHL0JJiDdAaIS9rue8wfC53OKDa5ZY7t3xgB6toKKAJBFM\/PLXr8CEkURhjgR5\/rNMEROIxAwgQNbXL\/\/+\/ezHPhVDePnPb3jyxhMkZkQGwBtMmjCDQJx3saz7FxCuayVI4kqB9958H2vuHI9VcQv15AqB+CoACiEiqfUL2YknCIzZiwSznsIgkaFtl\/HXOgEg5rpeBKHYTcV1cue+hlnbIEUAEDj2QvPz6zG79LPI8TlGwrJ+LbusRM1WWxBRsxQ5xgJgqi1X3DyAJSaBnAREYHkWKdWebtUzfJqYDrYG4+FS1NKjFbf\/6HfUEpIjFaxTCtX+aos9AAMp1fIJghxDJpAP4EO6prG7VtbFVl3TmANbBCRFgIFQ3btAYJeSFVbUYNbyggmAanmZc9mN6\/w3SbWxEgip5kuODy\/i5X\/Y5VxjVAS0bBIlYJo3WWFq1hdSACZAmbtpYU08VwQk\/vNG87gp4n4pPf85HnxyV2533LsY+jLWZdy5j8Sm8R4LATBeV17DBzBJ231yQKzlgFjLAbGWA2ItB8RaDoi1HBBrOSDWckCs5YBYywGxlgNiLQfEWg6ItRwQazkg1nJArOWAWMsBsZYDYi0HxFoOiLUcEGs5INZyQKzlgFjLAbGWA2ItB8RaDoi1VtVgHvZqTqPwggJiq34wVktOfT3qHC+\/O6aGu4x1jBvB6ubgFv1CB6pJrARWl5OsCEhUr+YMgKO8LqrBKK+2qaBCCkwhQIQATUuD0uU3yWhiFccoKyBZLU0xTxC3mMBHBdVoZgoEDttEjznekzpK7Cp1o+czWSV2ucFjrESQFUioaqjG2W02g52A8yisY9R9YV3TnBJbdAwFBSiRrHuXyDGedRfveIRHiZ2WVj6OrGy0e6lG5erZWmqtMY957ery1xlF1WAi952y4lIbff7x57wsxzFaqpce39wXEzfWF+ki8dPnP19Uke4Pr37E82+\/OPvxTxEAvvz0a3z0+MOLKtJdVU+35rtEICBAgadvfbBLXVVxc4siR6SipjomsNQ4MvHn9R9nP\/qplMQ7j97G00fvVjepAmQCCsw87L4\/90Cwu34Jrb5vx3tSMW4KD6YqBEgBW5TpK2plIfbFr8TYJT+AJYajzF9XtXcb5wQC0xZbuGUZObhm9cDfUZk\/EPtfB8LDXwcSNWVtoC7qeF1+HQix2fFPG\/wo868G3VEfuty08++yd2X+45opBCGguyrzr3Pc34jNbwlvvQaxxcJ2Z5b67bFXq78P\/0NiK3Hr2Gt\/yqzhgFjLAbGWA2ItB8RaDoi1HBBrOSDWckCs5YBYywGxlgNiLQfEWg6ItRwQazkg1nJArOWAWMsBsZYDYi0HxFoOiLUcEGs5INZyQKzlgFjLAbGWA2ItB8RaDoi1HBBrUdLl1\/TYvfEMYi0HxFoOiLUcEGs5INZyQKzlgFjrX4rX72r+\/ShiAAAAAElFTkSuQmCC]]><\/content>\n<\/prestashop>\n<\/pre>\n\n\n\n<p>Dans l'administration on peut \u00e9galement voir que l'image est bien affich\u00e9e<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/03\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"687\" height=\"320\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/03\/image-1.png\" alt=\"\" class=\"wp-image-2254\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/03\/image-1.png 687w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/03\/image-1-300x140.png 300w\" sizes=\"auto, (max-width: 687px) 100vw, 687px\" \/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Mettre \u00e0 jour une image produit<\/h3>\n\n\n\n<p>Lorsqu'on souhaite mettre \u00e0 jour une image produit l'url \u00e0 appeller est la m\u00eame que lorsque souhaite afficher l'image mais cette fois-ci avec la m\u00e9thode <strong>PUT<\/strong> <br>On va donc mettre \u00e0 jour l'image pr\u00e9c\u00e9dente<\/p>\n\n\n\n<pre escaped=\"true\" lang=\"php\">\/**\n * Mise \u00e0 jour d'une image existante\n * images\/products\/id_product\/id_image\n *\/\n$ch = initCurl('images\/products\/19\/24?ps_method=PUT');\ncurl_setopt($ch, CURLOPT_POST, true);\ncurl_setopt($ch, CURLOPT_POSTFIELDS, array(\n        'image' =&gt; new CurlFile('\/chemin\/absolu\/ver\/image.png')\n    )\n);\n$result = curl_exec($ch);\nprint_r($result);\ncurl_close($ch);\n<\/pre>\n\n\n\n<p>Je n'ai pas trouv\u00e9 d'utilit\u00e9 \u00e0 la r\u00e9ponse, en revanche on peut voir que l'image a bien \u00e9t\u00e9 mise \u00e0 jour :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/03\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"645\" height=\"368\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/03\/image-2.png\" alt=\"\" class=\"wp-image-2256\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/03\/image-2.png 645w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2021\/03\/image-2-300x171.png 300w\" sizes=\"auto, (max-width: 645px) 100vw, 645px\" \/><\/a><\/figure>\n\n\n\n<p>N'h\u00e9sitez pas \u00e0 remonter vos astuces, ou \u00e0 me signaler si vous avez fonctionn\u00e9 diff\u00e9remment \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En compl\u00e9ments des informations d\u00e9j\u00e0 disponible sur la documentation d\u00e9veloppeur de prestashop sur la gestion globale des images : https:\/\/devdocs.prestashop.com\/1.7\/webservice\/tutorials\/advanced-use\/image-management\/Cet article d\u00e9taille bri\u00e8vement la gestion des images des produits via l&rsquo;api sous Prestashop. Les tests ont \u00e9t\u00e9 fait sur une version 1.7.6.x de prestashop mais l&rsquo;api ayant assez peu boug\u00e9 cela doit \u00eatre fonctionnel sans [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[245],"tags":[516,566,104,423],"class_list":["post-2252","post","type-post","status-publish","format-standard","hentry","category-prestashop-2","tag-api","tag-images","tag-prestashop","tag-produits","prestashop-1-4","prestashop-1-6","prestashop-1-7","prestashop-1-7-4","prestashop-1-7-5","prestashop-1-7-6","prestashop-1-7-7","prestashop-1-7-8","prestashop-8-0"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/2252","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/comments?post=2252"}],"version-history":[{"count":5,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/2252\/revisions"}],"predecessor-version":[{"id":2380,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/2252\/revisions\/2380"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=2252"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=2252"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=2252"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}