Jump to content
gandalf76fr

[RESOLU]Webservice probleme description tags html

Recommended Posts

Bonjour,

 

Je travaille actuellement sur un projet d’interface vers prestashop qui utilisera le webservice.

 

Certains d’entre vous connaissent-ils ?

 

La doc n’est franchement pas très complète.

 

Car par exemple pour la création d’un produit je cale sur un problème :

J’arrive à créer le produit sans aucun soucis si j’utilise du texte simple.

Par contre impossible de le créer avec du texte contenant des balises html alors que prestashop gère les balises html dans les fiches produits.

Il semble bloquer sur les <>.

 

J’ai bien tenter à coup de htmlentities, htmlspecialchars, utf8decode/encode, remplacer part des >……….. mais rien n’y fait.

 

Je finis toujours avec :

 

Autre erreur :

This call to PrestaShop Web Services failed and returned an HTTP status of 500. That means: Internal Server Error.
Code : 0
Array ( [0] => Array ( [file] => /var/www/clients/client2/web52/web/include/PSWebServiceLibrary.php [line] => 222 [function] => checkStatusCode [class] => PrestaShopWebservice [type] => -> [args] => Array ( [0] => 500 ) ) [1] => Array ( [file] => /var/www/clients/client2/web52/web/test4.php [line] => 35 [function] => add [class] => PrestaShopWebservice [type] => -> [args] => Array ( [0] => Array ( [resource] => products [postXml] => 1 1 test53dfgb2578 test547gfrdrt24fgb52 test avec <> 6  02 ) ) ) ) Trace : 1
/var/www/clients/client2/web52/web/include/PSWebServiceLibrary.php
92

 

La partie du xml envoyé concernée :

<description format="isString"><language id="4" xlink:href="http://presta5.xxx.net/api/languages/4" format="isUnsignedId">test avec <></language></description>

 

Le xml retourné :

<errors>
<error>
<message><![CDATA[internal error. To see this error please display the PHP errors.]]></message>
</error>

 

Log php :

Rien.

J'ai bien vu un bug report sur le sujet (http://forge.prestas...owse/PSCFI-4306)avec une solution proposée, mais rien à faire toujours la même erreur :

Ce qui est tout de même étrange c'est que par exemple avec (extraits de code) :

$description="<![CDATA[<h1>Tiger</h1>]]>"; (j'ai tester avec et sans les balises du CDATA) $resources_product->description->language[0][0]= html_entity_decode($description,ENT_NOQUOTES,'UTF-8');

 

Si j'affiche le xml généré :

echo $resources_product->asXML();

 

j'ai bien :

1 1 test53dfgb2578 test547gfrdrt24fgb52 <![CDATA[<h1>Tiger</h1>]]> 2 02

Donc un affichage correcte de la section CDATA.

 

Alors que selon la lib le XML envoyé est :

<description format="isString"><language id="4" xlink:href="http://xxx.xxx.com/api/languages/4" format="isUnsignedId"><![CDATA[<h1>Tiger</h1>]]></language></description>

 

Ce qui la ne colle pas du tout.

 

Pareil avec et sans le html_entity_decode ou autre.

 

Petite précisions :

J'ai tester sur différentes versions de prestachop, de la 1.4.3 (que je souhaiterai utiliser pour une raison de compatibilité de module) à la 1.5 (sur laquelle je passerais le projet une fois en stable)

Désolé pour ce long post mais je souhaitais être le plus clair et complet possible

Merci d’avance de votre aide.

P.S : je n’en suis pas encore la, mais je n’ai rien trouver concernant l’ajout d’images aux fiches produit via le webservice.

 

Petit exemple de code :

 

require_once($_SERVER["DOCUMENT_ROOT"].'/include/PSWebServiceLibrary.php');
require_once($_SERVER["DOCUMENT_ROOT"].'/include/fonctions.php');
define('DEBUG', true);																																							  // Debug mode
define('PS_SHOP_PATH', 'http://test.xxx.com/');						  // Root path of your PrestaShop store
define('PS_WS_AUTH_KEY', '***************************');	  // Auth key (Get it in your Back Office)
$webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG);
$description='test avec <>';
$xml_product = $webService->get(array('resource' => 'products?schema=synopsis'));
$resources_product = $xml_product->children()->children();

