Erreur 500 webservice Prestashop : modifier un produit

publié par CréatineWeb le 22-11-18

Erreur 500 webservice Prestashop : modifier un produit

Les PUT du webservice Prestashop

Je vous arrête tout de suite… on parle bien du PUT utilisée par le webservice Prestashop : méthode HTTP qui nous retourne pour le coup cette fameuse Erreur 500 lorsqu’on tente de modifier un produit. J’espère ne pas vous avoir trop alléché..

Étant donné que je me suis confronté à cette erreur 500 une fois et que j’ai pu voir récemment que certaines discussions de forums restaient sans réponse à ce sujet, je me suis dis pourquoi ne pas en faire un article. Puisque j’ai réussi à résoudre mon problème à l’époque, je partage mon expérience en espérant que ça puisse servir.

Réussir à faire s’accoupler (?) deux versions Prestashop

Il y a quelques temps maintenant, j’ai dû utiliser le webservice Prestashop pour mettre en place une synchronisation entre deux sites internet de versions différentes. L’un des sites étaient sous prestashop 1.6.0.9. Tandis que l’autre.. accrochez-vous bien.. sous prestashop 1.1.0.5 ! … Qui a rigolé ?… J’ai entendu rigoler…

Alors pour réussir cette prestation, il a été nécessaire de créer un module prestashop sur-mesure (entre autres..) Donc l’objectif précis de ce module était de permettre à notre vieux site web de parler un langage compréhensible par le site le plus récent.

Et pour cela, quoi de plus logique que d’utiliser le webservice de Prestashop.

Erreur 500!

Seulement, la vie d’un développeur n’est pas toujours tranquille. Comme souvent, on se confronte à une erreur et celle-ci en l’occurrence est assez fatale : l’erreur 500.

Pour ma part, j’avais deux problèmes, l’un évident mais l’autre, moins.

Considérons le code xml suivant pour l’ajout d’un produit (que je vous ai allégé) :

<product>
	<id>22</id>
	<id_manufacturer xlink:href="http://exemple.fr/_admin/api/manufacturers/3">3</id_manufacturer>
	<id_supplier><![CDATA[0]]></id_supplier>
	<id_category_default xlink:href="http://exemple.fr/_admin/api/categories/2">2</id_category_default>
	<new/>
	<cache_default_attribute><![CDATA[1]]></cache_default_attribute>
	<id_default_image xlink:href="http://exemple.fr/_admin/api/images/products/22/32" not_filterable="true"><![CDATA[32]]></id_default_image>
	<id_default_combination xlink:href="http://exemple.fr/_admin/api/combinations/54" not_filterable="true"><![CDATA[54]]></id_default_combination>
	<id_tax_rules_group xlink:href="http://exemple.fr/_admin/api/tax_rule_groups/1">1</id_tax_rules_group>
	<position_in_category not_filterable="true"/>
		
	<type not_filterable="true"><![CDATA[simple]]></type>
	<id_shop_default><![CDATA[1]]></id_shop_default>
	<reference>mr 03</reference>
	<supplier_reference/>
	<location/>
	<width><![CDATA[0.000000]]></width>
	<height><![CDATA[0.000000]]></height>
	<depth><![CDATA[0.000000]]></depth>
	<weight>0.000000</weight>
	<quantity_discount><![CDATA[0]]></quantity_discount>
	<ean13/>
	<upc/>
	<cache_is_pack><![CDATA[0]]></cache_is_pack>
	<cache_has_attachments><![CDATA[0]]></cache_has_attachments>
	<is_virtual><![CDATA[0]]></is_virtual>
	<on_sale>1</on_sale>
	<online_only><![CDATA[0]]></online_only>
	<ecotax>0.000000</ecotax>
	<minimal_quantity>1</minimal_quantity>
	<price>39.000000</price>
	<wholesale_price>0.000000</wholesale_price>
	<unity/>
	<unit_price_ratio><![CDATA[0.000000]]></unit_price_ratio>
	<additional_shipping_cost><![CDATA[0.00]]></additional_shipping_cost>
	<customizable><![CDATA[0]]></customizable>
	<text_fields><![CDATA[0]]></text_fields>
	<uploadable_files><![CDATA[0]]></uploadable_files>
	<active>1</active>
	<redirect_type><![CDATA[404]]></redirect_type>
	<id_product_redirected><![CDATA[0]]></id_product_redirected>
	<available_for_order>1</available_for_order>
	<available_date><![CDATA[0000-00-00]]></available_date>
	<condition><![CDATA[new]]></condition>
	<show_price>1</show_price>
	<indexed><![CDATA[1]]></indexed>
	<visibility><![CDATA[both]]></visibility>
	<advanced_stock_management><![CDATA[0]]></advanced_stock_management>
	<date_add><![CDATA[2014-12-23 13:59:26]]></date_add>
	<date_upd><![CDATA[2014-12-23 14:15:46]]></date_upd>
</product>

Dans le code ci-dessus, le problème qui se pose est cette ligne :

<position_in_category not_filterable="true"/>

On la retrouve aussi parfois comme ceci quand vous essayez de modifier la catégorie du produit :

<position_in_category not_filterable="true">5</position_in_category>

Et cette ligne vous sortira une erreur 500.
Pour corriger cela, nous avons deux solutions :

1. Supprimer la ligne

Soit on supprime la ligne comme c’est habituellement préconisé ce qui donnerait à peu près ça dans votre code php (c’est la ligne 4 qui nous intéresse en particulier) :

unset($resources->manufacturer_name);
unset($resources->quantity);
unset($resources->associations);
unset($resources->position_in_category);

2. Complétez correctement la balise position_in_category

Par contre, s’il vous faut absolument renseigner la position de l’article, alors vous devrez renseigner la balise « position_in_category » ainsi :

<position_in_category not_filterable="true"><![CDATA[5]]></position_in_category>

Pour ma part, je n’ai pas gardé la balise position_in_category car pas utile, mais mes tests montraient que de cette manière, l’erreur 500 était levé.

Et voilà.

Ça vous a aidé ? Encore plus embrouillé ?
Grave à jamais ton histoire sur la toile, grave un commentaire

Vous aimerez aussi :

Laissez votre commentaire :

*
*

Ce champs est privé et ne sera jamais affiché publiquement

*