Victor Casajuana Mas Posted February 5, 2019 Share Posted February 5, 2019 Hola. Estoy utilizando el WebService de Prestashop para crear/modificar artículos, subiendo imágenes, actualizando stocks, etc... y todo me va bien salvo un detalle cuando modifico los productos; la modificación de los datos que le paso la hace correctamente, pero me borra los metadatos que ya tiene el producto, aunque en la petición que le envío al WS para modificar no le hago mención a los campos de metadatos. Alguien le ha pasado lo mismo o sabe como solucionarlo? Gracias! Link to comment Share on other sites More sharing options...
fred1roca Posted February 12, 2019 Share Posted February 12, 2019 On 2/5/2019 at 2:45 AM, Victor Casajuana Mas said: Hola. Estoy utilizando el WebService de Prestashop para crear/modificar artículos, subiendo imágenes, actualizando stocks, etc... y todo me va bien salvo un detalle cuando modifico los productos; la modificación de los datos que le paso la hace correctamente, pero me borra los metadatos que ya tiene el producto, aunque en la petición que le envío al WS para modificar no le hago mención a los campos de metadatos. Alguien le ha pasado lo mismo o sabe como solucionarlo? Gracias! como los ws de prestashop son SOAP mandas todo el esqueleto siempre por detrás mandaras un xml entero para asegurarte cuando mandes el PUT imprime tu xml y veras que madas todo el cuerpo aun que solo pongas $resouces->id; siempre se mandaran los demas campos y actualizaras todo entones en tu funcion PUT procura mandar esos meta datos de nuevo pero si te refieres a datos ajenos a a las tablas de los WS es por que muchos datos se agregan en automático en diferentes tablas a pesar de que tu no los mandes como por ejemplo cuando agregas una nueva categoría tu nomas indicas el rango pero el solo pone los id del rango de la categoría padre 1 Link to comment Share on other sites More sharing options...
Victor Casajuana Mas Posted March 6, 2019 Author Share Posted March 6, 2019 Gracias fred1roca por la explicación. Por lo que entiendo, entonces si solo quiero modificar por ejemplo la descripción o el precio de un producto, antes tengo que descargar el xml entero, modificarlo y volverlo a subir por WS, por lo que cada modificación serían 2 peticiones al WS, o hay alguna otra forma de hacerlo más optimizada? siempre y cuando sin acceder por SQL, es lo que hacía antes pero has de saber exactamente todas las tablas que se modifican en cada campo y es un proceso poco sostenible en el tiempo. Saludos!! Link to comment Share on other sites More sharing options...
fred1roca Posted March 25, 2019 Share Posted March 25, 2019 On 3/6/2019 at 2:17 AM, Victor Casajuana Mas said: Gracias fred1roca por la explicación. Por lo que entiendo, entonces si solo quiero modificar por ejemplo la descripción o el precio de un producto, antes tengo que descargar el xml entero, modificarlo y volverlo a subir por WS, por lo que cada modificación serían 2 peticiones al WS, o hay alguna otra forma de hacerlo más optimizada? siempre y cuando sin acceder por SQL, es lo que hacía antes pero has de saber exactamente todas las tablas que se modifican en cada campo y es un proceso poco sostenible en el tiempo. Saludos!! si víctor lo que puedes hacer es en un string meter todo el xml seria copear el xml vacio entero y entre las etiquetas meter tus ejemplos <?php $example = ' <id/>1 <deleted/>1 <is_module/>1 <id_tax_rules_group/>2 <id_reference/>5 <name/>ALFREDO <active/>1 '; $xml_request= #webService->add($example); puedes hacer algo así para que no tengas que primero llamar al xml ese ya lo tendrías guardado en un string y solo remplazas valores y es incluso mas ensillo que con los hijos $resources->..... Quote 1 Link to comment Share on other sites More sharing options...
Victor Casajuana Mas Posted May 30, 2019 Author Share Posted May 30, 2019 hola de nuevo fred1roca, después de una temporada liado con otros temas, retomo de nuevo esto. Al final lo voy a enfocar con 2 peticiones ya que si le envío el xml con todos los campos en blanco y solo relleno los que voy a modificar, el resto me los inicializará en el producto de prestashop y para asegurarme que esto no ocurra, me descargo el xml del producto, modifico lo que quiero y luego lo vuelvo a enviar. Realmente el ejemplo que me pones es lo que indicaba yo al principio de este post, que si solo le paso los campos a modificar el resto me los deja en blanco. Cuando lo tenga listo y funcionando bien lo comento. Link to comment Share on other sites More sharing options...
fred1roca Posted May 30, 2019 Share Posted May 30, 2019 20 minutes ago, Victor Casajuana Mas said: hola de nuevo fred1roca, después de una temporada liado con otros temas, retomo de nuevo esto. Al final lo voy a enfocar con 2 peticiones ya que si le envío el xml con todos los campos en blanco y solo relleno los que voy a modificar, el resto me los inicializará en el producto de prestashop y para asegurarme que esto no ocurra, me descargo el xml del producto, modifico lo que quiero y luego lo vuelvo a enviar. Realmente el ejemplo que me pones es lo que indicaba yo al principio de este post, que si solo le paso los campos a modificar el resto me los deja en blanco. Cuando lo tenga listo y funcionando bien lo comento. que tal victor yo volvi a hacer todas mis peticiones de manera que fuera mas rápido y la verdad logre recordar a mas de la mitad mi sincronizacion <?php foreach ($arrayjson as $key) { if ($key['system'] == true) { $webService = new PrestaShopWebservice($dominios, $serviceKey, false); $statts = $key['status']; $opt = array( 'resource' => 'categories', 'postXml' => "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <prestashop xmlns:xlink=\"http://www.w3.org/1999/xlink\"> <category> <id/> <id_parent><![CDATA[" . $id_cat . "]]></id_parent> <active><![CDATA[" . $statts . "]]></active> <id_shop_default><![CDATA[1]]></id_shop_default> <is_root_category><![CDATA[0]]></is_root_category> <position><![CDATA[0]]></position> <date_add></date_add> <date_upd></date_upd> <name><language id='1' xlink:href='" . $dominios . "/api/languages/1'><![CDATA[" . $key['nombre'] . "]]></language><language id='2'/></name> <link_rewrite><language id='1' xlink:href='" . $dominios . "/api/languages/1'><![CDATA[link-rewrite]]></language><language id='2'/></link_rewrite> <description><![CDATA[<p><span style='font-size:10pt;font-family:Arial;font-style:normal;'></span></p>]]></description> <meta_title></meta_title> <meta_description></meta_description> <meta_keywords></meta_keywords> <associations> <categories> <category> <id/> </category> </categories> <products> <product> <id/> </product> </products> </associations> </category> </prestashop>" ); $xml_request = $webService->add($opt); de esta menera solo haces una petición post o put en tu caso después de unos cuantos cientos de artículos puedes notar una gran diferencia en tiempo o de menos así lo note yo que es verdad que insertas todo el xml pero para mi fue mas rápido ya que yo los datos los obtengo de otros ws externos a prestashop y los inserto en la tienda. ami me funciono mas rapido asi 1 Link to comment Share on other sites More sharing options...
Victor Casajuana Mas Posted May 31, 2019 Author Share Posted May 31, 2019 Hola Fred1roca Gracias por los ejemplos, lo que no tengo claro es que en el ejemplo que pones te estarías cargando los campos meta ya que se los estás enviando en blanco. Este es el problema que yo tengo, que en mi aplicación esta información no existe, y al actualizar el producto a prestashop y no pasarla o pasarla en blanco, se inicializa en prestashop. Salud!! Link to comment Share on other sites More sharing options...
fred1roca Posted May 31, 2019 Share Posted May 31, 2019 6 hours ago, Victor Casajuana Mas said: Hola Fred1roca Gracias por los ejemplos, lo que no tengo claro es que en el ejemplo que pones te estarías cargando los campos meta ya que se los estás enviando en blanco. Este es el problema que yo tengo, que en mi aplicación esta información no existe, y al actualizar el producto a prestashop y no pasarla o pasarla en blanco, se inicializa en prestashop. Salud!! si por que estas asiendo un update con todo el xml es lógico que te cargues los que mandes vacíos. cuando tu obtienes el xml con los datos y solo actualizas el campo que requieres y lo mandas de nuevo entonces estas haciendo un update completo se vuelve a actualizar toda la tabla. de las 2 maneras es valido pero si es mas rápido si solo mandas el xml sin pedir el esquema igualmente estarás haciendo un update a toda la estructura y si @Victor Casajuana Mas la documentación e información sobre los ws de prestashop es bastante escasa la verdad si le estuve batallando un tiempo para lograr hacer ciertas cosas Link to comment Share on other sites More sharing options...
Victor Casajuana Mas Posted June 1, 2019 Author Share Posted June 1, 2019 vale, ya me queda claro. Cuando se hace un PUT del producto por el WS, los campos que no se le pasan por el XML los inicializa. Hay que mandarle el XML completo con todos los campos cumplimentados. Considero que es un fallo del WS ya que si quieres hacer un proceso por ejemplo que cambie solo un campo del artículo (nombre), te toca hacer un GET, modificar el valor y luego un PUT. Tema resuelto. Gracias!!!! Link to comment Share on other sites More sharing options...
jgamio Posted June 8, 2019 Share Posted June 8, 2019 On 6/1/2019 at 11:12 AM, Victor Casajuana Mas said: vale, ya me queda claro. Cuando se hace un PUT del producto por el WS, los campos que no se le pasan por el XML los inicializa. Hay que mandarle el XML completo con todos los campos cumplimentados. Considero que es un fallo del WS ya que si quieres hacer un proceso por ejemplo que cambie solo un campo del artículo (nombre), te toca hacer un GET, modificar el valor y luego un PUT. Tema resuelto. Gracias!!!! En realidad no es un fallo así funcionan generalmente todas las API (por lo menos con las que he trabajado) al momento de hacer un PUT 1 Link to comment Share on other sites More sharing options...
JOCOSO25 Posted April 13, 2021 Share Posted April 13, 2021 Hola, Soy nuevo en todo el tema de API de Prestashop y de normal las integraciones las hago con .NET Para hacer los GET no tengo problema ya que responde con los datos correctamente, pero para hacer el PUT me esta dando el clásico error: Error en el servidor remoto: (400) Solicitud incorrecta. Como he leído estoy mandando el esqueleto de la clase con xml con los datos a modificar y le paso el método PUT, pero no consigo nada. ¿alguien me puede ayudar? Gracias 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