{"id":1804,"date":"2018-07-23T21:11:54","date_gmt":"2018-07-23T19:11:54","guid":{"rendered":"https:\/\/www.h-hennes.fr\/blog\/?p=1804"},"modified":"2018-07-23T21:11:54","modified_gmt":"2018-07-23T19:11:54","slug":"magento-creer-une-commande-via-lapi","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2018\/07\/23\/magento-creer-une-commande-via-lapi\/","title":{"rendered":"Magento : Cr\u00e9er une commande via l&rsquo;api"},"content":{"rendered":"<p>J&rsquo;ai r\u00e9cemment eut \u00e0 cr\u00e9er des commandes Magento via l&rsquo;api et j&rsquo;ai rencontr\u00e9 pas mal de difficult\u00e9s, j&rsquo;en profite pour condenser l&rsquo;ensemble du processus dans cet article \ud83d\ude42<\/p>\n<p>Voici un script qui permettra de cr\u00e9er une commande Magento \u00e0 partir de l&rsquo;api Soap de Magento ( \u00e0 la fois avec la version api V1 et api V2 )<br \/>\nCet exemple a \u00e9t\u00e9 r\u00e9alis\u00e9 sur un Magento 1.9.3.x de d\u00e9monstration utilisant les samples data Magento.<\/p>\n<p>N&rsquo;h\u00e9sitez pas \u00e0 consulter la documentation officielle des api, si des points ne sont pas assez clairs\u00a0 : <a href=\"https:\/\/devdocs.magento.com\/guides\/m1x\/api\/soap\/introduction.html\" target=\"_blank\" rel=\"noopener\">https:\/\/devdocs.magento.com\/guides\/m1x\/api\/soap\/introduction.html<\/a><\/p>\n<p>Le script part des postulats suivants :<\/p>\n<ul>\n<li>Passage de commande pour un client existant<\/li>\n<li>Avec une adresse de facturation par d\u00e9faut de renseign\u00e9e<\/li>\n<li>Les adresses de livraison et de facturation seront similaires.<\/li>\n<li>Un acc\u00e8s \u00e0 l&rsquo;api avec tous les acc\u00e8s n\u00e9cessaires existe sur le site magento de destination.<\/li>\n<\/ul>\n<p>Les actions effectu\u00e9es par le script sont les suivantes :<\/p>\n<ol>\n<li>Login \u00e0 l&rsquo;api<\/li>\n<li>R\u00e9cup\u00e9ration de l&rsquo;identifiant du\u00a0 client \u00e0 partir de son email<\/li>\n<li>R\u00e9cup\u00e9ration de l\u2019identifiant de l&rsquo;adresse de facturation\/livraison du client<\/li>\n<li>Cr\u00e9ation d&rsquo;un panier<\/li>\n<li>Assignation du client au panier<\/li>\n<li>Assignation des adresses du client au panier<\/li>\n<li>Ajout de produits au panier\n<ol>\n<li>Produit simple<\/li>\n<li>Produit configurable<\/li>\n<li>Produit group\u00e9<\/li>\n<li>Produit Bundle<\/li>\n<\/ol>\n<\/li>\n<li>R\u00e9cup\u00e9ration des modes de livraison disponibles pour le panier<\/li>\n<li>Assignation du mode de livraison du panier<\/li>\n<li>R\u00e9cup\u00e9ration des modes de paiement disponibles pour le panier<\/li>\n<li>Assignation du mode de paiement du panier<\/li>\n<li>Transformation panier en commande<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><a href=\"#apiV1\">Voir le script complet pour l&rsquo;api V1<\/a><br \/>\n<a href=\"#apiV2\">Voir le script complet pour l&rsquo;api V2<\/a><\/p>\n<p>Avant de vous montrer le script complet voici un focus sur les \u00e9l\u00e9ments \u00e0 comprendre<\/p>\n<p><strong>Ajout des produits au panier<\/strong><\/p>\n<p>En fonction du type de produit \u00e0 ajouter au panier , les informations \u00e0 envoyer ne seront pas les m\u00eames.<br \/>\nNous allons donc voir en d\u00e9tails comment ajouter les produits et r\u00e9cup\u00e9rer les informations pour le faire<\/p>\n<p><span style=\"text-decoration: underline;\">Produit simple :<\/span><br \/>\nL&rsquo;ajout est rapide peut se faire en ciblant le produit via son identifiant Magento ou son SKU<br \/>\nCeci fonctionne \u00e9galement pour les produits virtuels et t\u00e9l\u00e9chargeables.<\/p>\n<pre lang=\"php\" escaped=\"true\"> \/\/Ajout d'un produit simple ( fonctionne aussi pour virtuel et t\u00e9l\u00e9chargeable )\r\n\t$simpleProductData = array(\r\n\t\t'sku' =&gt; 'acj005', \/\/Sku du produit simple\r\n                \/\/'product_id' =&gt; 10 , Identifiant du produit en alternative\r\n\t\t'qty' =&gt; 2, \/\/Qt\u00e9 du produit simple\r\n\t);\r\n<\/pre>\n<p><span style=\"text-decoration: underline;\">Produit configurable :<\/span><br \/>\nEn compl\u00e9ment des informations du produit simple, il est n\u00e9cessaire d&rsquo;impl\u00e9menter le tableau \u00ab\u00a0super_attribute\u00a0\u00bb pour que l&rsquo;ajout se fasse correctement.<br \/>\nLes valeurs qui doivent \u00eatre renseign\u00e9es sont sous la forme<br \/>\n<em>AttributeID =&gt; OptionID<\/em><\/p>\n<p>Attention \u00e0 bien renseigner tous les attributs obligatoires pour que l&rsquo;ajout fonctionne.<\/p>\n<pre lang=\"php\" escaped=\"true\"> \/\/Ajout d'un produit configurable (ex sur d\u00e9mo magento bowery-chino-pants-546.html )\r\n\t$configurableProductData = array(\r\n\t\t'sku' =&gt; 'mpd003c' ,\/\/Sku produit \r\n\t\t'qty' =&gt; 1, \/\/Qt\u00e9 du produit \r\n\t\t'super_attribute' =&gt; array( \/\/Champ sp\u00e9cifique au produit configurable\r\n\t\t\t92 =&gt; 17, \/\/sous la forme attributeID =&gt; optionID\r\n\t\t\t180 =&gt; 67,\r\n\t\t),\r\n\t);\r\n<\/pre>\n<p>Il est possible de trouver ces informations directement sur le site en inspectant la source avec votre navigateur :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1807\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/07\/api-configurable-super-attribute.jpg\" alt=\"\" width=\"780\" height=\"389\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/07\/api-configurable-super-attribute.jpg 780w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/07\/api-configurable-super-attribute-300x150.jpg 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/07\/api-configurable-super-attribute-768x383.jpg 768w\" sizes=\"auto, (max-width: 780px) 100vw, 780px\" \/><\/p>\n<p>Les selects contiennent l&rsquo;identifiant du super attribute dans leur nom, et la valeur est stock\u00e9e dans l&rsquo;option.<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"text-decoration: underline;\">Produit Group\u00e9 :<\/span><br \/>\nEn compl\u00e9ment des informations du produit simple, il est n\u00e9cessaire d&rsquo;impl\u00e9menter le tableau \u00ab\u00a0super_group\u00a0\u00bb pour que l&rsquo;ajout se fasse correctement.<br \/>\nLes valeurs qui doivent \u00eatre renseign\u00e9es sont sous la forme<br \/>\n<em>SuperGroupId =&gt; Qty<\/em><\/p>\n<p>Attention \u00e0 bien renseigner tous les attributs obligatoires pour que l&rsquo;ajout fonctionne.<\/p>\n<pre lang=\"php\" escaped=\"true\"> \/\/Ajout d'un produit group\u00e9 : pearl-necklace-set-test.html\r\n\t$groupedProductData = array(\r\n\t\t'sku' =&gt; 'acj007',\r\n\t\t'qty' =&gt; 1,\r\n\t\t'super_group' =&gt; array(\r\n\t\t\t547 =&gt; 1, \/\/SuperGroupId =&gt; Qty\r\n\t\t\t548 =&gt; 2,\r\n\t\t\t551 =&gt; 1,\t\r\n\t\t)\r\n\t);\r\n<\/pre>\n<p>Il est possible de trouver ces informations directement sur le site en inspectant la source avec votre navigateur :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1808\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/07\/api-grouped.jpg\" alt=\"Magento api grouped\" width=\"780\" height=\"402\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/07\/api-grouped.jpg 780w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/07\/api-grouped-300x155.jpg 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/07\/api-grouped-768x396.jpg 768w\" sizes=\"auto, (max-width: 780px) 100vw, 780px\" \/><\/p>\n<p><span style=\"text-decoration: underline;\">Produit Bundle :<\/span><br \/>\nEn compl\u00e9ment des informations du produit simple, il est n\u00e9cessaire d&rsquo;impl\u00e9menter les tableaux \u00ab\u00a0bundle_option\u00a0\u00bb et \u00ab\u00a0bundle_qty\u00a0\u00bb pour que l&rsquo;ajout se fasse correctement.<\/p>\n<pre lang=\"php\" escaped=\"true\"> \/\/Ajout d'un produit bundle mp3-player-with-audio.html\r\n\t$bundleProductData = array(\r\n\t  'product_id' =&gt; 446,\r\n          'qty' =&gt; 1, \/\/Quantit\u00e9 \u00e0 1 pour le bundle\t  \r\n\t  'bundle_option' =&gt; array( \r\n\t  21 =&gt; 84, \/\/Quantit\u00e9 des options du panier sous la forme OptionID =&gt; SelectionID\r\n\t  22 =&gt; 86 ), \r\n\t  'bundle_quantity' =&gt; array(\r\n\t  84 =&gt; 2, \/\/Quantit\u00e9 de chaque option ajout\u00e9e au panier sous la forme SelectionID =&gt; Qt\u00e9\r\n\t  86 =&gt; 2 \r\n\t  ), \r\n\t);\r\n<\/pre>\n<p>Il est possible de trouver ces informations directement sur le site en inspectant la source avec votre navigateur :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1809\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/07\/api-bundle.jpg\" alt=\"Magento api bundle\" width=\"780\" height=\"294\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/07\/api-bundle.jpg 780w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/07\/api-bundle-300x113.jpg 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/07\/api-bundle-768x289.jpg 768w\" sizes=\"auto, (max-width: 780px) 100vw, 780px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><strong>R\u00e9cup\u00e9ration des modes de paiement et de livraison<\/strong><\/p>\n<p>En fonction des param\u00e8tres de votre commande et selon la configuration de votre site, les modes de paiement et de livraison disponibles peuvent \u00eatre amen\u00e9s \u00e0 changer.<br \/>\nC&rsquo;est pourquoi je recommande l&rsquo;utilisation des m\u00e9thodes de l&rsquo;api qui permettent de voir les modes disponibles avant de les assigner, les appels \u00e0 faire \u00e9tant les suivants :<\/p>\n<pre lang=\"php\" escaped=\"true\">\/\/R\u00e9cup\u00e9ration des modes de livraison disponibles pour la commande\r\n$shippingMethods = $client-&gt;call($session, \u2018cart_shipping.list\u2019, $shoppingCartId);\r\nvar_dump($shippingMethods);\r\n\/\/R\u00e9cup\u00e9ration des modes de paiement disponibles pour la commande\r\n$paymentMethods = $client-&gt;call($session, \u2018cart_payment.list\u2019, $shoppingCartId);\r\nvar_dump($paymentMethods);\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><a id=\"apiV1\" name=\"apiV1\"><\/a>Pour finir voici donc le script complet pour l&rsquo;API V1<\/p>\n<p>&nbsp;<\/p>\n<pre lang=\"php\" escaped=\"true\">\r\n&lt;?php\r\nerror_reporting(E_ALL);\r\nini_set('display_errors','on');\r\necho '&lt;pre&gt;';\r\n\r\n$adr = \"http:\/\/magento-1933.demo\/api\/?wsdl\";\r\n$client = new SoapClient($adr,array('trace' =&gt; 1));\r\n$apiUser = \"testuser\";\r\n$apiKey = \"test2018\";\r\n\r\n\/**\r\n* Cr\u00e9ation d'une commande Magento\r\n* Via l'api Soap V1\r\n*\/\r\ntry {\r\n\r\n\/\/login \u00e0 magento\r\n$session = $client-&gt;login($apiUser, $apiKey);\r\n\r\n\/\/R\u00e9cup\u00e9ration d'un client \u00e0 partir de son email\r\n$customerFilers = array(\r\n'email' =&gt; array('eq' =&gt; 'testcustomer@test.fr')\r\n);\r\n$customersList = $client-&gt;call($session,'customer.list',array($customerFilers));\r\n\r\nif ( $customersList ) {\r\n$customerID = $customersList[0]['customer_id'];\r\n} else {\r\nexit('Erreur : Client non existant');\r\n}\r\n\r\n\/\/R\u00e9cup\u00e9ration de l'adresse de facturation par d\u00e9faut du client\r\n$addressList = $client-&gt;call($session, 'customer_address.list',$customerID);\r\n\r\nif ( $addressList ) {\r\n$addressId = false;\r\nforeach ( $addressList as $address ) {\r\nif ( $address['is_default_billing'] === true ){\r\n$addressId = $address['customer_address_id'];\r\nbreak;\r\n}\r\n}\r\n} else {\r\nexit(\"Erreur : Pas d'adresses pour ce client\");\r\n}\r\n\r\nif ( !$addressId ) {\r\nexit(\"Erreur : Pas d'adresse par d\u00e9faut pour ce client\");\r\n}\r\n\r\n\/\/Cr\u00e9ation d'un panier ( initial )\r\n$shoppingCartId= $client-&gt;call( $session, 'cart.create', array(1) );\r\n\r\n\/\/Assignation du client au panier\r\n$assignCustomer = $client-&gt;call($session,'cart_customer.set',array($shoppingCartId,\r\narray(\r\n'mode' =&gt; 'customer',\r\n'customer_id' =&gt; $customerID\r\n)\r\n)\r\n);\r\n\/\/Assignation de l'adresse du client au panier , possibilit\u00e9 de d\u00e9finir une adresse de facturation et de livraison diff\u00e9rente\r\n$Adresses = $client-&gt;call($session, 'cart_customer.addresses',\r\narray( $shoppingCartId ,\r\narray(\r\narray('mode' =&gt; 'billing','address_id' =&gt; $addressId),\r\narray('mode' =&gt; 'shipping','address_id' =&gt; $addressId )\r\n),\r\n)\r\n);\r\n\r\n\/\/Ajout d'un produit simple ( fonctionne aussi pour virtuel et t\u00e9l\u00e9chargeable )\r\n$simpleProductData = array(\r\n'sku' =&gt; 'acj005', \/\/Sku du produit simple\r\n'qty' =&gt; 2, \/\/Qt\u00e9 du produit simple\r\n);\r\n\r\n\/\/Ajout d'un produit configurable (ex sur d\u00e9mo magento bowery-chino-pants-546.html )\r\n$configurableProductData = array(\r\n'sku' =&gt; 'mpd003c' ,\/\/Sku produit\r\n'qty' =&gt; 1, \/\/Qt\u00e9 du produit\r\n'super_attribute' =&gt; array( \/\/Champ sp\u00e9cifique au produit configurable\r\n92 =&gt; 17, \/\/sous la forme attributeID =&gt; optionID\r\n180 =&gt; 67,\r\n),\r\n);\r\n\r\n\/\/Ajout d'un produit group\u00e9\r\n$groupedProductData = array(\r\n'sku' =&gt; 'acj007',\r\n'qty' =&gt; 1,\r\n'super_group' =&gt; array(\r\n547 =&gt; 1, \/\/SuperGroupId =&gt; Qty\r\n548 =&gt; 2,\r\n551 =&gt; 1,\r\n)\r\n);\r\n\r\n\/\/Ajout d'un produit bundle mp3-player-with-audio.html\r\n$bundleProductData = array(\r\n'product_id' =&gt; 446,\r\n'qty' =&gt; 1, \/\/Quantit\u00e9 \u00e0 1 pour le bundle\r\n'bundle_option' =&gt; array(\r\n21 =&gt; 84,\r\n22 =&gt; 86 ), \/\/Quantit\u00e9 des options du panier sous la forme OptionID =&gt; SelectionID\r\n'bundle_quantity' =&gt; array(\r\n84 =&gt; 2,\r\n86 =&gt; 2\r\n), \/\/Quantit\u00e9 de chaque option ajout\u00e9e au panier sous la forme SelectionID =&gt; Qt\u00e9*\/\r\n);\r\n\r\n\/\/Assignation de produits au panier\r\n$addProductToCart = $client-&gt;call($session,'cart_product.add',\r\narray(\r\n'quote_id' =&gt; $shoppingCartId,\r\narray(\r\n$simpleProductData,\r\n$configurableProductData,\r\n$groupedProductData,\r\n$bundleProductData\r\n),\r\n)\r\n);\r\n\r\n\/\/R\u00e9cup\u00e9ration des modes de livraison disponibles pour la commande\r\n$shippingMethods = $client-&gt;call($session, 'cart_shipping.list', $shoppingCartId);\r\n\r\n\/\/D\u00e9commenter la ligne suivante pour voir les m\u00e9thodes de livraison disponibles\r\n\/\/var_dump($shippingMethods);\r\n\r\n\/\/Assignation d'un mode de livraison ( par d\u00e9fault on prends le freeshipping )\r\n$assignShippingMethod = $client-&gt;call($session, 'cart_shipping.method', array($shoppingCartId,'freeshipping_freeshipping'));\r\n\r\n\/\/R\u00e9cup\u00e9ration des modes de paiement disponibles pour la commande\r\n$paymentMethods = $client-&gt;call($session, 'cart_payment.list', $shoppingCartId);\r\n\r\n\/\/D\u00e9commenter la ligne suivante pour voir les m\u00e9thodes de paiement disponibles\r\n\/\/var_dump($paymentMethods);\r\n\r\n\/\/Assignation d'un mode de paiement : par d\u00e9faut cashondelivery\r\n$assignPaymenMethod = $client-&gt;call($session, 'cart_payment.method', array($shoppingCartId,array( 'method' =&gt; 'cashondelivery')));\r\n\r\n\/\/Transformation du paiement en panier\r\n$transformOrder = $client-&gt;call($session, 'cart.order', array($shoppingCartId));\r\n\r\nif ( $transformOrder ) {\r\necho 'Cr\u00e9ation de la commande '.$transformOrder.'&lt;br \/&gt;';\r\n}\r\n\r\n} catch ( Exception $e ) {\r\n\r\necho $e-&gt;getMessage();\r\n\r\n}\r\n<\/pre>\n<p><a id=\"apiV2\" name=\"apiV2\"><\/a>Et le script pour l&rsquo;API V2<\/p>\n<p>&nbsp;<\/p>\n<pre lang=\"php\" escaped=\"true\">&lt;?php\r\nerror_reporting(E_ALL);\r\nini_set('display_errors','on');\r\necho '&lt;pre&gt;';\r\n\r\n\/\/API V2\r\n$adr = \"http:\/\/magento-1933.demo\/api\/?wsdl\";\r\n$client = new SoapClient($adr,array('trace' =&gt; 1));\r\n$apiUser = \"testuser\";\r\n$apiKey = \"test2018\";\r\n\r\n\/**\r\n* Cr\u00e9ation d'une commande Magento\r\n* Via l'api Soap V2\r\n*\/\r\ntry {\r\n\r\n\/\/login \u00e0 magento\r\n$session = $client-&gt;login($apiUser, $apiKey);\r\n\r\n\/\/Cr\u00e9ation d'un panier ( initial )\r\n$shoppingCartId= $client-&gt;shoppingCartCreate( $session,1);\r\n\r\n\/\/R\u00e9cup\u00e9ration d'un client \u00e0 partir de son email\r\n$customerFilers = array(\r\n'email' =&gt; array('eq' =&gt; 'testcustomer@test.fr')\r\n);\r\n$customersList = $client-&gt;customerCustomerList($session,array($customerFilers));\r\n\r\nif ( $customersList ) {\r\n$customerID = $customersList[0]-&gt;customer_id;\r\n} else {\r\nexit('Erreur : Client non existant');\r\n}\r\n\r\n\/\/Assignation d'un client au panier\r\n$assignCustomer = $client-&gt;shoppingCartCustomerSet($session,$shoppingCartId,\r\narray(\r\n'mode' =&gt; 'customer',\r\n'customer_id' =&gt; $customerID\r\n)\r\n);\r\n\r\n\/\/R\u00e9cup\u00e9ration de l'adresse de facturation par d\u00e9faut du client\r\n$addressList = $client-&gt;customerAddressList($session,$customerID);\r\n\r\nif ( $addressList ) {\r\n$addressId = false;\r\nforeach ( $addressList as $address ) {\r\nif ( $address-&gt;is_default_billing === true ){\r\n$addressId = $address-&gt;customer_address_id;\r\nbreak;\r\n}\r\n}\r\n} else {\r\nexit(\"Erreur : Pas d'adresses pour ce client\");\r\n}\r\n\r\nif ( !$addressId ) {\r\nexit(\"Erreur : Pas d'adresse par d\u00e9faut pour ce client\");\r\n}\r\n\r\n\/\/Assignation de cette adresse au panier\r\n$Adresses = $client-&gt;shoppingCartCustomerAddresses($session, $shoppingCartId ,\r\narray(\r\narray('mode' =&gt; 'billing','address_id' =&gt; $addressId),\r\narray('mode' =&gt; 'shipping','address_id' =&gt; $addressId )\r\n)\r\n);\r\n\r\n\/\/Ajout d'un produit simple ( fonctionne aussi pour virtuel et t\u00e9l\u00e9chargeable )\r\n$simpleProductData = array(\r\n'sku' =&gt; 'acj005', \/\/Sku du produit simple\r\n'qty' =&gt; 2, \/\/Qt\u00e9 du produit simple\r\n);\r\n\r\n\/\/Ajout d'un produit configurable (ex sur d\u00e9mo magento bowery-chino-pants-546.html )\r\n$configurableProductData = array(\r\n'sku' =&gt; 'mpd003c' ,\/\/Sku produit\r\n'qty' =&gt; 1, \/\/Qt\u00e9 du produit\r\n'super_attribute' =&gt; array( \/\/Champ sp\u00e9cifique au produit configurable\r\n92 =&gt; 17, \/\/sous la forme attributeID =&gt; optionID\r\n180 =&gt; 67,\r\n),\r\n);\r\n\r\n\/\/Ajout d'un produit group\u00e9\r\n$groupedProductData = array(\r\n'sku' =&gt; 'acj007',\r\n'qty' =&gt; 1,\r\n'super_group' =&gt; array(\r\n547 =&gt; 1, \/\/SuperGroupId =&gt; Qty\r\n548 =&gt; 2,\r\n551 =&gt; 1,\r\n)\r\n);\r\n\r\n\/\/Ajout d'un produit bundle mp3-player-with-audio.html\r\n$bundleProductData = array(\r\n'product_id' =&gt; 446,\r\n'qty' =&gt; 1, \/\/Quantit\u00e9 \u00e0 1 pour le bundle\r\n'bundle_option' =&gt; array(\r\n21 =&gt; 84,\r\n22 =&gt; 86 ), \/\/Quantit\u00e9 des options du panier sous la forme OptionID =&gt; SelectionID\r\n'bundle_quantity' =&gt; array(\r\n84 =&gt; 2,\r\n86 =&gt; 2\r\n), \/\/Quantit\u00e9 de chaque option ajout\u00e9e au panier sous la forme SelectionID =&gt; Qt\u00e9*\/\r\n);\r\n\r\n\/\/Assignation de produits au panier\r\n$addProductToCart = $client-&gt;shoppingCartProductAdd($session,$shoppingCartId,\r\narray(\r\n$simpleProductData,\r\n$configurableProductData,\r\n$groupedProductData,\r\n$bundleProductData\r\n)\r\n);\r\n\r\n\/\/R\u00e9cup\u00e9ration des modes de livraison disponibles pour la commande\r\n$shippingMethods = $client-&gt;shoppingCartShippingList ($session,$shoppingCartId);\r\n\r\n\/\/D\u00e9commenter la ligne suivante pour voir les m\u00e9thodes de livraison disponibles\r\n\/\/var_dump($shippingMethods);\r\n\r\n\/\/Assignation d'un mode de livraison ( par d\u00e9fault on prends le freeshipping )\r\n$assignShippingMethod = $client-&gt;shoppingCartShippingMethod($session,$shoppingCartId,'freeshipping_freeshipping');\r\n\r\n\/\/R\u00e9cup\u00e9ration des modes de paiement disponibles pour la commande\r\n$paymentMethods = $client-&gt;shoppingCartPaymentList($session,$shoppingCartId);\r\n\r\n\/\/D\u00e9commenter la ligne suivante pour voir les m\u00e9thodes de paiement disponibles\r\n\/\/var_dump($paymentMethods);\r\n\r\n\/\/Assignation d'un mode de paiement : par d\u00e9faut cashondelivery\r\n$assignPaymenMethod = $client-&gt;shoppingCartPaymentMethod($session,$shoppingCartId,array( 'method' =&gt; 'cashondelivery'));\r\n\r\n\/\/Transformation du paiement en panier\r\n$transformOrder = $client-&gt;shoppingCartOrder($session,$shoppingCartId);\r\n\r\nif ( $transformOrder ) {\r\necho 'Cr\u00e9ation de la commande '.$transformOrder.'&lt;br \/&gt;';\r\n}\r\n\r\n} catch ( Exception $e ) {\r\necho $e-&gt;getMessage();\r\n}\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai r\u00e9cemment eut \u00e0 cr\u00e9er des commandes Magento via l&rsquo;api et j&rsquo;ai rencontr\u00e9 pas mal de difficult\u00e9s, j&rsquo;en profite pour condenser l&rsquo;ensemble du processus dans cet article \ud83d\ude42 Voici un script qui permettra de cr\u00e9er une commande Magento \u00e0 partir de l&rsquo;api Soap de Magento ( \u00e0 la fois avec la version api V1 et [&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":[246],"tags":[516,523,150,522],"class_list":["post-1804","post","type-post","status-publish","format-standard","hentry","category-magento-2","tag-api","tag-cart","tag-magento","tag-order"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1804","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=1804"}],"version-history":[{"count":5,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1804\/revisions"}],"predecessor-version":[{"id":1812,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1804\/revisions\/1812"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=1804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=1804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=1804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}