// champs requis
$resources_product->quantity = 0;
$resources_product->active = 1;
$resources_product->price = 1;
$resources_product->out_of_stock = 2;
$resources_product->name->language[0][0] = 'test547gfrdrt24fgb52';
$resources_product->link_rewrite->language[0][0] = 'test53dfgb2578';
$resources_product->description->language[0][0] = $description;
//var_dump($resources_product);
// par exemple pour vider les associations aux categories
unset($resources_product->associations->categories->category);

// associer a une categorie (id = 1)
$resources_product->associations->categories->addChild('category')->addChild('id', 6);
echo $xml_product->asXML();
try {
$xml_product = $webService->add(array('resource' => 'products', 'postXml' => $xml_product->asXML()));
}
catch(PrestaShopWebserviceException $ex)
{
$trace = $ex->getTrace();
$errorCode = $trace[0]['args'][0];
if ($errorCode==401)
 {
 echo 'Mauvaise cle authentification curl';
 }
else
 {
 echo 'Autre erreur : <br />';
 echo $ex->getMessage().'<br />';
 echo 'Code : '.$ex->getCode().'<br />';
 echo 'Trace : '.print_r($ex->getTrace()).'<br />';
 echo $ex->getFile().'<br />';
 echo $ex->getLine().'<br />';
 }
}

Share this post


Link to post
Share on other sites

Je précise que le même code avec un texte simple fonctionne très bien et donne le résultat escompté :

$resources_product->description->language[0][0] = html_entity_decode('test',ENT_NOQUOTES,'UTF-8');

Share this post


Link to post
Share on other sites

Bonne nouvelle !!!!

Solution trouvée :

Le webservice prestashop utilise des simplexmlelements pour lesquels selon mes lecture du jours la création de cdata n'existe tout bonne pas pas nativement.

 

Mais en modifiant mon code ainsi :

$description='<b>ceci est un nouveau test en gras</b>';

 

Et pour ajouter la description :

$node= dom_import_simplexml($resources_product->description->language[0][0]);
  $no = $node->ownerDocument;
  $node->appendChild($no->createCDATASection($description));

 

A la place de :

$resources_product->description->language[0][0] = $description;

 

Ca fonctionne très bien.

 

Bon il y a peut être plus propre mais c'est déja un pas en avant.

 

Un bug à ce sujet est déjà signalé dans le forge de prestashop.

 

Bon il me reste à traiter du probleme de l'ajout d'image existant mais absolument pas documenté.

 

Je reste à l'écoute de vos suggestions.

Cordialement.

Share this post


Link to post
Share on other sites

@gandal76fr : votre solution marche nickel, merci :wub:

 

Toujours à propos des webservices, j'avais trouvé un bug dans la création de tags qui a été résolue lors du Prestashop Camp de décembre par un des développeurs (très sympa d'ailleurs). Je pense que depuis le patch qu'il avait créé a été intégré dans les dernières versions.

Share this post


Link to post
Share on other sites

salut,

je suis débutante .je travaille sur PrestaShop .J'ai créé un web service avec son clé .Mon problème que j'arrive pas à accéder à ce web service !!!! J'ai suivi ce tutoriel :http://forge.prestashop.com:8081/download/attachments/327702/CRUD+Tutorial+FR.pdf?version=1&modificationDate=1301486808000 Je me suis bloqué au niveau de :Tester l'accès au service web avec le navigateur .Je travaille en localhost :unsure:

Mercii de m'aider .

Share this post


Link to post
Share on other sites

J'ai trouvé la solution ;)

Il faut passé par Localhost/prestashop/webservice/dispatcher.php

pour entrer le clé :)

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More