{"id":1315,"date":"2016-03-18T13:30:04","date_gmt":"2016-03-18T11:30:04","guid":{"rendered":"http:\/\/www.h-hennes.fr\/blog\/?p=1315"},"modified":"2016-03-18T13:30:04","modified_gmt":"2016-03-18T11:30:04","slug":"prestashop-imports-des-clients-avec-le-webservice","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2016\/03\/18\/prestashop-imports-des-clients-avec-le-webservice\/","title":{"rendered":"Prestashop : Imports des clients avec le webservice"},"content":{"rendered":"<p>Apr\u00e8s la <a href=\"https:\/\/www.h-hennes.fr\/blog\/2016\/03\/12\/prestashop-mise-en-place-webservices\/\">mise en place de la structure globale<\/a> pour utiliser les webservices, nous allons \u00e0 pr\u00e9sent importer les clients.<\/p>\n<p>La structure du fichier sera la suivante.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1317\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2016\/03\/structure-csv.png\" alt=\"structure-csv\" width=\"559\" height=\"87\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2016\/03\/structure-csv.png 559w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2016\/03\/structure-csv-300x47.png 300w\" sizes=\"auto, (max-width: 559px) 100vw, 559px\" \/><\/p>\n<p>L&#8217;email client \u00e9tant la cl\u00e9 unique.<\/p>\n<p>Pour g\u00e9rer l&rsquo;import nous allons cr\u00e9er une classe sp\u00e9cifique qui va h\u00e9riter de la classe <strong>HhPrestashopWebservice<\/strong><br \/>\nCelle-ci permettra les op\u00e9rations basiques : <strong>Ajouter, modifier, supprimer<\/strong> un utilisateur prestashop via le webservice.<\/p>\n<p>Voici son code comment\u00e9 :<\/p>\n<pre lang=\"php\" escaped=\"true\"> \/**\r\n\u00a0* Gestion webservice des clients\r\n\u00a0*\r\n\u00a0* @author hhennes &lt;contact@h-hennes.fr&gt;\r\n\u00a0*\/\r\nclass HhCustomerWs extends HhPrestashopWebservice {\r\n\r\n\u00a0\u00a0\u00a0 protected $_resource = 'customers';\r\n\r\n\u00a0\u00a0\u00a0 \/**\r\n\u00a0\u00a0\u00a0\u00a0 * Cr\u00e9ation d'un client via le webservice\r\n\u00a0\u00a0\u00a0\u00a0 * @param array $datas : donn\u00e9es du client\r\n\u00a0\u00a0\u00a0\u00a0 *\/\r\n\u00a0\u00a0\u00a0 public function createCustomer($datas) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $schema = $this-&gt;getEmptyObject();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $customerAttributes = $schema-&gt;children()-&gt;children();\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Parcours des attributs du client, si une data existe on l'associe\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 foreach ($customerAttributes as $attribute =&gt; $values) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (array_key_exists($attribute, $datas))\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $schema-&gt;children()-&gt;children()-&gt;{$attribute} = $datas[$attribute];\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Si le champ est n\u00e9cessaire et qu'il n'est pas associ\u00e9 cela ne fonctionnera pas, on envoie une exception\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if ($schema-&gt;children()-&gt;children()-&gt;{$attribute}-&gt;attributes()-&gt;required &amp;&amp; !array_key_exists($attribute, $datas)) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 throw new PrestaShopWebserviceException('Erreur attribut obligatoire ' . $attribute . ' manquant !');\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Si on veut ajouter des donn\u00e9es commune ou statiques on peut les ajouter ici\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $customerAttributes-&gt;note = 'Client add with webservice';\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $customerAttributes-&gt;active = 1;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $customerAttributes-&gt;id_default_group = 3;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Enregistrement du nouveau client\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $options = array(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'resource' =&gt; $this-&gt;_resource,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'postXml' =&gt; $schema-&gt;asXML(),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 );\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $xml = $this-&gt;add($options);\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0 \/**\r\n\u00a0\u00a0\u00a0\u00a0 * Mise \u00e0 jour d'un client existant via le webservice\r\n\u00a0\u00a0\u00a0\u00a0 * @param int $id identifiant du client\r\n\u00a0\u00a0\u00a0\u00a0 * @param array $datas donn\u00e9es du client\r\n\u00a0\u00a0\u00a0\u00a0 *\/\r\n\u00a0\u00a0\u00a0 public function updateCustomer($id, $datas) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $options = array(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'resource' =&gt; $this-&gt;_resource,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'id' =&gt; $id\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 );\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $responseXml = $this-&gt;get($options);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $customerXml = $responseXml-&gt;children()-&gt;children();\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $hasDataChange = false;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 foreach ($datas as $key =&gt; $value) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if ($customerXml-&gt;{$key} &amp;&amp; $customerXml-&gt;{$key} != $value) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $hasDataChange = true;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $customerXml-&gt;{$key} = $value;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/On sauvegarde uniquement si il y'a eut des changements\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if ( $hasDataChange ){\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $options = array(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'resource' =&gt; $this-&gt;_resource,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'id' =&gt; $id,\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'putXml' =&gt; $responseXml-&gt;asXML(),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 );\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $this-&gt;edit($options);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\r\n\u00a0\u00a0\u00a0 \/**\r\n\u00a0\u00a0\u00a0\u00a0 * Suppression d'un client\r\n\u00a0\u00a0\u00a0\u00a0 * @param string $email email du client a supprimer\r\n\u00a0\u00a0\u00a0\u00a0 * @throws PrestaShopWebserviceException\r\n\u00a0\u00a0\u00a0\u00a0 *\/\r\n\u00a0\u00a0\u00a0 public function deleteCustomer($email){\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if ( $idCustomer = $this-&gt;getObjectId($email,'email')) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $this-&gt;deleteObject($this-&gt;_resource,$idCustomer);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 else {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 throw new PrestaShopWebserviceException('Impossible de supprimer le client '.$email.' n\\'existe pas');\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\r\n}\r\n<\/pre>\n<p>A partir de cette classe, et de la structure pr\u00e9c\u00e9dentes vous pouvez \u00e0 pr\u00e9sent g\u00e9rer vos clients en quelques minutes via le webservice.<\/p>\n<p>Voici un exemple de script :<\/p>\n<pre lang=\"php\" escaped=\"true\"> &lt;?php \r\n\/\/Inclusion de l'autoload composer\r\ninclude_once 'vendor\/autoload.php';\r\n\r\n\/\/Identifiants d'acc\u00e8s au webservice\r\n$wsUrl = 'http:\/\/www.yourshop.com';\r\n$wsAuthKey = 'yourKey';\r\n\r\n\/\/Initialisation du webservice avec la classe de gestion des clients\r\n$ws = new HhCustomerWs($wsUrl,$wsAuthKey, false);\r\n\r\n\/\/Instanciation de la classe de r\u00e9cup\u00e9ration des donn\u00e9es csv\r\n$csv = new HhWsCsvData();\r\n\r\n\/\/R\u00e9cup\u00e9ration et traitement des donn\u00e9es\r\n$customerDatas = $csv-&gt;getDatas(dirname(__FILE__) . '\/files\/imports\/', 'customers');\r\n\r\n\/\/Traitement des clients\r\nforeach ($customerDatas as $customerData) {\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 \/\/Suppression des clients\r\n\u00a0\u00a0\u00a0 if ($customerData['toDelete'] == 1) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 try {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 echo 'Suppression du client '.$customerData['email'].'&lt;br \/&gt;';\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $ws-&gt;deleteCustomer($customerData['email']);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } catch (PrestaShopWebserviceException $e) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 echo $e-&gt;getMessage();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 \/\/Gestion des ajouts et modifications\r\n\u00a0\u00a0\u00a0 } else {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/On v\u00e9rifie si le client existe via son email\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if ($customerId = $ws-&gt;getObjectId($customerData['email'], 'email')) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 echo 'Maj du client ' . $customerData['email'] . ' - id prestashop ' . $customerId . '&lt;br \/&gt;';\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 try {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $ws-&gt;updateCustomer($customerId, $customerData);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } catch (PrestaShopWebserviceException $e) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 echo $e-&gt;getMessage();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } else {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 echo 'Creation du client' . $customerData['email'] . '&lt;br \/&gt;';\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 try {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $ws-&gt;createCustomer($customerData);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } catch (PrestaShopWebserviceException $e) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 echo $e-&gt;getMessage();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\r\n} \r\n<\/pre>\n<p>Notre premi\u00e8re \u00e9tape d&rsquo;import des clients est \u00e0 pr\u00e9sent fonctionnelle \ud83d\ude42<br \/>\nNous verrons lors de la prochaine \u00e9tape comment importer les donn\u00e9es des adresses des clients.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apr\u00e8s la mise en place de la structure globale pour utiliser les webservices, nous allons \u00e0 pr\u00e9sent importer les clients. La structure du fichier sera la suivante. L&#8217;email client \u00e9tant la cl\u00e9 unique. Pour g\u00e9rer l&rsquo;import nous allons cr\u00e9er une classe sp\u00e9cifique qui va h\u00e9riter de la classe HhPrestashopWebservice Celle-ci permettra les op\u00e9rations basiques : [&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":[104,426],"class_list":["post-1315","post","type-post","status-publish","format-standard","hentry","category-prestashop-2","tag-prestashop","tag-webservice"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1315","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=1315"}],"version-history":[{"count":1,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1315\/revisions"}],"predecessor-version":[{"id":1318,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1315\/revisions\/1318"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=1315"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=1315"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=1315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}