Victor Casajuana Mas Posted September 20, 2020 Share Posted September 20, 2020 Hola. Según https://devdocs.prestashop.com/1.7/webservice/resources/products/ el único campo requerido para crear artículos por el API del webservice es Price pero cuando le envío el XML para crear el artículo me da error, he realizado pruebas y como mínimo he de enviarle la siguiente información: id_shop_default is_virtual state online_only low_stock_alert price wholesale_price active available_for_order show_price indexed link_rewrite name Me extraña que en la documentación solo requiera precio pero si no lo envío más completo no me lo acepta. El XML mínimo que he de enviarle es el siguiente: <?xml version="1.0" encoding="UTF-8"?> <prestashop xmlns:xlink="http://www.w3.org/1999/xlink"> <product> <id_shop_default> <![CDATA[1]]> </id_shop_default> <is_virtual> <![CDATA[0]]> </is_virtual> <state> <![CDATA[1]]> </state> <online_only> <![CDATA[0]]> </online_only> <low_stock_alert> <![CDATA[0]]> </low_stock_alert> <price> <![CDATA[0.000000]]> </price> <wholesale_price> <![CDATA[0.000000]]> </wholesale_price> <active> <![CDATA[1]]> </active> <available_for_order> <![CDATA[1]]> </available_for_order> <show_price> <![CDATA[1]]> </show_price> <indexed> <![CDATA[1]]> </indexed> <link_rewrite> <language id="1"> <![CDATA[]]> </language> </link_rewrite> <name> <language id="1"> <![CDATA[ARTICULO NUEVO]]> </language> </name> </product> </prestashop> No me importa en enviarlo todo pero me extraña. Mi pregunta es; a la hora de crear productos o cualquier otro recurso, es aconsejable tomar todo el recurso desde ?schema=blank, modificar lo que deseas y enviarlo en XML por PUT o POST o crearlo y enviar solo lo que realmente necesitas para crearlo? Link to comment Share on other sites More sharing options...
gusman126 Posted September 23, 2020 Share Posted September 23, 2020 Esto es lo que yo hago... function addproduct($id_product,$url,$api,$id_original){ $hoy = date_create(date('Y-m-d')); $id_lang = Configuration::get('PS_LANG_DEFAULT'); $product = new Product($id_product); $id_category = $product->id_category_default; $stock = StockAvailable::getQuantityAvailableByProduct($id_product,$id_product_attribute = null, $id_shop = null);; $id_category_default = checkcat($id_category,$url,$api); $webService = new PrestaShopWebservice($url, $api, false); $xml = $webService->get( array( 'url' => $url .'api/products?schema=blank' ) ); $xml->product->id_category_default = $id_category_default; $xml->product->reference = $product->reference; $xml->product->new = $product->new; $xml->product->ean13 = $product->ean13; $xml->product->on_sale = $product->on_sale; $xml->product->minimal_quantity = 1; $xml->product->id_tax_rules_group = 1; $xml->product->id_shop_default = 1; //$xml->product->quantity = $stock; $xml->product->show_price = $product->show_price; $xml->product->date_add = $product->date_add; $xml->product->state = $product->state; $xml->product->online_only = $product->online_only; $xml->product->minimal_quantity = $product->minimal_quantity; $xml->product->low_stock_threshold = $product->low_stock_threshold; $xml->product->low_stock_alert = $product->low_stock_alert; $xml->product->price = $product->price; $xml->product->unity = $product->unity; $xml->product->unit_price_ratio = $product->unit_price_ratio; $xml->product->active = $product->active; $xml->product->available_for_order = $product->available_for_order; $xml->product->available_date = $product->available_date; $xml->product->condition = $product->condition; $xml->product->show_price = $product->show_price; $xml->product->visibility = $product->visibility; $xml->product->advanced_stock_management = $product->advanced_stock_management; $xml->product->name->language[0] = $product->name[$id_lang]; $xml->product->link_rewrite->language[0] = $product->link_rewrite[$id_lang]; $xml->product->description->language[0] = $product->description[$id_lang]; $xml->product->description_short->language[0] = $product->description_short[$id_lang]; $xml->product->associations->categories->category->id = $id_category_default; $xmld =$xml->asXML(); $logfile = fopen(dirname(__FILE__).'/xml_blank/product_full.xml', "w"); fwrite($logfile, $xmld); $webService = new PrestaShopWebservice($url, $api, false); $opt = array( 'resource' => 'products' ); $opt['postXml'] = $xml->asXML(); $xmlres = $webService->add( $opt ); $id_product = $xmlres->product->id; addimage($id_original,$id_product,$api,$url); $combinations = $product->getAttributesResume($id_lang); $imagescombis= $product->getCombinationImages($id_lang); if($combinations){ foreach($combinations as $combination){ $id_product_attribute = $combination['id_product_attribute']; /*$imgscombis = array(); foreach($imagescombis as $imagecombi){ if($imagecombi["id_product_attribute"] == $id_product_attribute){ $imgscombis[] = $imagecombi["id_image"]; } }*/ $datosatts = Product::getAttributesParams($id_original, $id_product_attribute); $valores = array(); foreach($datosatts as $datoatts){ $valores[] = checkattr($url, $api,$datoatts); } addcombi($url, $api,$id_product,$combination,$valores,$imgscombis,$imagenes); echo '</pre>'; } } echo '<br>Añadido el producto!'.$xmlres->product->reference; asocseller($url, $api,$id_product); } Y aqui todo el codigo completo, es de un modulo que tengo que envia productos de un prestashop a otro que tiene instalado el modulo de knowband de marketplace, para que se puedan añadir productos por cada vendedor que ya tenga un PS Lo de añadir las imagenes es lo que mas me costo encontrar como hacerlo $sql = "select * from "._DB_PREFIX_."product where id_product > ".$lastid." order by id_product ASC limit 6000"; $productos = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql); if(count($productos) < 50){ $filecontrol = dirname(__FILE__).'/logs/lastpr.txt'; $idfile = fopen($filecontrol, "w"); fwrite($idfile, 0); $lastid = 0; $sql = "select * from "._DB_PREFIX_."product where id_product > ".$lastid." order by id_product ASC"; $productos = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql); } foreach($productos as $producto){ $id_product = $producto["id_product"]; $id_original = $id_product; $product = new Product($id_product); $opt = array( 'resource' => 'products', 'filter[reference]' => $product->reference, ); $webService = new PrestaShopWebservice($url, $api,false); $xmlpr = $webService->get($opt); if(!isset($xmlpr->products->product)){ echo 'No exite producto! --->'.$product->reference; addproduct($id_product,$url,$api,$id_original); }else{ continue; } } function addproduct($id_product,$url,$api,$id_original){ $hoy = date_create(date('Y-m-d')); $id_lang = Configuration::get('PS_LANG_DEFAULT'); $product = new Product($id_product); $id_category = $product->id_category_default; $stock = StockAvailable::getQuantityAvailableByProduct($id_product,$id_product_attribute = null, $id_shop = null);; $id_category_default = checkcat($id_category,$url,$api); $webService = new PrestaShopWebservice($url, $api, false); $xml = $webService->get( array( 'url' => $url .'api/products?schema=blank' ) ); $xml->product->id_category_default = $id_category_default; $xml->product->reference = $product->reference; $xml->product->new = $product->new; $xml->product->ean13 = $product->ean13; $xml->product->on_sale = $product->on_sale; $xml->product->minimal_quantity = 1; $xml->product->id_tax_rules_group = 1; $xml->product->id_shop_default = 1; //$xml->product->quantity = $stock; $xml->product->show_price = $product->show_price; $xml->product->date_add = $product->date_add; $xml->product->state = $product->state; $xml->product->online_only = $product->online_only; $xml->product->minimal_quantity = $product->minimal_quantity; $xml->product->low_stock_threshold = $product->low_stock_threshold; $xml->product->low_stock_alert = $product->low_stock_alert; $xml->product->price = $product->price; $xml->product->unity = $product->unity; $xml->product->unit_price_ratio = $product->unit_price_ratio; $xml->product->active = $product->active; $xml->product->available_for_order = $product->available_for_order; $xml->product->available_date = $product->available_date; $xml->product->condition = $product->condition; $xml->product->show_price = $product->show_price; $xml->product->visibility = $product->visibility; $xml->product->advanced_stock_management = $product->advanced_stock_management; $xml->product->name->language[0] = $product->name[$id_lang]; $xml->product->link_rewrite->language[0] = $product->link_rewrite[$id_lang]; $xml->product->description->language[0] = $product->description[$id_lang]; $xml->product->description_short->language[0] = $product->description_short[$id_lang]; $xml->product->associations->categories->category->id = $id_category_default; $xmld =$xml->asXML(); $logfile = fopen(dirname(__FILE__).'/xml_blank/product_full.xml', "w"); fwrite($logfile, $xmld); $webService = new PrestaShopWebservice($url, $api, false); $opt = array( 'resource' => 'products' ); $opt['postXml'] = $xml->asXML(); $xmlres = $webService->add( $opt ); $id_product = $xmlres->product->id; addimage($id_original,$id_product,$api,$url); $combinations = $product->getAttributesResume($id_lang); $imagescombis= $product->getCombinationImages($id_lang); if($combinations){ foreach($combinations as $combination){ $id_product_attribute = $combination['id_product_attribute']; /*$imgscombis = array(); foreach($imagescombis as $imagecombi){ if($imagecombi["id_product_attribute"] == $id_product_attribute){ $imgscombis[] = $imagecombi["id_image"]; } }*/ $datosatts = Product::getAttributesParams($id_original, $id_product_attribute); $valores = array(); foreach($datosatts as $datoatts){ $valores[] = checkattr($url, $api,$datoatts); } addcombi($url, $api,$id_product,$combination,$valores,$imgscombis,$imagenes); echo '</pre>'; } } echo '<br>Añadido el producto!'.$xmlres->product->reference; asocseller($url, $api,$id_product); } function addcombi($url, $api,$id_product,$combination,$valores,$imgscombis,$imagenes){ $webService = new PrestaShopWebservice($url, $api, false); $xml = $webService->get( array( 'url' => $url .'api/combinations?schema=blank')); unset($xml->combination->id); unset($xml->combination->associations->product_option_values); unset($xml->combination->associations->images); $xml->combination->id_product = $id_product; $xml->combination->location = ''; $xml->combination->ean13 = (string)$combination['ean13']; $xml->combination->isbn = $combination['isbn']; $xml->combination->upc = $combination['upc']; $xml->combination->quantity = $combination['quantity']; $xml->combination->reference = $combination['reference']; $xml->combination->supplier_reference = $combination['supplier_reference']; $xml->combination->wholesale_price = $combination['wholesale_price']; $xml->combination->price = $combination['price']; $xml->combination->ecotax = $combination['ecotax']; $xml->combination->weight = $combination['weight']; $xml->combination->unit_price_impact = $combination['unit_price_impact']; $xml->combination->minimal_quantity = $combination['minimal_quantity']; $xml->combination->low_stock_threshold = $combination['low_stock_threshold']; $xml->combination->low_stock_alert = $combination['low_stock_alert']; $xml->combination->default_on = $combination['default_on']; $xml->combination->available_date = $combination['available_date']; $lin = 0; $product_option_values = $xml->combination->associations->addChild('product_option_values'); foreach($valores as $valor){ $product_option_value = $product_option_values->addChild('product_option_value'); $product_option_value->id = $valor; $lin ++; } $imagenesc = $xml->combination->associations->addChild('images'); foreach($imgscombis as $imgc){ $foto = $imagenesc->addChild('image'); $foto->id =0 ; $xml->combination->associations->images->image->id = $imagenes[$combination['id_image']]; } $webService = new PrestaShopWebservice($url, $api, false); $opt = array( 'resource' => 'combinations' ); $opt['postXml'] = $xml->asXML(); $xmlres = $webService->add( $opt ); return ; } function checkattr($url, $api,$datoatts){ $grupo = $datoatts['group']; $name = $datoatts["name"]; $webService = new PrestaShopWebservice($url, $api, false); $opt = array( 'resource' => 'product_options', 'filter[name]' => $grupo, 'display' => 'full' ); $webService = new PrestaShopWebservice($url, $api, false); $xmlcat = $webService->get($opt); $valores = array(); if(!$xmlcat->product_options->product_option){ $idgrupo = addgrupo($url, $api,$datoatts); $id_option_value = addvalor($url, $api,$datoatts,$idgrupo); $valores = (int)$id_option_value; }else{ $idgrupo = $xmlcat->product_options->product_option->id; $name = $datoatts['name']; $opt = array( 'resource' => 'product_option_values', 'filter[id_attribute_group]' => (int)$idgrupo, 'filter[name]' => $name, 'display' => 'full' ); $webService = new PrestaShopWebservice($url, $api, false); $xmlcat = $webService->get($opt); if(!$xmlcat->product_option_values->product_option_value){ $id_option_value = addvalor($url, $api,$datoatts,$idgrupo); }else{ $id_option_value = $xmlcat->product_option_values->product_option_value->id ; } $valores = (int)$id_option_value; //$id_option_value = addvalor($url, $api,$datoatts,$idgrupo); /*array( 'grupo' => (int)$idgrupo, 'atributo' => (int)$id_option_value );*/ } return $valores; } function addvalor($url, $api,$datoatts,$idgrupo){ $webService = new PrestaShopWebservice($url, $api, false); $xml = $webService->get( array( 'url' => $url .'api/product_option_values?schema=blank')); unset($xml->product_option_value->id); $xml->product_option_value->id_attribute_group = $idgrupo; $xml->product_option_value->position = 0; $xml->product_option_value->name->language[0]= $datoatts['name']; $opt = array( 'resource' => 'product_option_values' ); $opt['postXml'] = $xml->asXML(); $xmlres = $webService->add( $opt ); return $xmlres->product_option_value->id; } function addgrupo($url, $api,$datoatts){ $grupo = $datoatts['group']; $webService = new PrestaShopWebservice($url, $api, false); $xml = $webService->get( array( 'url' => $url .'api/product_options?schema=blank')); unset($xml->product_option->id); $xml->product_option->is_color_group= 0; $xml->product_option->group_type = 'radio'; $xml->product_option->position = 0; $xml->product_option->name->language[0]= $grupo; $xml->product_option->public_name->language[0]= $grupo; $webService = new PrestaShopWebservice($url, $api, false); $opt = array( 'resource' => 'product_options' ); $opt['postXml'] = $xml->asXML(); $xmlres = $webService->add( $opt ); return $xmlres->product_option->id; } function addstock($url, $api,$id_product,$stock){ echo '<br>Añadiendo Stock!'; $webService = new PrestaShopWebservice($url, $api, false); $xml = $webService->get( array( 'url' => $url .'api/stock_availables?schema=blank' ) ); unset($xml->stock_available->id); $xml->stock_available->id_product = $id_product; //$xml->stock_available->stock_available =11; $xml->stock_available->id_product_attribute = 0; $xml->stock_available->id_shop = 1; $xml->stock_available->quantity = 11; $xml->stock_available->depends_on_stock = 0; $xml->stock_available->out_of_stock = 0; $webService = new PrestaShopWebservice($url, $api, false); $opt = array( 'resource' => 'stock_availables' ); $opt['postXml'] = $xml->asXML(); $xmlres = $webService->add( $opt ); } function checkcat($id_category,$url,$api){ $id_lang = Configuration::get('PS_LANG_DEFAULT'); $category = new Category($id_category); $cat_name = $category->name[$id_lang]; $catmarket = Configuration::get('QUINTANAR_MARKETPLACE_CATSELLER'); $opt = array( 'resource' => 'categories', 'filter[name]' => $cat_name, 'display' => 'full' ); $webService = new PrestaShopWebservice($url, $api, false); $xmlcat = $webService->get($opt); if(!isset($xmlcat->categories->category)){ $id_parent = (string)$category->id_parent; if($id_parent == '2'){ $id_parent = (string)$catmarket; } echo '<br>No exite Categoria--> Añadiendo!!!!'.$id_category.'---'.(string)$id_parent; $id_category_default = addcat($id_category,$url,$api,$id_parent); return $id_category_default ; }else{ $id_category_default = $xmlcat->categories->category->id; return $id_category_default ; } } function addcat($id_category,$url,$api,$id_parent){ $hoy = date_create(date('Y-m-d')); $id_lang = Configuration::get('PS_LANG_DEFAULT'); $category = new Category($id_category); $webService = new PrestaShopWebservice($url, $api, false); $xml = $webService->get( array( 'url' => $url .'api/categories?schema=blank' ) ); $id_parent = checkcat($id_parent,$url,$api); $xml->category->id_parent = $id_parent; $xml->category->active = 1; $xml->category->date_add = $hoy; $xml->category->is_root_category = false; $xml->category->id_shop_default = 1; $xml->category->position = 0; //$xml->category->associations->categories->category-> 2; $xml->category->name->language[0] = $category->name[$id_lang]; $xml->category->link_rewrite->language[0] = $category->link_rewrite[$id_lang]; $xml->category->description->language[0] = $category->description[$id_lang]; $xmld =$xml->asXML(); $logfile = fopen(dirname(__FILE__).'/xml_blank/category_full.xml', "w"); fwrite($logfile, $xmld); try{ $webService = new PrestaShopWebservice($url, $api, false); $opt = array( 'resource' => 'categories' ); $opt['postXml'] = $xml->asXML(); $xmlres = $webService->add( $opt ); }catch(Exception $e){ echo '<br>Error!!!'; print_r($e); $logfile = fopen(dirname(__FILE__).'/error_.log', "w"); fwrite($logfile, $e); return false; } return $xmlres->category->id; } function addimage($id_original,$id_product,$api,$url){ $id_lang = Configuration::get('PS_LANG_DEFAULT'); $images = Image::getImages($id_lang, $id_original); $product = new Product($id_original); $fotos = array(); foreach($images as $image){ $image_id = $image['id_image']; $linki = new Link(); $value = $linki->getImageLink($product->link_rewrite[$id_lang], $image_id, 'large_default'); $url_img = 'https://' . $value; $image_path = geturl($id_original,$image_id,$url_img,$api); $urlImage = $url.'/api/images/products/'.$id_product.''; $image_mime = 'image/jpg'; $args['image'] = new CurlFile($image_path, $image_mime); $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLINFO_HEADER_OUT, 1); curl_setopt($ch, CURLOPT_URL, $urlImage); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_USERPWD, $api.':'); curl_setopt($ch, CURLOPT_POSTFIELDS, $args); $result = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); unlink($image_path); } return ; } function geturl($id_original,$image_id,$url_img,$api){ $curl = curl_init(); $apien = base64_encode($api); curl_setopt_array($curl, array( CURLOPT_URL => $url_img, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( ": ", "Authorization: Basic ".$apien, ) )); $response = curl_exec($curl); if(curl_errno($curl)) { echo 'Curl error: ' . curl_error($curl); return; } curl_close($curl); $savefile = fopen(dirname(__FILE__).'/tmp'.$id_original.'_'.$image_id.'.jpg', 'w'); fwrite($savefile, $response); fclose($savefile); $dominio = Tools::getHttpHost(true).__PS_BASE_URI__; $image_url = 'tmp'.$id_original.'_'.$image_id.'.jpg'; return $image_url; } Link to comment Share on other sites More sharing options...
Victor Casajuana Mas Posted September 23, 2020 Author Share Posted September 23, 2020 Gracias por la info!!!! más o menos es como lo hago yo ahora. Me bajo los schema en blanco y los relleno, aunque en la documentación dice que como campos obligatorios para el producto son el precio, nanai, si le envías un xml con el precio solo te lo escupe, que se entiende, porque le hace falta la tienda, categoría, etc... pero al menos que lo diga en la doc... Lo que no he visto en tu fuente es para "modificar" productos o cualquier otro recurso (PUT) Yo lo estoy haciendo en otro lenguaje (harbour) y de momento tengo un escollo ya que no dispongo de la función curl_file(), estoy investigando a ver que opciones tengo, porque no sé realmente que devuelve esta función. Link to comment Share on other sites More sharing options...
elenaso Posted September 23, 2020 Share Posted September 23, 2020 21 minutes ago, gusman126 said: Esto es lo que yo hago... function addproduct($id_product,$url,$api,$id_original){ $hoy = date_create(date('Y-m-d')); $id_lang = Configuration::get('PS_LANG_DEFAULT'); $product = new Product($id_product); $id_category = $product->id_category_default; $stock = StockAvailable::getQuantityAvailableByProduct($id_product,$id_product_attribute = null, $id_shop = null);; $id_category_default = checkcat($id_category,$url,$api); $webService = new PrestaShopWebservice($url, $api, false); $xml = $webService->get( array( 'url' => $url .'api/products?schema=blank' ) ); $xml->product->id_category_default = $id_category_default; $xml->product->reference = $product->reference; $xml->product->new = $product->new; $xml->product->ean13 = $product->ean13; $xml->product->on_sale = $product->on_sale; $xml->product->minimal_quantity = 1; $xml->product->id_tax_rules_group = 1; $xml->product->id_shop_default = 1; //$xml->product->quantity = $stock; $xml->product->show_price = $product->show_price; $xml->product->date_add = $product->date_add; $xml->product->state = $product->state; $xml->product->online_only = $product->online_only; $xml->product->minimal_quantity = $product->minimal_quantity; $xml->product->low_stock_threshold = $product->low_stock_threshold; $xml->product->low_stock_alert = $product->low_stock_alert; $xml->product->price = $product->price; $xml->product->unity = $product->unity; $xml->product->unit_price_ratio = $product->unit_price_ratio; $xml->product->active = $product->active; $xml->product->available_for_order = $product->available_for_order; $xml->product->available_date = $product->available_date; $xml->product->condition = $product->condition; $xml->product->show_price = $product->show_price; $xml->product->visibility = $product->visibility; $xml->product->advanced_stock_management = $product->advanced_stock_management; $xml->product->name->language[0] = $product->name[$id_lang]; $xml->product->link_rewrite->language[0] = $product->link_rewrite[$id_lang]; $xml->product->description->language[0] = $product->description[$id_lang]; $xml->product->description_short->language[0] = $product->description_short[$id_lang]; $xml->product->associations->categories->category->id = $id_category_default; $xmld =$xml->asXML(); $logfile = fopen(dirname(__FILE__).'/xml_blank/product_full.xml', "w"); fwrite($logfile, $xmld); $webService = new PrestaShopWebservice($url, $api, false); $opt = array( 'resource' => 'products' ); $opt['postXml'] = $xml->asXML(); $xmlres = $webService->add( $opt ); $id_product = $xmlres->product->id; addimage($id_original,$id_product,$api,$url); $combinations = $product->getAttributesResume($id_lang); $imagescombis= $product->getCombinationImages($id_lang); if($combinations){ foreach($combinations as $combination){ $id_product_attribute = $combination['id_product_attribute']; /*$imgscombis = array(); foreach($imagescombis as $imagecombi){ if($imagecombi["id_product_attribute"] == $id_product_attribute){ $imgscombis[] = $imagecombi["id_image"]; } }*/ $datosatts = Product::getAttributesParams($id_original, $id_product_attribute); $valores = array(); foreach($datosatts as $datoatts){ $valores[] = checkattr($url, $api,$datoatts); } addcombi($url, $api,$id_product,$combination,$valores,$imgscombis,$imagenes); echo '</pre>'; } } echo '<br>Añadido el producto!'.$xmlres->product->reference; asocseller($url, $api,$id_product); } Y aqui todo el codigo completo, es de un modulo que tengo que envia productos de un prestashop a otro que tiene instalado el modulo de knowband de marketplace, para que se puedan añadir productos por cada vendedor que ya tenga un PS Lo de añadir las imagenes es lo que mas me costo encontrar como hacerlo $sql = "select * from "._DB_PREFIX_."product where id_product > ".$lastid." order by id_product ASC limit 6000"; $productos = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql); if(count($productos) < 50){ $filecontrol = dirname(__FILE__).'/logs/lastpr.txt'; $idfile = fopen($filecontrol, "w"); fwrite($idfile, 0); $lastid = 0; $sql = "select * from "._DB_PREFIX_."product where id_product > ".$lastid." order by id_product ASC"; $productos = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql); } foreach($productos as $producto){ $id_product = $producto["id_product"]; $id_original = $id_product; $product = new Product($id_product); $opt = array( 'resource' => 'products', 'filter[reference]' => $product->reference, ); $webService = new PrestaShopWebservice($url, $api,false); $xmlpr = $webService->get($opt); if(!isset($xmlpr->products->product)){ echo 'No exite producto! --->'.$product->reference; addproduct($id_product,$url,$api,$id_original); }else{ continue; } } function addproduct($id_product,$url,$api,$id_original){ $hoy = date_create(date('Y-m-d')); $id_lang = Configuration::get('PS_LANG_DEFAULT'); $product = new Product($id_product); $id_category = $product->id_category_default; $stock = StockAvailable::getQuantityAvailableByProduct($id_product,$id_product_attribute = null, $id_shop = null);; $id_category_default = checkcat($id_category,$url,$api); $webService = new PrestaShopWebservice($url, $api, false); $xml = $webService->get( array( 'url' => $url .'api/products?schema=blank' ) ); $xml->product->id_category_default = $id_category_default; $xml->product->reference = $product->reference; $xml->product->new = $product->new; $xml->product->ean13 = $product->ean13; $xml->product->on_sale = $product->on_sale; $xml->product->minimal_quantity = 1; $xml->product->id_tax_rules_group = 1; $xml->product->id_shop_default = 1; //$xml->product->quantity = $stock; $xml->product->show_price = $product->show_price; $xml->product->date_add = $product->date_add; $xml->product->state = $product->state; $xml->product->online_only = $product->online_only; $xml->product->minimal_quantity = $product->minimal_quantity; $xml->product->low_stock_threshold = $product->low_stock_threshold; $xml->product->low_stock_alert = $product->low_stock_alert; $xml->product->price = $product->price; $xml->product->unity = $product->unity; $xml->product->unit_price_ratio = $product->unit_price_ratio; $xml->product->active = $product->active; $xml->product->available_for_order = $product->available_for_order; $xml->product->available_date = $product->available_date; $xml->product->condition = $product->condition; $xml->product->show_price = $product->show_price; $xml->product->visibility = $product->visibility; $xml->product->advanced_stock_management = $product->advanced_stock_management; $xml->product->name->language[0] = $product->name[$id_lang]; $xml->product->link_rewrite->language[0] = $product->link_rewrite[$id_lang]; $xml->product->description->language[0] = $product->description[$id_lang]; $xml->product->description_short->language[0] = $product->description_short[$id_lang]; $xml->product->associations->categories->category->id = $id_category_default; $xmld =$xml->asXML(); $logfile = fopen(dirname(__FILE__).'/xml_blank/product_full.xml', "w"); fwrite($logfile, $xmld); $webService = new PrestaShopWebservice($url, $api, false); $opt = array( 'resource' => 'products' ); $opt['postXml'] = $xml->asXML(); $xmlres = $webService->add( $opt ); $id_product = $xmlres->product->id; addimage($id_original,$id_product,$api,$url); $combinations = $product->getAttributesResume($id_lang); $imagescombis= $product->getCombinationImages($id_lang); if($combinations){ foreach($combinations as $combination){ $id_product_attribute = $combination['id_product_attribute']; /*$imgscombis = array(); foreach($imagescombis as $imagecombi){ if($imagecombi["id_product_attribute"] == $id_product_attribute){ $imgscombis[] = $imagecombi["id_image"]; } }*/ $datosatts = Product::getAttributesParams($id_original, $id_product_attribute); $valores = array(); foreach($datosatts as $datoatts){ $valores[] = checkattr($url, $api,$datoatts); } addcombi($url, $api,$id_product,$combination,$valores,$imgscombis,$imagenes); echo '</pre>'; } } echo '<br>Añadido el producto!'.$xmlres->product->reference; asocseller($url, $api,$id_product); } function addcombi($url, $api,$id_product,$combination,$valores,$imgscombis,$imagenes){ $webService = new PrestaShopWebservice($url, $api, false); $xml = $webService->get( array( 'url' => $url .'api/combinations?schema=blank')); unset($xml->combination->id); unset($xml->combination->associations->product_option_values); unset($xml->combination->associations->images); $xml->combination->id_product = $id_product; $xml->combination->location = ''; $xml->combination->ean13 = (string)$combination['ean13']; $xml->combination->isbn = $combination['isbn']; $xml->combination->upc = $combination['upc']; $xml->combination->quantity = $combination['quantity']; $xml->combination->reference = $combination['reference']; $xml->combination->supplier_reference = $combination['supplier_reference']; $xml->combination->wholesale_price = $combination['wholesale_price']; $xml->combination->price = $combination['price']; $xml->combination->ecotax = $combination['ecotax']; $xml->combination->weight = $combination['weight']; $xml->combination->unit_price_impact = $combination['unit_price_impact']; $xml->combination->minimal_quantity = $combination['minimal_quantity']; $xml->combination->low_stock_threshold = $combination['low_stock_threshold']; $xml->combination->low_stock_alert = $combination['low_stock_alert']; $xml->combination->default_on = $combination['default_on']; $xml->combination->available_date = $combination['available_date']; $lin = 0; $product_option_values = $xml->combination->associations->addChild('product_option_values'); foreach($valores as $valor){ $product_option_value = $product_option_values->addChild('product_option_value'); $product_option_value->id = $valor; $lin ++; } $imagenesc = $xml->combination->associations->addChild('images'); foreach($imgscombis as $imgc){ $foto = $imagenesc->addChild('image'); $foto->id =0 ; $xml->combination->associations->images->image->id = $imagenes[$combination['id_image']]; } $webService = new PrestaShopWebservice($url, $api, false); $opt = array( 'resource' => 'combinations' ); $opt['postXml'] = $xml->asXML(); $xmlres = $webService->add( $opt ); return ; } function checkattr($url, $api,$datoatts){ $grupo = $datoatts['group']; $name = $datoatts["name"]; $webService = new PrestaShopWebservice($url, $api, false); $opt = array( 'resource' => 'product_options', 'filter[name]' => $grupo, 'display' => 'full' ); $webService = new PrestaShopWebservice($url, $api, false); $xmlcat = $webService->get($opt); $valores = array(); if(!$xmlcat->product_options->product_option){ $idgrupo = addgrupo($url, $api,$datoatts); $id_option_value = addvalor($url, $api,$datoatts,$idgrupo); $valores = (int)$id_option_value; }else{ $idgrupo = $xmlcat->product_options->product_option->id; $name = $datoatts['name']; $opt = array( 'resource' => 'product_option_values', 'filter[id_attribute_group]' => (int)$idgrupo, 'filter[name]' => $name, 'display' => 'full' ); $webService = new PrestaShopWebservice($url, $api, false); $xmlcat = $webService->get($opt); if(!$xmlcat->product_option_values->product_option_value){ $id_option_value = addvalor($url, $api,$datoatts,$idgrupo); }else{ $id_option_value = $xmlcat->product_option_values->product_option_value->id ; } $valores = (int)$id_option_value; //$id_option_value = addvalor($url, $api,$datoatts,$idgrupo); /*array( 'grupo' => (int)$idgrupo, 'atributo' => (int)$id_option_value );*/ } return $valores; } function addvalor($url, $api,$datoatts,$idgrupo){ $webService = new PrestaShopWebservice($url, $api, false); $xml = $webService->get( array( 'url' => $url .'api/product_option_values?schema=blank')); unset($xml->product_option_value->id); $xml->product_option_value->id_attribute_group = $idgrupo; $xml->product_option_value->position = 0; $xml->product_option_value->name->language[0]= $datoatts['name']; $opt = array( 'resource' => 'product_option_values' ); $opt['postXml'] = $xml->asXML(); $xmlres = $webService->add( $opt ); return $xmlres->product_option_value->id; } function addgrupo($url, $api,$datoatts){ $grupo = $datoatts['group']; $webService = new PrestaShopWebservice($url, $api, false); $xml = $webService->get( array( 'url' => $url .'api/product_options?schema=blank')); unset($xml->product_option->id); $xml->product_option->is_color_group= 0; $xml->product_option->group_type = 'radio'; $xml->product_option->position = 0; $xml->product_option->name->language[0]= $grupo; $xml->product_option->public_name->language[0]= $grupo; $webService = new PrestaShopWebservice($url, $api, false); $opt = array( 'resource' => 'product_options' ); $opt['postXml'] = $xml->asXML(); $xmlres = $webService->add( $opt ); return $xmlres->product_option->id; } function addstock($url, $api,$id_product,$stock){ echo '<br>Añadiendo Stock!'; $webService = new PrestaShopWebservice($url, $api, false); $xml = $webService->get( array( 'url' => $url .'api/stock_availables?schema=blank' ) ); unset($xml->stock_available->id); $xml->stock_available->id_product = $id_product; //$xml->stock_available->stock_available =11; $xml->stock_available->id_product_attribute = 0; $xml->stock_available->id_shop = 1; $xml->stock_available->quantity = 11; $xml->stock_available->depends_on_stock = 0; $xml->stock_available->out_of_stock = 0; $webService = new PrestaShopWebservice($url, $api, false); $opt = array( 'resource' => 'stock_availables' ); $opt['postXml'] = $xml->asXML(); $xmlres = $webService->add( $opt ); } function checkcat($id_category,$url,$api){ $id_lang = Configuration::get('PS_LANG_DEFAULT'); $category = new Category($id_category); $cat_name = $category->name[$id_lang]; $catmarket = Configuration::get('QUINTANAR_MARKETPLACE_CATSELLER'); $opt = array( 'resource' => 'categories', 'filter[name]' => $cat_name, 'display' => 'full' ); $webService = new PrestaShopWebservice($url, $api, false); $xmlcat = $webService->get($opt); if(!isset($xmlcat->categories->category)){ $id_parent = (string)$category->id_parent; if($id_parent == '2'){ $id_parent = (string)$catmarket; } echo '<br>No exite Categoria--> Añadiendo!!!!'.$id_category.'---'.(string)$id_parent; $id_category_default = addcat($id_category,$url,$api,$id_parent); return $id_category_default ; }else{ $id_category_default = $xmlcat->categories->category->id; return $id_category_default ; } } function addcat($id_category,$url,$api,$id_parent){ $hoy = date_create(date('Y-m-d')); $id_lang = Configuration::get('PS_LANG_DEFAULT'); $category = new Category($id_category); $webService = new PrestaShopWebservice($url, $api, false); $xml = $webService->get( array( 'url' => $url .'api/categories?schema=blank' ) ); $id_parent = checkcat($id_parent,$url,$api); $xml->category->id_parent = $id_parent; $xml->category->active = 1; $xml->category->date_add = $hoy; $xml->category->is_root_category = false; $xml->category->id_shop_default = 1; $xml->category->position = 0; //$xml->category->associations->categories->category-> 2; $xml->category->name->language[0] = $category->name[$id_lang]; $xml->category->link_rewrite->language[0] = $category->link_rewrite[$id_lang]; $xml->category->description->language[0] = $category->description[$id_lang]; $xmld =$xml->asXML(); $logfile = fopen(dirname(__FILE__).'/xml_blank/category_full.xml', "w"); fwrite($logfile, $xmld); try{ $webService = new PrestaShopWebservice($url, $api, false); $opt = array( 'resource' => 'categories' ); $opt['postXml'] = $xml->asXML(); $xmlres = $webService->add( $opt ); }catch(Exception $e){ echo '<br>Error!!!'; print_r($e); $logfile = fopen(dirname(__FILE__).'/error_.log', "w"); fwrite($logfile, $e); return false; } return $xmlres->category->id; } function addimage($id_original,$id_product,$api,$url){ $id_lang = Configuration::get('PS_LANG_DEFAULT'); $images = Image::getImages($id_lang, $id_original); $product = new Product($id_original); $fotos = array(); foreach($images as $image){ $image_id = $image['id_image']; $linki = new Link(); $value = $linki->getImageLink($product->link_rewrite[$id_lang], $image_id, 'large_default'); $url_img = 'https://' . $value; $image_path = geturl($id_original,$image_id,$url_img,$api); $urlImage = $url.'/api/images/products/'.$id_product.''; $image_mime = 'image/jpg'; $args['image'] = new CurlFile($image_path, $image_mime); $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLINFO_HEADER_OUT, 1); curl_setopt($ch, CURLOPT_URL, $urlImage); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_USERPWD, $api.':'); curl_setopt($ch, CURLOPT_POSTFIELDS, $args); $result = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); unlink($image_path); } return ; } function geturl($id_original,$image_id,$url_img,$api){ $curl = curl_init(); $apien = base64_encode($api); curl_setopt_array($curl, array( CURLOPT_URL => $url_img, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( ": ", "Authorization: Basic ".$apien, ) )); $response = curl_exec($curl); if(curl_errno($curl)) { echo 'Curl error: ' . curl_error($curl); return; } curl_close($curl); $savefile = fopen(dirname(__FILE__).'/tmp'.$id_original.'_'.$image_id.'.jpg', 'w'); fwrite($savefile, $response); fclose($savefile); $dominio = Tools::getHttpHost(true).__PS_BASE_URI__; $image_url = 'tmp'.$id_original.'_'.$image_id.'.jpg'; return $image_url; } Al añadir el producto desde Webservice, ¿te aparece en el PrestaShop en Catálogo > Stocks? Yo añado los productos correctamente, actualiza el stock bien, pero no hay manera de que aparezcan en el listado de Gestión de Stocks (PS 1.7.6.5) Link to comment Share on other sites More sharing options...
gusman126 Posted September 23, 2020 Share Posted September 23, 2020 Justo ahora, elenaso dijo: Al añadir el producto desde Webservice, ¿te aparece en el PrestaShop en Catálogo > Stocks? Yo añado los productos correctamente, actualiza el stock bien, pero no hay manera de que aparezcan en el listado de Gestión de Stocks (PS 1.7.6.5) Justo eso es lo que estoy mirando porque no me registra el stock incluso añadiendo por webservice "stock_availables" Me pasa lo mismo Link to comment Share on other sites More sharing options...
Victor Casajuana Mas Posted September 23, 2020 Author Share Posted September 23, 2020 Yo los estoy actualizando por el recurso https://devdocs.prestashop.com/1.7/webservice/resources/stock_availables/ y me está funcionando bien. Puedes poner un ejemplo del XML que le envías? la synopsis es la siguiente: <prestashop xmlns:xlink="http://www.w3.org/1999/xlink"> <stock_available> <id_product required="true" format="isUnsignedId"/> <id_product_attribute required="true" format="isUnsignedId"/> <id_shop format="isUnsignedId"/> <id_shop_group format="isUnsignedId"/> <quantity required="true" format="isInt"/> <depends_on_stock required="true" format="isBool"/> <out_of_stock required="true" format="isInt"/> <location maxSize="255" format="isString"/> </stock_available> </prestashop> hay algunos campos "required" y otros que no lo pone pero quizás igualmente hay que ponerlos como la id_shop, is_shop_group, etc... Link to comment Share on other sites More sharing options...
gusman126 Posted September 23, 2020 Share Posted September 23, 2020 Ahi estoy peleando, tengo que ver el xml que envio a ver porque no lo acepta This call to PrestaShop Web Services failed and returned an HTTP status of 405. That means: Method Not Allowed. Puede que sea por el "id_shop_group" que no lo añado Link to comment Share on other sites More sharing options...
Victor Casajuana Mas Posted September 23, 2020 Author Share Posted September 23, 2020 lo estás enviando por PUT o POST? si el recurso ya está creado y quieres modificarlo, has de enviarlo por PUT Link to comment Share on other sites More sharing options...
gusman126 Posted September 23, 2020 Share Posted September 23, 2020 hace 7 minutos, Victor Casajuana Mas dijo: lo estás enviando por PUT o POST? si el recurso ya está creado y quieres modificarlo, has de enviarlo por PUT Post, pero ahora que lo dices... puede que el cabroncete este añadiendo uno por defecto cuando se da de alta el producto. Gracias Link to comment Share on other sites More sharing options...
elenaso Posted September 23, 2020 Share Posted September 23, 2020 A mi el stock_availables me funciona OK. Actualiza sin problemas. Este recurso es de actualización, no de insercción, por lo que hay que enviarlo con PUT. El id hay que cogerlo del recurso products. El problema que veo que es que en el backoffice (panel de PrestaShop), los productos no aparecen en Catálogo > Stocks. ¿Os ocurre esto? ¿Vosotros los veis? No digo en Catálogo > Productos, ahí sí que los veo bien y está bien el stock. Digo en Catálogo > Stocks: Link to comment Share on other sites More sharing options...
gusman126 Posted September 23, 2020 Share Posted September 23, 2020 (edited) Solucionado el problema de stock por web service, abajo lo explico Edited September 23, 2020 by gusman126 (see edit history) Link to comment Share on other sites More sharing options...
Victor Casajuana Mas Posted September 23, 2020 Author Share Posted September 23, 2020 hace 2 horas, elenaso dijo: A mi el stock_availables me funciona OK. Actualiza sin problemas. Este recurso es de actualización, no de insercción, por lo que hay que enviarlo con PUT. El id hay que cogerlo del recurso products. El problema que veo que es que en el backoffice (panel de PrestaShop), los productos no aparecen en Catálogo > Stocks. ¿Os ocurre esto? ¿Vosotros los veis? No digo en Catálogo > Productos, ahí sí que los veo bien y está bien el stock. Digo en Catálogo > Stocks: a mí sí que me aparecen, veo que en la captura de pantalla que pasas también te salen en "Fisico" y "disponible" Link to comment Share on other sites More sharing options...
Victor Casajuana Mas Posted September 23, 2020 Author Share Posted September 23, 2020 hace 1 hora, gusman126 dijo: Puedes poner como actualizas el stock? estoy enviando los datos y no hay manera, siempre Bad request pon el XML que le envías y se verá enseguida donde está el problema. Link to comment Share on other sites More sharing options...
gusman126 Posted September 23, 2020 Share Posted September 23, 2020 (edited) hace 12 minutos, Victor Casajuana Mas dijo: pon el XML que le envías y se verá enseguida donde está el problema. Ya lo tengo solucionado, gracias... abajo pongo el codigo. @elenaso Mira lo que me hace ahora despues de encontrar la solución... El codigo ... Lo primero que hago es actualizar el Stock_available que añade al añadir el producto Leo el id del stock_available que ha generado , de la respuesta de añadir el producto y el atributo, en el primer paso es el "0" Envio los datos y actualizo el stock, aqui lo tenia mal, utilizaba el "get" cuando tenia que utilizar el "blank" rellenando los datos y luego "putxml" $stock_available = (string)$xmlres->product->associations->stock_availables->stock_available->id; $id_product_attribute = (string)$xmlres->product->associations->stock_availables->stock_available->id_product_attribute; addstock($url, $api,$id_product,$stock,$id_product_attribute,$stock_available); function addstock($url, $api,$id_product,$stock,$id_product_attribute,$stock_available){ echo '<br>Añadiendo Stock!'.$stock_available; $webService = new PrestaShopWebservice($url, $api, false); $opt = array( 'resource' => 'stock_availables', 'filter[id]' => (int)$stock_available, 'display' => 'full' ); $webService = new PrestaShopWebservice($url, $api, false); $xml = $webService->get( array( 'url' => $url .'api/stock_availables?schema=blank' ) ); $xml->stock_available->id = (int)$stock_available; $xml->stock_available->id_product = $id_product; $xml->stock_available->id_product_attribute = $id_product_attribute; $xml->stock_available->id_shop = 1; $xml->stock_available->quantity = $stock; $xml->stock_available->depends_on_stock = 0; $xml->stock_available->out_of_stock = 2; $webService = new PrestaShopWebservice($url, $api, false); $updatedXml = $webService->edit([ 'resource' => 'stock_availables', 'id' => (int)$stock_available, 'putXml' => $xml->asXML(), ]); return; } Una vez se actualiza el stock del producto si tengo combinaciones dentro de cada una , despues de generarla $combinationsadd = addcombi($url, $api,$id_product,$combination,$valores,$imgscombis,$imagenes); $stockcombi = $combination['quantity']; updatestock($url, $api,$id_product,$stockcombi,$combinationsadd); Leo los datos, combinacion (atributo) el stock de la combinacion y el id del producto, esto lo envio a una funcion, donde leo todos los "stock_availables " y verifico que sea de ese atributo y entonces actualizo el stock_available llamando a la funcion que he puesto arriba function updatestock($url, $api,$id_product,$stockcombi,$combinationsadd){ $webService = new PrestaShopWebservice($url, $api, false); $opt = array( 'resource' => 'stock_availables', 'filter[id_product]' => $id_product, 'display' => 'full' ); $webService = new PrestaShopWebservice($url, $api, false); $xmlsv = $webService->get($opt); foreach($xmlsv->stock_availables->stock_available as $stockv){ if($stockv->id_product_attribute == $combinationsadd){ $stock_available = $stockv->id; $stock = $stockcombi; $id_product_attribute = $combinationsadd; addstock($url, $api,$id_product,$stock,$id_product_attribute,$stock_available); } } } Con todo esto, se actualiza el stock tanto del producto como de combinaciones y en el menu "stock" de prestashop se muestra como la imagen que te he puesto. stock en combinaciones Listado pantalla de stock Edited September 23, 2020 by gusman126 (see edit history) Link to comment Share on other sites More sharing options...
elenaso Posted September 23, 2020 Share Posted September 23, 2020 (edited) Yo estoy enviando productos simples, sin combinaciones. El producto que se ven en mi pantalla de Catálogo > Stocks es un producto que añadí a mano desde el Backoffice, los que subo por el Webservice no hay manera, no aparecen por ningún lado. ¿Habéis probado a subir productos simples? ¿Os aparecen en Catálogo > Stocks? Es que no entiendo en qué punto me he perdido, el webservice no me devuelve ningún error... Quizá me falte enviar algún campo... Os detallo: Yo añado un producto nuevo enviando todos estos campos (el resto no los modifico, van con lo que devuelve el schema blanco). No especifico todos, cada producto tiene su valor, indico los que pongo por defecto por si hay algo que estoy enviando mal o por si me falta alguno que hay que especificar: id_manufacturer id_shop_default (solo tengo una, pero se lo indico) is_virtual=0 state=1 (aunque no tengo muy claro para qué es) online_only=0 ecotax=0 customizable=0 active=1 available_for_order=1 advanced_stock_management=1 (este he probado con 0 y con 1, obteniendo el mismo resultado) show_price=1 indexed=1 visibility='both' date_add=date('Y-m-d H:m:s') date_upd=date('Y-m-d H:m:s') redirect_type='301-category' minimal_quantity=1 price wholesale_price (precio de coste) reference name->language[0][0] id_tax_rules_group id_category_default associations->categories->category->id Después de añadir el producto, obtengo el id de stock_availables, con este id, obtengo el schema XML para este id y solo modifico los siguientes campos (el resto los dejo tal y como me llegan del XML): quantity depends_on_stock=0 out_of_stock=0 Y no hago nada más. Con esto, el webservice no me suelta error, todo va OK. En el Backoffice veo el producto en Catálogo > Productos, y ahí el stock y todos los demás datos están correctos. El problema es cuando voy a Catálogo > Stocks, ahí no aparece, no es que aparezca con stock erróneo, es que no aparece ni el producto. ¿Alguna idea? Edited September 23, 2020 by elenaso (see edit history) Link to comment Share on other sites More sharing options...
gusman126 Posted September 24, 2020 Share Posted September 24, 2020 Acabo de hacer la prueba de añadir un producto sin combinaciones. Me pasa lo mismo. Lo extraño es que añado "echo" para saber que esta haciendo el codigo en ese momento.. No exite producto! --->ORD001Añadiendo Stock! 750 Añadido el producto!ORD001 Add seller! Lo extraño es que el stock_available es correcto Link to comment Share on other sites More sharing options...
elenaso Posted September 24, 2020 Share Posted September 24, 2020 ¡¡Curioso!! Vale, por lo menos ya se que no es mi código... ¿Quizá haya que añadir una "combinación" por defecto o algo así? Seguiré dándole vueltas. Gracias por comprobarlo @gusman126!! Link to comment Share on other sites More sharing options...
gusman126 Posted September 24, 2020 Share Posted September 24, 2020 hace 5 minutos, elenaso dijo: ¡¡Curioso!! Vale, por lo menos ya se que no es mi código... ¿Quizá haya que añadir una "combinación" por defecto o algo así? Seguiré dándole vueltas. Gracias por comprobarlo @gusman126!! Debe haber algo que se nos escapa. Link to comment Share on other sites More sharing options...
elenaso Posted September 24, 2020 Share Posted September 24, 2020 19 minutes ago, gusman126 said: Debe haber algo que se nos escapa. He detectado algo curioso. En Catálogo > Stocks no veo los productos simples que añado con el Webservice, pero si le doy a "Exportar datos a CSV" en esta misma pantalla (iconito arriba a la derecha), sí me aparece, aunque la cantidad física, reservada y disponible viene vacía: Después de tantas pruebas con el Webservice tengo la BD inconsistente (líneas en ps_stock_availables con id_producto=0....), así que creo que haré una limpieza para volver a hacer pruebas. Quizá sea un problema en la visualización ¿? Link to comment Share on other sites More sharing options...
gusman126 Posted September 25, 2020 Share Posted September 25, 2020 Mira esto, aun mas raro, cuando he añadido mas de 100 productos, sale la paginación pero no el listado. es de locos Link to comment Share on other sites More sharing options...
elenaso Posted September 25, 2020 Share Posted September 25, 2020 28 minutes ago, gusman126 said: Mira esto, aun mas raro, cuando he añadido mas de 100 productos, sale la paginación pero no el listado. es de locos ¡A mi me pasa exactamente lo mismo! Yo entendía que era por algún problema con mis productos, porque son simples y algo me debe faltar... ¿Los tuyos que son con combinaciones tampoco te salen en la paginación? Yo estoy pendiente de reinstalar PS (es un proyecto en pruebas y tengo la BD hecha un desastre de tanta prueba con el Webservice) y hoy tengo lío. El lunes te cuento cómo me fue. Link to comment Share on other sites More sharing options...
gusman126 Posted September 25, 2020 Share Posted September 25, 2020 En combinaciones SI que salen En simples NO, Hice limpieza de bases de datos de productos y stock availables Link to comment Share on other sites More sharing options...
elenaso Posted December 7, 2020 Share Posted December 7, 2020 Lamento tardar tanto en constestar, pero abandoné el proceso de actualización mediante Webservice. Demasiados problemas, cero documentación y ninguna ayuda del personal que sabe cómo funciona. Mi solución, para la importación de productos (desde TPV a PS) pasó por usar el script que se comenta en este hilo: 1 Link to comment Share on other sites More sharing options...
Aldeag Posted January 13, 2021 Share Posted January 13, 2021 En 7/12/2020 a las 11:41 PM, elenaso dijo: Lamento tardar tanto en constestar, pero abandoné el proceso de actualización mediante Webservice. Demasiados problemas, cero documentación y ninguna ayuda del personal que sabe cómo funciona. Mi solución, para la importación de productos (desde TPV a PS) pasó por usar el script que se comenta en este hilo: ¿Que solución TPV usas para Prestashop? Link to comment Share on other sites More sharing options...
elenaso Posted January 14, 2021 Share Posted January 14, 2021 15 hours ago, Aldeag said: ¿Que solución TPV usas para Prestashop? ¿A qué te refieres? No uso un TPV específico para PS. El TPV que tengo en tienda física (ya antes de tener PS) me genera un CSV (bueno, casi) y es lo que le mando al PS... No se si te resuelvo algo... Sino, pregúntame de nuevo. Link to comment Share on other sites More sharing options...
Aldeag Posted January 14, 2021 Share Posted January 14, 2021 Ah! Ok Que no tienes un conector o módulo de tpv. Link to comment Share on other sites More sharing options...
elenaso Posted January 14, 2021 Share Posted January 14, 2021 5 hours ago, Aldeag said: Ah! Ok Que no tienes un conector o módulo de tpv. No, no tengo un módulo para conectar el TPV con PS. Mi TPV me deja archivos de texto cuando pulso un botón. Yo los paso a CSV y uso el script que comentaba para poder importar los productos en PrestaShop Link to comment Share on other sites More sharing options...
leonardomarinio Posted March 10, 2023 Share Posted March 10, 2023 Buenos dias, tengo el siguiente error al intentar subir productos. PS 1.7.8.8 php 7.4: Los datos se envian correctamente y se crean los productos, aparecen activos, con precios y asociados a sus categorias. El gran problema es que si no entro al backoffice y le doy a guardar de forma manual, NO SE PUBLICAN. Esto es lo que envio, utilizando la libreria prestapyt. Creeria que los datos estan bien o no se si hay algun campo que fuerce esto que me este faltando. data['product']['id_manufacturer'] = ut.buscar_manufacturas(id, cursor) data['product']['name']['language']['value'] = fila['despub'].strip().upper() data['product']['description']['language']['value'] = fila['desamp'].strip() data['product']['description_short']['language']['value'] = fila['desred'].strip() data['product']['active'] = "1" lw = fila['despub'].strip() precio = str(ut.vcalpre('POLO', cursor, id, cotdolar, LISTA, DESCUENTO_1)) data['product']['price'] = precio data['product']['wholesale_price'] = "0" data['product']['id_category_default'] = ut.buscar_categorias(fila['id_wcategorias'], cursor) data['product']['show_price'] = "1" data['product']['id_shop_default'] = tienda data['product']['is_virtual'] = "0" data['product']['state'] = "1" data['product']['online_only'] = "0" data['product']['low_stock_alert'] = "0" data['product']['available_for_order'] = "1" data['product']['indexed'] = "1" data['product']['ean13'] = fila["num_art"] data['product']['reference'] = fila["num_art"] data['product']['quantity'] = "0" data['product']["width"] = str(fila["ancho"]) data['product']["height"] = str(fila["alto"]) data['product']["depth"] = str(fila["largo"]) del data['product']['position_in_category'] del data['product']['quantity'] del data['product']['associations'] del data['product']['manufacturer_name'] 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