Jump to content

Webservice & C# : Mise À Jour D'un Prix D'un Produit


Recommended Posts

Bonjour,

 

En c# et via un webservice j'ai besoin de mettre à jour un prix d'un produit. Pour se faire voici mon code :

 

HttpWebRequest RequeteHTTPMAJPrix = (HttpWebRequest)WebRequest.Create(WebServicePrestashopUrl+"/products/" + id_produit);

NetworkCredential ncIdAmazonASIN = new NetworkCredential(WebServicePrestashopCle, "");

RequeteHTTPMAJPrix.Credentials = ncIdAmazonASIN;

RequeteHTTPMAJPrix.PreAuthenticate = true;

RequeteHTTPMAJPrix.Method = "PUT";

RequeteHTTPMAJPrix.ContentType = "application/x-www-form-urlencoded;charset=utf-8";

 

byte[] byteArrayMAJPrix = Encoding.UTF8.GetBytes("xml=<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +

"<prestashop xmlns:xlink=\"http://www.w3.org/1999/xlink\">" +

"<product>" +

"<price>" + prix + "</price>" +

"</product>" +

"</prestashop>");

 

RequeteHTTPMAJPrix.ContentLength = byteArrayMAJPrix.Length;

Stream dataStreamMAJPrix = RequeteHTTPMAJPrix.GetRequestStream();

dataStreamMAJPrix.Write(byteArrayMAJPrix, 0, byteArrayMAJPrix.Length);

 

dataStreamMAJPrix.Close();

 

HttpWebResponse ReponseHTTPMAJPrix = (HttpWebResponse)RequeteHTTPMAJPrix.GetResponse();

 

ReponseHTTPMAJPrix.Close();

 

J'obtiens une erreur 500 pour un problème de parse XML selon fiddler 2

 

Quelqu'un a une idée, je suis à court <_< ?

Link to comment
Share on other sites

Bon j'ai réussi à avancer avec le code suivant :

 

public void MAJPrixProduitAmazon(int id_produit, string prix)

