alejandro999 Posted June 6, 2018 Share Posted June 6, 2018 Estoy teniendo problemas en intentar listar los productos de una tienda prestashop con Webservice. Cuando intento listar todos los productos me da este error: Fatal error: Uncaught exception 'PrestaShopWebserviceException' with message 'This call to PrestaShop Web Services failed and returned an HTTP status of 404. That means: Not Found.' in C:\xampp\htdocs\AppClient\PSWebServiceLibrary.php:85 Stack trace: #0 C:\xampp\htdocs\AppClient\PSWebServiceLibrary.php(269): PrestaShopWebservice->checkStatusCode(404) #1 C:\xampp\htdocs\AppClient\R-Products.php(215): PrestaShopWebservice->get(Array) #2 {main} thrown in C:\xampp\htdocs\AppClient\PSWebServiceLibrary.php on line 85 Alguna idea de cual puede ser el problema? Muchas Gracias!! Link to comment Share on other sites More sharing options...
Alex Sanchez Posted June 12, 2018 Share Posted June 12, 2018 Hola, A simple vista parece, que tu código no está bien creado. Si nos los puedes copiar a lo mejor entre todos podemos ayudarte. Un saludo Link to comment Share on other sites More sharing options...
alejandro999 Posted June 14, 2018 Author Share Posted June 14, 2018 (edited) On 12/6/2018 at 11:47 AM, Alex Sanchez said: Hola, A simple vista parece, que tu código no está bien creado. Si nos los puedes copiar a lo mejor entre todos podemos ayudarte. Un saludo Hola Alex. A ver, la cuestión es que he probado con a realizar la conexión con un prestashop version 1.6.4.1 y funciona perfectamente, puedo listar los productos en una tabla. Pero si pruebo con una version superior no me funciona. ¿Tendrias idea de que puede ser? Te adjunto el codigo. Muchas gracias! Saludos!! <?php function conectar(){ //*******SERVIDOR*******// $dsn = 'localhost'; $usuario = 'root'; $password = ''; $database= 'prestashop'; $mysqli = new mysqli($dsn, $usuario,$password, $database); $mysqli->set_charset("utf8"); if ($mysqli -> connect_errno) { die( "Fallo la conexión a MySQL: (" . $mysqli -> mysqli_connect_errno() . ") " . $mysqli -> mysqli_connect_error()); } else{ /*echo "Conexión exitosa!";*/ return $mysqli; } } function get_productos(){ $mysqli = conectar(); $sql = "SELECT a.`id_product`, b.`name` AS `name`, `reference`, a.`price` AS `price`, sa.`active` AS `active` , shop.`name` AS `shopname`, a.`id_shop_default`, image_shop.`id_image` AS `id_image`, cl.`name` AS `name_category`, sa.`price`, 0 AS `price_final`, a.`is_virtual`, pd.`nb_downloadable`, sav.`quantity` AS `sav_quantity`, sa.`active`, IF(sav.`quantity`<=0, 1, 0) AS `badge_danger` FROM `ps_product` a LEFT JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 1 AND b.`id_shop` = 1) LEFT JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product` AND sav.`id_product_attribute` = 0 AND sav.id_shop = 1 AND sav.id_shop_group = 0 ) JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default) LEFT JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default) LEFT JOIN `ps_shop` shop ON (shop.id_shop = a.id_shop_default) LEFT JOIN `ps_image_shop` image_shop ON (image_shop.`id_product` = a.`id_product` AND image_shop.`cover` = 1 AND image_shop.id_shop = a.id_shop_default) LEFT JOIN `ps_image` i ON (i.`id_image` = image_shop.`id_image`) LEFT JOIN `ps_product_download` pd ON (pd.`id_product` = a.`id_product`) WHERE 1 ORDER BY a.`id_product` ASC LIMIT 0, 50"; $result = mysqli_query($mysqli, $sql); return $result; } function get_link($id){ $mysqli = conectar(); $sql = "SELECT * FROM ps_product_lang WHERE id_product = $id AND id_lang = $id "; $result = mysqli_query($mysqli, $sql); /* array asociativo */ $row = mysqli_fetch_array($result, MYSQLI_ASSOC); return $row; } ?> <table align="center" cellpadding="0" cellspacing="0" > <tr> <th>ID</th> <th>Name</th> <th>Precio</th> <th>Categoria</th> <th>IMAGEN</th> </tr> <?php $productos = get_productos(); if ($productos){ echo "<tr valign='top'><td colspan=\"\"></td></tr>"; $i = 1; while ($row = mysqli_fetch_array($productos, MYSQLI_ASSOC)) { print_r($row); echo "<tr>"; echo "<td>".$row['id_product']."</td>"; echo "<td>".$row['name']."</td>"; echo "<td>".$row['price']."</td>"; echo "<td>".$row['name_category']."</td>"; $link = get_link($row['id_product']); echo "<td><img width='50px' src='http://localhost/prestashop/img/p/".$row['id_product']."/".$row['id_product'].".jpg'></td>"; echo "<td><a href='http://localhost/prestashop/es/camisetas/".$row['id_product']."-".$link['link_rewrite'].".html'>Ver productos</a></td>"; echo "</tr>"; } } else { echo " "; } ?> </table> Edited June 14, 2018 by alejandro999 (see edit history) Link to comment Share on other sites More sharing options...
gusman126 Posted June 15, 2018 Share Posted June 15, 2018 ¿Porque no usas las classes para poder leer la información de productos y todos los datos mas facilmente? Link to comment Share on other sites More sharing options...
alejandro999 Posted June 18, 2018 Author Share Posted June 18, 2018 On 15/6/2018 at 11:53 AM, gusman126 said: ¿Porque no usas las classes para poder leer la información de productos y todos los datos mas facilmente? Buenos dias gusman126, podrias indicarme como usar las clases que me comentas. Gracias! Link to comment Share on other sites More sharing options...
gusman126 Posted June 18, 2018 Share Posted June 18, 2018 (edited) hace 2 horas, alejandro999 dijo: Buenos dias gusman126, podrias indicarme como usar las clases que me comentas. Gracias! Por ejemplo para leer todos los productos $productos = Product::getProducts($id_lang, 0, 0, 'id_product', 'ASC', false, true); Luego si quieres trabajar con los datos de 1 producto en concreto foreach ($productos as $producto){ $id_product = (int)$producto['id_product']; $pro = new Product( $id_product); ................ } aqui el listado completo de classes de la version PS 1.6 https://gmartos.es/indice-de-classes-y-metodos-de-prestashop/ Edited June 18, 2018 by gusman126 (see edit history) Link to comment Share on other sites More sharing options...
alejandro999 Posted June 19, 2018 Author Share Posted June 19, 2018 On 18/6/2018 at 9:43 AM, gusman126 said: Por ejemplo para leer todos los productos $productos = Product::getProducts($id_lang, 0, 0, 'id_product', 'ASC', false, true); Luego si quieres trabajar con los datos de 1 producto en concreto foreach ($productos as $producto){ $id_product = (int)$producto['id_product']; $pro = new Product( $id_product); ................ } aqui el listado completo de classes de la version PS 1.6 https://gmartos.es/indice-de-classes-y-metodos-de-prestashop/ Buenos días!! Muchas gracias por el aporte. Pero me surje una duda. ¿Como puedo utilizar las clases desde fuera del prestashop? El problema es que necesito listar productos por categoría en otra web realizada en Wordpress. Saludos. Gracias!!!! Link to comment Share on other sites More sharing options...
gusman126 Posted June 19, 2018 Share Posted June 19, 2018 hace 6 horas, alejandro999 dijo: Buenos días!! Muchas gracias por el aporte. Pero me surje una duda. ¿Como puedo utilizar las clases desde fuera del prestashop? El problema es que necesito listar productos por categoría en otra web realizada en Wordpress. Saludos. Gracias!!!! mismo servidor o servidor diferente? si usas el mismo servidor , añade la ruta completa de los ficheros init.php y config/config.php de Prestashop. Si usas un servidor diferente, SI debes usar webservice, El codigo que pones en la captura al estar añadiendo el codigo para leer en la base de datos hizo que yo pensara que estaba el codigo que tu hacias en el mismo servidor, Link to comment Share on other sites More sharing options...
alejandro999 Posted June 20, 2018 Author Share Posted June 20, 2018 14 hours ago, gusman126 said: mismo servidor o servidor diferente? si usas el mismo servidor , añade la ruta completa de los ficheros init.php y config/config.php de Prestashop. Si usas un servidor diferente, SI debes usar webservice, El codigo que pones en la captura al estar añadiendo el codigo para leer en la base de datos hizo que yo pensara que estaba el codigo que tu hacias en el mismo servidor, Es en un servidor diferente. Tendré que seguir probando con Webservice. Muchas gracias por tu ayuda igualmente. Saludos! Link to comment Share on other sites More sharing options...
gusman126 Posted June 20, 2018 Share Posted June 20, 2018 hace 1 hora, alejandro999 dijo: Es en un servidor diferente. Tendré que seguir probando con Webservice. Muchas gracias por tu ayuda igualmente. Saludos! Ok, el codigo que has puesto no es correcto para pedir información por webservice a un prestashop. Yo uso este $api = 'TU API'; $url = 'URL de prestashop'; $orden ='products?filter[active]=[1]&sort=[id_DESC]'; $datos = self::getdata($api,$url,$orden); public function getdata($api,$url,$orden){ //Orden general para recuperar la infor de WS try { $webService = new PrestaShopWebservice($url, $api,false); // Here we set the option array for the Webservice : we want customers resources $opt['resource'] = (string)$orden; // Call $xml = $webService->get($opt); // Here we get the elements from children of customers markup "customer" } catch (PrestaShopWebserviceException $e) { // Here we are dealing with errors $trace = $e->getTrace(); if ($trace[0]['args'][0] == 404) ; else if ($trace[0]['args'][0] == 401) ; else ; echo $e; echo $trace; } return $xml; } Link to comment Share on other sites More sharing options...
alejandro999 Posted June 20, 2018 Author Share Posted June 20, 2018 1 hour ago, gusman126 said: Ok, el codigo que has puesto no es correcto para pedir información por webservice a un prestashop. Yo uso este $api = 'TU API'; $url = 'URL de prestashop'; $orden ='products?filter[active]=[1]&sort=[id_DESC]'; $datos = self::getdata($api,$url,$orden); public function getdata($api,$url,$orden){ //Orden general para recuperar la infor de WS try { $webService = new PrestaShopWebservice($url, $api,false); // Here we set the option array for the Webservice : we want customers resources $opt['resource'] = (string)$orden; // Call $xml = $webService->get($opt); // Here we get the elements from children of customers markup "customer" } catch (PrestaShopWebserviceException $e) { // Here we are dealing with errors $trace = $e->getTrace(); if ($trace[0]['args'][0] == 404) ; else if ($trace[0]['args'][0] == 401) ; else ; echo $e; echo $trace; } return $xml; } Perfecto!!!!He utilizado tu código y obtengo la respuesta de los productos. "object(SimpleXMLElement)#5 (1) { ["product"]=> array(622) { [0]=> object(SimpleXMLElement)#1 (1) { ["@attributes"]=> array(1) { ["id"]=> string(3) "785" } }" ¿Como podría acceder a los atributos del productos como por ejemplo nombre, precio etc...? Me gustaría poder listar en una tabla los productos con precio y nombre del producto. MUCHISIMAS GRACIAS!!! Link to comment Share on other sites More sharing options...
gusman126 Posted June 20, 2018 Share Posted June 20, 2018 (edited) hace 2 horas, alejandro999 dijo: Perfecto!!!!He utilizado tu código y obtengo la respuesta de los productos. "object(SimpleXMLElement)#5 (1) { ["product"]=> array(622) { [0]=> object(SimpleXMLElement)#1 (1) { ["@attributes"]=> array(1) { ["id"]=> string(3) "785" } }" ¿Como podría acceder a los atributos del productos como por ejemplo nombre, precio etc...? Me gustaría poder listar en una tabla los productos con precio y nombre del producto. MUCHISIMAS GRACIAS!!! Lo primero : Siento que sea tan limitado y que ponga tan poca información, pero es una de las cosas que mas me ha costado aprender, el uso del webservice de prestashop y me niego a explicar con todo detalle y dar gratis algo que realmente me ha costado semanas saber bien como funciona y algo que los de prestashop deberian tener y poner publicos unos tutoriales o ayudas mas claros y gratuitos que para eso lo tienen como un negocio como algunos de nosotros. El foro esta para ayudar y ayudare todo lo posible, pero no hare tutoriales o cursos sin tener un beneficio por el tiempo invertido Ver datos de producto $orden = 'products/'.$id_product; $datosp = self::getdata($api,$url,$orden); añades los atributos, imagenes etc.... a un array foreach ($datosp as $producto){ $productos[] = array ( 'id' => (int)$id_product, 'reference' => (string)$reference, 'name' => (string)$producto->name->language[0], 'refprov' => $producto->reference, 'ean13' => $producto->ean13, 'pvp' => $producto->price, 'stock' => $producto->quantity[0], 'combinations' => $producto->associations->combinations, 'images' => $producto->associations->images, 'cover' => $producto->id_default_image, 'features' => $featuresp, 'active' => $producto->active, ); } lees la caracteristica foreach($featuresp as $featur){ $idv = $featur['id_feature_value']; $orden = 'product_feature_values'.'/'.$idv; $datosa = self::getdata($api,$url,$orden); } lees los datos y valores de la caracteristica foreach ($datosa as $valuesn){ $idfe = $valuesn->id_feature; $orden = 'product_features'.'/'.$idfe; $datosa = self::getdata($api,$url,$orden); } Combinaciones $orden = 'combinations'.'/'.$idc; $datosc = self::getdata($api,$url,$orden); Valor de esas combinaciones $orden = 'product_option_values'.'/'.$id_product_attribute; $datosov = self::getdata($api,$url,$orden); y asi vas leyendo todos los datos de un producto. imagenes , foreach($productosfin['images'] as $img){ $imgor = $img['id']; $url = 'https://'.$api.'@'.$domain.'/api/images/products/'.$productosfin['id_original'].'/'.$imgor; } Edited June 20, 2018 by gusman126 (see edit history) Link to comment Share on other sites More sharing options...
ruthcast Posted October 23, 2019 Share Posted October 23, 2019 On 6/20/2018 at 3:27 AM, gusman126 said: Hola a todos. Chicos estoy muy nueva en esto del consumo de webservices desde prestashop, tengo una tienda en la que necesito listar los productos en una tabla desde un webservice, la pregunta es. Para iniciar, es necesario crear un modulo nuevo para esto? En caso de que no. En cual archivo de php puedo colocar la llamada al webservice para mostrar luego esta tabla, considerando que la tabla donde pretendo mostrar los productos esta en una pagina estática que creo en page.tpl. Les agradezco su ayuda. Estoy con la version 1.7 y utilizo el theme classic Ok, el codigo que has puesto no es correcto para pedir información por webservice a un prestashop. Yo uso este $api = 'TU API'; $url = 'URL de prestashop'; $orden ='products?filter[active]=[1]&sort=[id_DESC]'; $datos = self::getdata($api,$url,$orden); public function getdata($api,$url,$orden){ //Orden general para recuperar la infor de WS try { $webService = new PrestaShopWebservice($url, $api,false); // Here we set the option array for the Webservice : we want customers resources $opt['resource'] = (string)$orden; // Call $xml = $webService->get($opt); // Here we get the elements from children of customers markup "customer" } catch (PrestaShopWebserviceException $e) { // Here we are dealing with errors $trace = $e->getTrace(); if ($trace[0]['args'][0] == 404) ; else if ($trace[0]['args'][0] == 401) ; else ; echo $e; echo $trace; } return $xml; } Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now