Jump to content

modification product webservices


Recommended Posts

Bonjour,

Alors voilà je cherche à faire une mise à jour de mon stock avec un fichier distant.

Mon problème est le suivant :

La Connexion fonctionne correctement, ensuite je récupère mon fichier je traite le fichier et ensuite je cherche à mettre a jour chaque ligne de mon fichier.

 

Et voila le problème qui ce pose :

 

1er problème

le champ price est en parmanence incrémenter de la tva

il charge la valeur TTC dans le champ HT donc rajoute la TVA continuellement et vu que je lance mon webservice toute les heures je vous raconte pas les prix a la fin de la journée.

 

2 eme problème il me sort une erreur 400 a chaque fois après 224 produits mis à jour .

 

 

try {
$content=file_get_contents('monfichier.txt','r');
$content=explode("\r", $content);
$arr = array();
sort($content);
foreach ($content as $ligne ) {
 $ref = explode("\t", $ligne);
 if(!array_key_exists($ref[0],$arr)){
  $arr[$ref[0]] = array();
  $arr[$ref[0]]['qte'] = $ref[1];
 } else {
  $arr[$ref[0]]['qte'] += $ref[1];
 }

}

$nb_prod=0;
$update=0;
$creat=0;
$tableau_creat = array();
foreach($arr as $cle => $qte) {
 $tab=split("_",$cle);
 $ma_reference = $tab[0];
 $RSQL = '(SELECT `id_product` ';
 $RSQL .= ' FROM `product`';
 $RSQL .= ' WHERE `reference`="'.$ma_reference.'"';
 $RSQL .= ' );';
 $id_product_search = Db::getInstance()->ExecuteS($RSQL);
 if ($id_product_search[0]['id_product']!="" AND isset($id_product_search[0]['id_product'])) {
  echo 'Reference : '.$ma_reference.' //// id : '.$id_product_search[0]['id_product'].' //// Quantité : '.$qte['qte'].'<br />';
  $p++;


  $xml_product = $webService->get(array('resource' => 'products','id' => $id_product_search[0]['id_product']));
  $resources_product = $xml_product->children()->children();
  unset($xml_product->product->id_default_image);
  unset($xml_product->product->position_in_category);
  unset($xml_product->product->manufacturer_name);
  unset($xml_product->product->unity);
  unset($xml_product->product->date_add);
  unset($xml_product->product->date_upd);
  unset($xml_product->product->product_feature);
  $resources_product->quantity = $qte['qte'];
  if ($qte['qte']>0) {
   $resources_product->active = 1;
  } else {
   $resources_product->active = 0;
  }
  $xml_product = $webService->edit(array('resource' => 'products', 'id'=>(int)$id_product_search[0]['id_product'], 'putXml' => $xml_product->asXML()));

  // if ($p==224) {
   // echo $ma_reference;
   // die();
  // }
  $product_fait++;
 } elseif ($check<=0 AND $qte['qte']>0) {
  $creat++;
  array_push($tableau_creat, $tab[0]);
 } else {
  $nb_prod++;
 }
}
echo '<h2>Traitement fichier terminé</h2>';
echo '<h4>'.$product_fait.' mise a jour</h4>';
echo '<h4>'.$creat.' a creer</h4>';
}
catch (PrestaShopWebserviceException $e)
{
// Here we are dealing with errors
$trace = $e->getTrace();
if ($trace[0]['args'][0] == 404) echo 'Bad ID';
else if ($trace[0]['args'][0] == 401) echo 'Bad auth key';
else echo $e->getMessage();
}

Link to comment
Share on other sites

Pour le problème de prix j'ai bidouiller une solution.

$resources_product->price = number_format(str_replace(',', '.', $prix/1.196), 4, '.', '');

 

Mais pour le nombre de produit envoyer j'ai beau essayer d'alléger le nombre de champ xml envoyer mais sa bloque toujours a 224.

 

Personne ne rencontre ce problème? ou aurais une solution?

Link to comment
Share on other sites

Petit up :)

Personne fait de mise à jours prix, quantité, de leurs produits via WebServices massivement?

J'ai j'ai beau allèger mon script le seul moment ou il passe complet c'est quand je mets en commentaire les fonctions

 $xml_product = $webService->edit(array('resource' => 'products', 'id'=>(int)$id_product_search[0]['id_product'], 'putXml' => $xml_product->asXML()));

 

Merci d'avance

Link to comment
Share on other sites

  • 2 weeks later...

Hello,

 

je synchronise plusieurs milliers de produits via le webservice et je n'ai pas ton problème.

Pour ton erreur 400, as-tu mis le display-error à on ? ça t'aiderait. SI ça bloque tout le temps à 224 c'est sûrement ton produit qui merde (un & ou un caractère pourrit) non ?

 

Pour ton problème de prix, il faut que tu renseignes l'id de tva je pense et ça devrait rouler ?

 

 

++

  • Like 1
Link to comment
Share on other sites

Si j'ai bien compris, tu as un fichier txt correspondant au stock distant et tu passes par le webservice pour ton propre site ?

Est-ce une obligation de passer par le webservice pour toi ?

Pourquoi ne pas utiliser updateproduct ?

(dis-je une bêtise ?)

Link to comment
Share on other sites

J'ai bien des problème d'accents il plante sur é

donc j'essaye de faire qu'il ne prenne pas en compte nom, description, etc...

mais y aurais t'il pas plus simple du genre dans le get avec une sélection des champs que l'on veux uniquement? genre pour moi id prix qantity ?

 

J'arrive passer outre cette erreur :

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

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

<errors>

<error>

<code><![CDATA[84]]></code>

<message><![CDATA[Validation error: "Le champ suivant n'est pas valide selon la méthode de validation<b>isCatalogName</b>:<br/> (Product->name = Silver dome métal pour la langue 1"]]></message>

</error>

</errors>

</prestashop>

j'ai éssayer de faire unset($resources_product->name);

mais toujours la même erreur.

Link to comment
Share on other sites

  • 4 months later...

Bonjour,

 

J'ai aussi le problème du champ price qui s'incrémente tout le temps de la TVA quand je fais un update d'un article.

Comme si le champ price du XML get équivalait au prix tva comprise et le champ price du XML put/post équivalait au prix tva exclue.

 

Est-ce que quelqu'un avait trouvé une solution?

 

Bien à vous

Link to comment
Share on other sites

  • 1 year later...

Hello,

 

je synchronise plusieurs milliers de produits via le webservice et je n'ai pas ton problème.

Pour ton erreur 400, as-tu mis le display-error à on ? ça t'aiderait. SI ça bloque tout le temps à 224 c'est sûrement ton produit qui merde (un & ou un caractère pourrit) non ?

 

Pour ton problème de prix, il faut que tu renseignes l'id de tva je pense et ça devrait rouler ?

 

 

++

 

Salut,

 

J'aimerais moi aussi pouvoir mettre à jour mes 10000 articles à travers le webservice.

Plutot que d'envoyer un fichier, ne puis-je pas envoyer la reférence produit à ma page PHP qui recherche le produit et mets à jour le stock avec la quantité que j'ai passé en paramètre dans l'url à l'aide du web service ?

 

Aurais-tu un bout de code pour m'aider à faire cela ?

 

Merci.

Romuald

Link to comment
Share on other sites

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...