gusman126 Posted June 20, 2020 Share Posted June 20, 2020 (edited) Hola a todos. Estoy intentando añadir un pedido por medio de webservice, pero obligando los precios de los productos. He podido añadir todo, cliente, direccion, carrito, y pedido, Cuando voy a enviar el pedido añado las lineas de productos obligando el precio : <order_rows> <order_row> <id>0</id> <product_id>8510</product_id> <product_attribute_id>0</product_attribute_id> <product_quantity>1</product_quantity> <product_name>GORMITI S2 - BLISTER HERALDS VALUE PACK</product_name> <product_reference>GRE06000</product_reference> <product_ean13>8056379082132</product_ean13> <product_isbn></product_isbn> <product_upc></product_upc> <product_price>17.35</product_price> <unit_price_tax_incl>20.990000</unit_price_tax_incl> <unit_price_tax_excl>17.350000</unit_price_tax_excl> </order_row> </order_rows> El problema esta en que al enviar el pedido, la respuesta y por lo tanto al guardar en la tienda , se guardan con los precios internos de prestashop <order_rows nodeType="order_row" virtualEntity="true"> <order_row> <id>37</id> <product_id>8510</product_id> <product_attribute_id>0</product_attribute_id> <product_quantity>1</product_quantity> <product_name>GORMITI S2 - BLISTER HERALDS VALUE PACK</product_name> <product_reference>GRE06000</product_reference> <product_ean13>8056379082132</product_ean13> <product_isbn/> <product_upc/> <product_price>13.214876</product_price> <unit_price_tax_incl>15.990000</unit_price_tax_incl> <unit_price_tax_excl>13.214876</unit_price_tax_excl> </order_row> </order_rows> </association> Puedo añadir el "total paid y total products" <total_paid>20.990000</total_paid> <total_paid_tax_incl>20.990000</total_paid_tax_incl> <total_paid_tax_excl>17.350000</total_paid_tax_excl> <total_paid_real>0.000000</total_paid_real> <total_products>17.350000</total_products> <total_products_wt>20.990000</total_products_wt> Y eso si que me lo respeta <total_paid>20.990000</total_paid> <total_paid_tax_incl>20.990000</total_paid_tax_incl> <total_paid_tax_excl>17.350000</total_paid_tax_excl> <total_paid_real>0.000000</total_paid_real> <total_products>17.350000</total_products> <total_products_wt>20.990000</total_products_wt> El problema que tengo es que en la tienda da un error de pago Alguna solución?? Edited February 4, 2021 by gusman126 (see edit history) Link to comment Share on other sites More sharing options...
Kami Solutions Posted June 20, 2020 Share Posted June 20, 2020 Hola, estoy interesado en empezar a desarrollar cosas por webservice pero no acabo de encontrar un buen tutorial sobre cómo empezar y hacerlo, por casualidad no tendrás algún enlace útil? Respecto al tema del precio creo que es porque el precio con impuestos te lo hace una función al multiplicar el impuesto que tengas que está en otra tabla con el precio sin impuesto, aunque no estoy al 100%seguro, pero si no tienes algún enlace de impuestos con el producto dudo mucho que te funcione. Saludos Link to comment Share on other sites More sharing options...
gusman126 Posted June 21, 2020 Author Share Posted June 21, 2020 hace 12 horas, centrobolsos dijo: Hola, estoy interesado en empezar a desarrollar cosas por webservice pero no acabo de encontrar un buen tutorial sobre cómo empezar y hacerlo, por casualidad no tendrás algún enlace útil? Respecto al tema del precio creo que es porque el precio con impuestos te lo hace una función al multiplicar el impuesto que tengas que está en otra tabla con el precio sin impuesto, aunque no estoy al 100%seguro, pero si no tienes algún enlace de impuestos con el producto dudo mucho que te funcione. Saludos La documentación de Prestashop es algo escasa https://devdocs.prestashop.com/1.7/development/webservice/ , a mi me ayudo mucho esta orden $xml = $webService->get( array( 'url' => $url .'api/customers?schema=blank' ) ); Donde customers = el dato que quieres rellenar, de esa manera tienes un xml vacio donde sabes que debes poner y que dato debe ir en el XML Respecto a mi consulta y tu respuesta EL problema no es el IVA , mira este pedido Yo envió esto : <order_row> <id>0</id> <product_id>8553</product_id> <product_attribute_id>0</product_attribute_id> <product_quantity>1</product_quantity> <product_name>BICICLETA 18" DIANA BLANCA/ROSA</product_name> <product_reference>187153</product_reference> <product_ean13>1011802331116</product_ean13> <product_isbn></product_isbn> <product_upc></product_upc> <product_price>126.12</product_price> <unit_price_tax_incl>152.610000</unit_price_tax_incl> <unit_price_tax_excl>126.120000</unit_price_tax_excl> </order_row> y me contesta esto : <order_row> <id>51</id> <product_id>8553</product_id> <product_attribute_id>0</product_attribute_id> <product_quantity>1</product_quantity> <product_name>BICICLETA 18" DIANA BLANCA/ROSA</product_name> <product_reference>187153</product_reference> <product_ean13>1011802331116</product_ean13> <product_isbn/> <product_upc/> <product_price>95.033058</product_price> <unit_price_tax_incl>114.990000</unit_price_tax_incl> <unit_price_tax_excl>95.033058</unit_price_tax_excl> </order_row> Esta leyendo el precio del producto de prestashop Y en el pedido no se refleja correctamente, lee el total pagado , pero las lineas de pedido no No puedo obligar a poner un precio en el pedido. Si fuera con codigo directo lo tengo claro como se hace, tengo módulos que leen de marketplaces y añado el precio que me da la gana, pero por Webservice no encuentro la manera Link to comment Share on other sites More sharing options...
gusman126 Posted June 23, 2020 Author Share Posted June 23, 2020 Todo parece indicar que el sistema Webservice NO puede cambiar el precio de las lineas de los productos en los pedidos Es una mierda Link to comment Share on other sites More sharing options...
gusman126 Posted July 10, 2020 Author Share Posted July 10, 2020 Al final he solucionado el problema, pero no utilizando webservice, genero un fichero CSV, lo subo a la central por FTP y tengo un codigo que lee ese CSV y modifica el pedido con los precios correctos Una mierda Link to comment Share on other sites More sharing options...
Rachelle Posted February 3, 2021 Share Posted February 3, 2021 Hola Gusman26 me ha parecido interesando tu modulo... pero quiero hacer una pregunta, tengo un proyecto de multitienda y quiero mostrar los productos de las otras tiendas en la tienda principal solo mostrarlo no agregarlos, mostrar los productos con enlace a cada tienda correspondiente, lo he tratado de hacer modificando algunas clases y métodos pero sin mucho acierto. La pregunta en concreto es, si has hecho algo parecido o por medio de webservice se puede hacer, ya que no tengo mucho conocimiento manejando webservice... gracias de antemano por cualquier ayuda que me puedas dar... Link to comment Share on other sites More sharing options...
gusman126 Posted February 4, 2021 Author Share Posted February 4, 2021 No he hecho nada parecido y por webservice dudo que puedas hacerlo,el webservice es para comunicar herramientas externas con un PrestaShop La única manera será haciendo un módulo el cual puedes elegir productos de otras tiendas y hacer un listado o página para mostrarlos. No modifiques classes o controllers, solo veo que por módulo podrías hacerlo mejor. Ni idea como ,pero es la única manera Link to comment Share on other sites More sharing options...
gusman126 Posted February 4, 2021 Author Share Posted February 4, 2021 En 23/6/2020 a las 1:53 PM, gusman126 dijo: Todo parece indicar que el sistema Webservice NO puede cambiar el precio de las lineas de los productos en los pedidos Es una mierda Estaba equivocado, si que se puede , se soluciono haciendo un update de esos pedidos. Los problemas que puse aquí ya se solucionaron. Link to comment Share on other sites More sharing options...
Kami Solutions Posted February 4, 2021 Share Posted February 4, 2021 16 minutes ago, gusman126 said: Estaba equivocado, si que se puede , se soluciono haciendo un update de esos pedidos. Los problemas que puse aquí ya se solucionaron. Hola, Podrías explicar o poner un fragmento de cómo realizas el update del pedido por webservice? Gracias Link to comment Share on other sites More sharing options...
gusman126 Posted February 4, 2021 Author Share Posted February 4, 2021 Una vez he añadido el pedido en Prestashop, guardo la respuesta en un XML $xmlres = $webService->add( $opt ); $id_original = $xmlres->order->id; Una vez se ha añadido utilizo el mismo XML, en este caso $xmlres para añadir los datos correctos, totales del pedido, cambios de estado y otros cambios $xmlres->order->current_state = 2; $xmlres->order->total_paid = $total_paid; $xmlres->order->total_paid_tax_incl = $total_paid_tax_incl ; $xmlres->order->total_paid_tax_excl = $total_paid_tax_excl ; $xmlres->order->total_paid_real = $total_paid_real; $xmlres->order->total_products = $total_products; $xmlres->order->total_products_wt = $total_products_wt; $xmlres->order->total_shipping = $total_shipping; $xmlres->order->total_shipping_tax_incl = $total_shipping_tax_incl; $xmlres->order->total_shipping_tax_excl = $total_shipping_tax_excl; $xmlres->order->carrier_tax_rate = ''; $xmlres->order->total_wrapping = $order->total_wrapping; $xmlres->order->total_wrapping_tax_incl = $order->total_wrapping_tax_incl; $xmlres->order->total_wrapping_tax_excl = $order->total_wrapping_tax_excl; $xmlres->order->round_mode = $order->round_mode; $xmlres->order->round_type = $order->round_type; $xmlres->order->conversion_rate = 1; $hoy = date_create(date('Y-m-d H:i:s')); $date = date_format($hoy, 'Y-m-d H:i:s'); $xml->order->date_add = $date; $xml->order->date_upd = $date; $lin = 0; una vez cambio los datos de ese xml, recuerda que los demas datos son correctos porque es la respuesta de la orden del webservice, lo actualizando usando un PUT $webService = new PrestaShopWebservice($url, $api, false); $updatedXml = $webService->edit([ 'resource' => 'orders', 'id' => (int)$xmlres->order->id, 'putXml' => $xmlres->asXML(), ]); Ademas actualizo el coste de envío , ya que es posible que sea diferente $webService = new PrestaShopWebservice($url, $api, false); $xml = $webService->get(array('url' => $url .'api/order_carriers/?schema=blank')); $xml->order_carrier->id_order = $id_original; $xml->order_carrier->id_carrier = 9; $xml->order_carrier->shipping_cost_tax_excl = $total_shipping_tax_excl; $xml->order_carrier->shipping_cost_tax_incl = $total_shipping_tax_incl; $xml->order_carrier->tracking_number = ''; $xml->order_carrier->date_add = $date; $opt = array( 'resource' => 'order_carriers' ); $opt['postXml'] = $xml->asXML(); $xmloc = $webService->add( $opt ); Link to comment Share on other sites More sharing options...
Kami Solutions Posted February 4, 2021 Share Posted February 4, 2021 28 minutes ago, gusman126 said: Una vez he añadido el pedido en Prestashop, guardo la respuesta en un XML $xmlres = $webService->add( $opt ); $id_original = $xmlres->order->id; Una vez se ha añadido utilizo el mismo XML, en este caso $xmlres para añadir los datos correctos, totales del pedido, cambios de estado y otros cambios $xmlres->order->current_state = 2; $xmlres->order->total_paid = $total_paid; $xmlres->order->total_paid_tax_incl = $total_paid_tax_incl ; $xmlres->order->total_paid_tax_excl = $total_paid_tax_excl ; $xmlres->order->total_paid_real = $total_paid_real; $xmlres->order->total_products = $total_products; $xmlres->order->total_products_wt = $total_products_wt; $xmlres->order->total_shipping = $total_shipping; $xmlres->order->total_shipping_tax_incl = $total_shipping_tax_incl; $xmlres->order->total_shipping_tax_excl = $total_shipping_tax_excl; $xmlres->order->carrier_tax_rate = ''; $xmlres->order->total_wrapping = $order->total_wrapping; $xmlres->order->total_wrapping_tax_incl = $order->total_wrapping_tax_incl; $xmlres->order->total_wrapping_tax_excl = $order->total_wrapping_tax_excl; $xmlres->order->round_mode = $order->round_mode; $xmlres->order->round_type = $order->round_type; $xmlres->order->conversion_rate = 1; $hoy = date_create(date('Y-m-d H:i:s')); $date = date_format($hoy, 'Y-m-d H:i:s'); $xml->order->date_add = $date; $xml->order->date_upd = $date; $lin = 0; una vez cambio los datos de ese xml, recuerda que los demas datos son correctos porque es la respuesta de la orden del webservice, lo actualizando usando un PUT $webService = new PrestaShopWebservice($url, $api, false); $updatedXml = $webService->edit([ 'resource' => 'orders', 'id' => (int)$xmlres->order->id, 'putXml' => $xmlres->asXML(), ]); Ademas actualizo el coste de envío , ya que es posible que sea diferente $webService = new PrestaShopWebservice($url, $api, false); $xml = $webService->get(array('url' => $url .'api/order_carriers/?schema=blank')); $xml->order_carrier->id_order = $id_original; $xml->order_carrier->id_carrier = 9; $xml->order_carrier->shipping_cost_tax_excl = $total_shipping_tax_excl; $xml->order_carrier->shipping_cost_tax_incl = $total_shipping_tax_incl; $xml->order_carrier->tracking_number = ''; $xml->order_carrier->date_add = $date; $opt = array( 'resource' => 'order_carriers' ); $opt['postXml'] = $xml->asXML(); $xmloc = $webService->add( $opt ); Muchas gracias! Link to comment Share on other sites More sharing options...
Rachelle Posted February 4, 2021 Share Posted February 4, 2021 6 hours ago, gusman126 said: No he hecho nada parecido y por webservice dudo que puedas hacerlo,el webservice es para comunicar herramientas externas con un PrestaShop La única manera será haciendo un módulo el cual puedes elegir productos de otras tiendas y hacer un listado o página para mostrarlos. No modifiques classes o controllers, solo veo que por módulo podrías hacerlo mejor. Ni idea como ,pero es la única manera Gracias por responder. seguiré buscando la solución... 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