{

byte[] byteArrayMAJPrix = null;

 

WebResponse Resp = RequetePrestashop("products/" + id_produit, "GET");

XmlNodeList ListeXml;

try

{

XmlDocument RetourXml = new XmlDocument();

 

Stream dataStream = Resp.GetResponseStream();

StreamReader reader = new StreamReader(dataStream);

String R = reader.ReadToEnd();

 

RetourXml.LoadXml®;

 

// On supprimer les balises non modifiables

// position_in_category

XmlNode childNodePosition_in_category = RetourXml.SelectSingleNode("/prestashop/product/position_in_category"); // apply your xpath here

childNodePosition_in_category.ParentNode.RemoveChild(childNodePosition_in_category);

 

// manufacturer_name

XmlNode childNodeManufacturer_name = RetourXml.SelectSingleNode("/prestashop/product/manufacturer_name"); // apply your xpath here

childNodeManufacturer_name.ParentNode.RemoveChild(childNodeManufacturer_name);

 

// quantity

XmlNode childNode_quantity = RetourXml.SelectSingleNode("/prestashop/product/quantity"); // apply your xpath here

childNode_quantity.ParentNode.RemoveChild(childNode_quantity);

 

ListeXml = RetourXml.SelectNodes("/prestashop/product");

 

// On analyse les différents noeuds de la fiche produit

foreach (XmlNode node in ListeXml)

{

foreach (XmlNode SousNoeud in node)

{

if (SousNoeud.Name.ToString() == "price")

{

SousNoeud.InnerText = prix;

}

}

}

byteArrayMAJPrix = Encoding.UTF8.GetBytes(RetourXml.InnerXml .ToString());

reader.Close();

dataStream.Close();

 

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

 

// On prépare les données XML mis à jour

// On envoie les données XML mis à jour via la méthode PUT

WebRequest Req1 = WebRequest.Create(WebServicePrestashopUrl + "/products/" + id_produit);

Req1.Method = "PUT";

Req1.Credentials = new NetworkCredential(WebServicePrestashopCle, "");

Req1.ContentLength = byteArrayMAJPrix.Length;

MessageBox.Show(Encoding.UTF8.GetString(byteArrayMAJPrix));

Stream postStream = null;

postStream = Req1.GetRequestStream();

postStream.Write(byteArrayMAJPrix, 0, byteArrayMAJPrix.Length);

postStream.Close();

 

HttpWebResponse Resp1 = (HttpWebResponse)Req1.GetResponse();

if (Resp1.StatusCode == HttpStatusCode.OK )

{

MessageBox.Show("Le produit (" + id_produit.ToString() + ") a été mis à jour.");

}

else

{

MessageBox.Show(Resp1.StatusCode + Resp1.StatusDescription);

}

}

 

 

Le prix se met bien à jour ... mais le seul problème c'est que malgré que dans les données xml les features value (caractéristiques) soient bien envoyées, elles sont toutes purgées suite au "PUT" :blink: .

 

Est-ce que qqn sait pourquoi ? Je suis en prestashop 1.5.2.

 

Merci d'avance car là j'ai vraiment besoin d'un coup de main. :unsure:

Link to comment
Share on other sites

  • 2 weeks later...

Dur, dur, là comme ça. Surtout pour la lecture du code.

 

Je n'ai pas encore pris le soin de faire une update de produits via le WebService, donc je ne sais pas dire d'où peut provenir le soucis.

 

Est-ce que le XML envoyé est bien réalisé à partir d'un XML récupéré en GET, éventuellement ? :)

Link to comment
Share on other sites

Est-ce que le XML envoyé est bien réalisé à partir d'un XML récupéré en GET, éventuellement ? :)

 

Merci J. Danse pour ta réponse ... je me sens moins seul :rolleyes:

 

Et pour répondre à ta question, oui c'est bien à la base d'un GET :wacko:, mon champ prix se met bien à jour mais pour une raison qui m'échappe pour le moment je n'ai plus de valeur dans mes caractéristiques après cette modif .... <_<

Link to comment
Share on other sites

Vous trouverez ci-dessous le code xml que j'envoie en PUT et qui me vide uniquement mes feature-value :angry:

 

<?xml version="1.0" encoding="UTF-8"?>

<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">

<product>

<id><![CDATA[205]]></id>

<id_manufacturer><![CDATA[0]]></id_manufacturer>

<id_supplier xlink:href="http://www.prey-games.fr/api/suppliers/3"><![CDATA[3]]></id_supplier>

<id_category_default xlink:href="http://www.prey-games.fr/api/categories/76"><!'>http://www.prey-games.fr/api/categories/76"><![CDATA[76]]></id_category_default>

<new></new>

<cache_default_attribute><![CDATA[0]]></cache_default_attribute>

<id_default_image xlink:href="http://www.prey-games.fr/api/images/products/205/228" not_filterable="true"><![CDATA[228]]></id_default_image>

<id_default_combination not_filterable="true"></id_default_combination>

<id_tax_rules_group><![CDATA[0]]></id_tax_rules_group>

<id_shop_default><![CDATA[1]]></id_shop_default>

<reference></reference>

<supplier_reference></supplier_reference>

<location></location>

<width><![CDATA[0.000000]]></width>

<height><![CDATA[0.000000]]></height>

<depth><![CDATA[0.000000]]></depth>

<weight><![CDATA[0.000000]]></weight>

<quantity_discount><![CDATA[0]]></quantity_discount>

<ean13></ean13>

<upc></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><![CDATA[0]]></on_sale>

<online_only><![CDATA[0]]></online_only>

<ecotax><![CDATA[0.000000]]></ecotax>

<minimal_quantity><![CDATA[0]]></minimal_quantity>

<price>189.00</price>

<wholesale_price><![CDATA[0.000000]]></wholesale_price>

<unity></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><![CDATA[1]]></active>

<available_for_order><![CDATA[1]]></available_for_order>

<available_date><![CDATA[0000-00-00]]></available_date>

<condition><![CDATA[new]]></condition>

<show_price><![CDATA[1]]></show_price>

<indexed><![CDATA[1]]></indexed>

<visibility><![CDATA[both]]></visibility>

<advanced_stock_management><![CDATA[0]]></advanced_stock_management>

<date_add><![CDATA[2012-12-07 23:16:00]]></date_add>

<date_upd><![CDATA[2013-03-07 13:06:26]]></date_upd>

<meta_description>

<language id="5" xlink:href="http://www.prey-games.fr/api/languages/5"><![CDATA[Commandez Console Xbox 360 4Go au meilleur prix sur Prey-Games.fr]]></language>

</meta_description>

<meta_keywords>

<language id="5" xlink:href="http://www.prey-games.fr/api/languages/5"><![CDATA[console xbox 360 4go]]></language>

</meta_keywords>

<meta_title>

<language id="5" xlink:href="http://www.prey-games.fr/api/languages/5"><![CDATA[Console Xbox 360 4Go: 62: Prey-Games.fr]]></language>

</meta_title>

<link_rewrite><language id="5" xlink:href="http://www.prey-games.fr/api/languages/5"><![CDATA[console-xbox-360-4go]]></language></link_rewrite>

<name><language id="5" xlink:href="http://www.prey-games.fr/api/languages/5"><![CDATA[Console Xbox 360 4Go]]></language></name>

<description><language id="5" xlink:href="http://www.prey-games.fr/api/languages/5"><![CDATA[<p>Xbox 360 4Go La nouvelle console Xbox 360 4 GO, disponible aujourd'hui pour le divertissementde demain. Avec une nouvelle identité de marque, une taille revue à la baisseet le Wi-Fi i intégré, la nouvelle Xbox 360 vous ouvre les portes du monde du divertissement sur le Xbox LIVE, qui propose notamment du [spam-filter] Full HD instantanéLa Xbox 360 est prête à accueillir l'expérience de jeu sans manette avec Kinect - Vous ne jouez plus au jeu, vous êtes le jeu ! La Xbox 360 c'est plus de jeux, plus de divertissement et plus de fun.La Xbox 360 propose un large catalogue de jeux à succès, des films en HDet offre à tous le plaisir de pouvoir jouer sans manette, grâce à Kinect Wi-Fi intégré pour une connexion aisée au Xbox LIVEDe nouvelles lignes épurées, une manette sans-fil et un silence RemarquablePrête pour le jeu et le divertissement sans manette avec Kinect Caractéristiques principales : Xbox 360 4GoWi-Fi intégré : la nouvelle Xbox 360 est la seule console disposant de la technologie Wi-Fi 802*.11n intégrée, pour une connexion plus rapide et plus facile au Xbox LIVE. Regardez des films HD en [spam-filter] ou télé-chargez des jeux sur le Xbox LIVE en 1080p et son surround 5.1, où que la consolese trouve dans la maison Xbox Live : le Xbox LIVE vous ouvre les portes d'un monde de divertissements. Regardez des films en haute définition ou téléchargez des extensions pour vosjeux (nouveaux niveaux,personnages, cartes ou encore chansons). Rejoignez en quelques instants des parties multi-joueurs en ligne et jouez avec vos amis du monde entier. Vous pouvez même partager des photos avec eux sur Facebook et suivre leurs actus sur Twitter. Et bientôt grâce à Kinect vous pourrez par exemple lancer la lecture d'un film d'un simple geste de la main ou participer à un chat vidéo directement sur votre TV : une véritable révolution dans votre salon !. Prête pour Kinect :grâce à Kinect, jouez et divertissez-vous entre amis ou en famille de façon révolutionnaire, sans manette. Vraiment accessible à tous, avec Kinect, le plaisir est immédiat. Vous voyez un ballon ? Tapez dedans ! Vous voulez vous amuser avec un ami ?Rien de plus simple, placez-vous devant le capteurà côté de lui. Vous pouvez même parcourir le catalogue de films HD d'un simple geste de la main. Grâce à son port dédié, la console Xbox 360 4 Go est prévue pour une connexion aisée au capteur Kinect Manette sans fil Xbox (noire):récompensée à de nombreuses reprises, cette manette sans fil ultra performante permet de jouer à une distance de 9 mètres et offre une autonomie de 30 heures avec deux piles AA. Accessoires Xbox 360 (vendus séparemment):Connectez un plus grand nombre d'accessoires et de périphériques de stockage grâce aux ports USB supplémentaires (5 ports au total, 3 en façade et 2 à l'arrière). Et outre la sortie HDMI et le port Ethernet, la nouvelle Xbox intègre une sortie audio optique pour vous permettre de relier facilement votre console à un amplificateur audio-vidéo et profiter d'un son incomparable.Images de la console Xbox 360 4 Go (cliquez pour agrandir les images)</p> <p>gr</p>]]></language></description>

<description_short><language id="5" xlink:href="http://www.prey-games.fr/api/languages/5"><![CDATA[]]></language></description_short>

<available_now><language id="5" xlink:href="http://www.prey-games.fr/api/languages/5"><![CDATA[]]></language></available_now>

<available_later><language id="5" xlink:href="http://www.prey-games.fr/api/languages/5"><![CDATA[]]></language></available_later>

<associations>

<categories node_type="category">

<category xlink:href="http://www.prey-games.fr/api/categories/72">

<id><![CDATA[72]]></id>

</category>

<category xlink:href="http://www.prey-games.fr/api/categories/76">

<id><![CDATA[76]]></id>

</category>

</categories>

<images node_type="image"><image xlink:href="http://www.prey-games.fr/api/images/products/205/228"><id><![CDATA[228]]></id></image></images>

<combinations node_type="combinations" />

<product_option_values node_type="product_options_values" />

<product_features node_type="product_feature">

<product_feature xlink:href="http://www.prey-games.fr/api/product_features/7">

<id><![CDATA[7]]></id>

<id_feature_value xlink:href="http://www.prey-games.fr/api/product_feature_values/278"><![CDATA[278]]></id_feature_value>

</product_feature>

<product_feature xlink:href="http://www.prey-games.fr/api/product_features/8">

<id><![CDATA[8]]></id>

<id_feature_value xlink:href="http://www.prey-games.fr/api/product_feature_values/277"><![CDATA[277]]></id_feature_value>

</product_feature>

</product_features>

<tags node_type="tag" />

<stock_availables node_type="stock_available">

<stock_available xlink:href="http://www.prey-games.fr/api/stock_availables/232">

<id><![CDATA[232]]></id>

<id_product_attribute><![CDATA[0]]></id_product_attribute>

</stock_available>

</stock_availables>

</associations>

</product>

</prestashop>

 

Si toutefois ça éveille une idée même peu lumineuse ... je suis preneur :wacko:

Link to comment
Share on other sites

Bon faut croire que j'ai été inspiré ... j'ai enfin trouvé la solution au problème :D .

 

Il s'avère que si la caractéristique est personnalisée à savoir que vous ne la choisissez pas dans une liste mais que vous la rentrez à la main, vous devez ajouter ceci (à titre d'exemple) dans les données XML envoyées en PUT :angry: :

 

<product_feature xlink:href="http://www.prey-games.fr/api/product_features/7">

<id><![CDATA[7]]></id>

<custom><![CDATA[1]]></custom>

<id_feature_value xlink:href="http://www.prey-games.fr/api/product_feature_values/278"><![CDATA[278]]></id_feature_value>

 

Et avec ce petit ajout ça passe ... :)

 

J'espère que ce bug sera corrigé dans la prochaine version, mais j'espère surtout que le support me préviendra avant !

 

En tout cas merci à tout ceux qui m'ont répondu sur le topic et en mp ! :wub:

  • Like 1
Link to comment
Share on other sites

  • 10 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...