Jump to content

Agregar productos a prestashop 1.7 desde webservice


Recommended Posts

Hola a todos. Soy nueva en el desarrollo con prestashop, sin embargo un cliente me ha pedido listar productos en su tienda desde un webservice, al informarme respecto a la forma de hacerlo conseguí la libreria PSWebServiceLibrary pero debido a que la API del cliente no es una api generada desde prestashop y  requería enviarle varios parámetros que no pude incorporar en el método de listar productos de PSWebServiceLibrary y que además no tenia idea en que modulo, controlador o clase se debe incorporar la mencionada librería decidí hacer lo siguiente:

1. Crear un modulo nuevo.

2. Usar curl PHP para llamar los diferentes métodos de la api desde donde me traigo la información de los productos.

3. Crear 2 nuevos hooks que asocie al modulo para mostrar las dos tipos de productos que vende el cliente (Cauchos y Rines).

4. Modificar products.tpl para mostrar las plantillas.tpl asociadas al modulo que he creado.

Hasta este punto todo bien, a excepción del punto 4 no he tocado el código de prestashop 1.7, los productos del webservice se listan como el cliente desea tal como pueden ver en este enlace https://importadoracork.com.mx/presta123/index.php?id_category=10&controller=category&id_lang=2 PERO llega el momento de enviar productos al carrito y en este punto no se si todo lo hecho anteriormente esta bien. Porque al revisar los métodos de prestashop para cargar productos al carrito me encuentro con llamadas a la base de datos a partir de los id de productos que están almacenados en la misma. Pienso que si modifico el código de prestashop para el carrito ya no veo la ciencia de usar prestashop y no hacer una tienda a la medida por lo cual LES AGRADECERÍA MUCHO sus ideas para integrar ya sea los productos al sistema de prestashop (en que clase o controlador integrar la customizacion y si puedo hacerlo con curlphp) o como adaptar el carrito a lo que he desarrollado. 

 

 

Link to comment
Share on other sites

Hola, ruthcast.

No sé si he entendido bien todo lo que has hecho.

¿Estás realmente IMPORTANDO los productos a la base de datos de Prestashop, o simplemente usas tu módulo para hacer una llamada a la API de otro software donde están almacenados los productos y los muestras a continuación? Si es esto último, yo tampoco veo la ventaja de usar Prestashop para ello, ya que no te va a funcionar ninguna de las características de este soft (clasificarlos en categorías, realizar búsquedas y filtrados, añadir productos al carrito, hacer el checkout, usar el backend para gestionar los pedidos, etc). Es que no es solo el carrito, es que TODAS las características de Prestashop se basan en que los productos estén en su base de datos, por lo que tendrías que modificar prácticamente todo, con muchísimas posibilidades de que se te escape algo y no funcione como esperas.

Yo entiendo que lo correcto es, o bien IMPORTAR los productos a Prestashop, para luego poder usar todas las funcionalidades que proporciona y enlazar las operaciones básicas con la API que tienes para que sincronicen productos, stocks y ventas, o bien prescindir de Prestashop y crear un CMS propio para trabajar directamente con la API que comentas.

Edited by Prestafan33 (see edit history)
Link to comment
Share on other sites

Hola Prestafan33 gracias por responder. Exáctamente como te mencione estoy nueva prestashop y lo que he hecho es sólo usar el módulo que cree para llamar a la API donde están almacenados los productos y mostrarlos. Quiero revertir esto para incorporar los productos a prestashop y usar este soft tal como desea el cliente. Podrías decirme en que modulo, clase o controlador debo incorporar el servicio?.

Nuevamente muchas gracias por tu tiempo.

Edited by ruthcast (see edit history)
Link to comment
Share on other sites

Pues, si la API que usas es propia y no es la de algún programa comercial concreto, no creo que encuentres ningún módulo ya preparado que haga lo que tú quieres.

Como te decía en mi anterior mensaje, yo crearía un módulo propio que conectase con la API e importase los productos a Prestashop. Y luego, dependiendo de las necesidades que tengas, usaría los hooks que se ejecutan cada vez que se completa un pedido para sincronizar los stocks de productos y los pedidos con el otro software. También tendrías que crear un controlador en el módulo para añadir nuevos productos.

Para todas estas operaciones puedes usar el webservice, o bien programar tú mismo las operaciones, a partir de las clases de Prestashop. Si optas por esta última opción, revisar cómo se hace en el módulo de importación de productos puede resultarte de gran ayuda (echa un vistazo al archivo /src/Adapter/Import/Handler/ProductImportHandler.php).

Link to comment
Share on other sites

No llego a entender bien lo que quieres pero te explico-

Si quieres añadir producto o datos a prestashop

Software -> envía por webservice/api a prestashop -> se añade en prestashop

Prestashop -> lee por api los datos del software -> se añade al prestashop

Si quieres añadir un producto a software

Software -> lee por webservice de prestashop -> se añade al software

Prestashop -> Envia datos por api del software -> se añade al software

La cuestión es ..

El software tiene API? si tiene usa un modulo para prestashop que lea los datos

El software no tiene API, pero tienes acceso al "source" y puedes añadir las ordenes de lectura de webservice de prestashop , usa el webservice

 

Por cierto debes generar todo un modulo, completo, no modificar ficheros del prestashop, esto es lo que esta explicando el compañero @Prestafan33

Añadir en el modulo todo el codigo de lectura y "hooks" donde controlar los pedidos nuevos, clientes, cambios en stock etc..

 

Edited by gusman126 (see edit history)
Link to comment
Share on other sites

1 hour ago, ruthcast said:

Muchas gracias por tu aporte, intentaré hacerlo como mencionas y ya te contaré como me fue. Estoy en la versión 1.7 de prestashop y no consigo la ruta /src/Adapter/Import/Handler/ProductImportHandler.php).

Me refiero a este archivo:

https://github.com/PrestaShop/PrestaShop/blob/develop/src/Adapter/Import/Handler/ProductImportHandler.php

Link to comment
Share on other sites

2 hours ago, gusman126 said:

No llego a entender bien lo que quieres pero te explico-

Si quieres añadir producto o datos a prestashop

Software -> envía por webservice/api a prestashop -> se añade en prestashop

Prestashop -> lee por api los datos del software -> se añade al prestashop

Si quieres añadir un producto a software

Software -> lee por webservice de prestashop -> se añade al software

Prestashop -> Envia datos por api del software -> se añade al software

La cuestión es ..

El software tiene API? si tiene usa un modulo para prestashop que lea los datos

El software no tiene API, pero tienes acceso al "source" y puedes añadir las ordenes de lectura de webservice de prestashop , usa el webservice

 

Por cierto debes generar todo un modulo, completo, no modificar ficheros del prestashop, esto es lo que esta explicando el compañero @Prestafan33

Añadir en el modulo todo el codigo de lectura y "hooks" donde controlar los pedidos nuevos, clientes, cambios en stock etc..

 

Hola @gusman126 Gracias por responder. Lo que me han pedido es usar los productos que muestra una api para gestionar compras y pedidos dentro de prestashop. Lo que hice inicialmente debido a mi desconocimiento fue crear un modulo y dos hook's que utilice para simplemente listarlos o mostrarlos. Pero al tratar de agregarlos al carrito de compras obviamente no pude hacerlo pq no los estaba insertando en la base de datos y solo lo estoy mostrándo desde la api. Y pues lo que quería era una idea para incorporar estos productos desde la api que me dio el cliente al sistema de prestashop. Se me ha ocurrido consumir la api y generar archivos .csv para importar los productos pero esto no me permitiría mantener sincronizada la información de la api con la tienda. 

Link to comment
Share on other sites

Sigo sin entender

"Lo que me han pedido es usar los productos que muestra una api para gestionar compras y pedidos dentro de prestashop. "

Que quieres decir? añadir pedidos al prestashop desde el software/api 

Leer pedidos de un software y añadirlos al prestashop?

"Pero al tratar de agregarlos al carrito de compras obviamente no pude hacerlo pq no los estaba insertando en la base de datos y solo lo estoy mostrándo desde la api. "

Existen classes y codigo para añadir carritos sin tener que añadirlos directamente a la base de datos, no hay que trabajar directamente en la base de datos casi nunca, a no ser que busques algo de una tabla personalizada o algo muy concreto, para todo lo demas mejor usar classes

"Y pues lo que quería era una idea para incorporar estos productos desde la api que me dio el cliente al sistema de prestashop. Se me ha ocurrido consumir la api y generar archivos .csv para importar los productos pero esto no me permitiría mantener sincronizada la información de la api con la tienda. "

Sigo sin entenderlo, ahora un CSV? para lo mismo? añadir pedidos al prestashop.

Si vas a usar las classes de prestashop te puede servir este listado que hice para tenerlo a mano

https://gmartos.es/indice-de-classes-y-metodos-de-prestashop/

Link to comment
Share on other sites

Yo creo que entiendo lo que ha intentado hacer ruthcast.

Quería mostrar los productos en Prestashop, pero en lugar de importarlos a la base de datos, lo que hizo fue crear un módulo que recupera la información de los productos "en vivo" directamente desde la API de otro software, y luego insertó unos hooks en los archivos de plantilla de productos para mostrar esos productos desde el módulo en cuestión.

Esto tiene el problema que ya hemos comentado, la información de los productos se muestra, pero al no estar en la base de datos de Prestashop no se pueden utilizar las funcionalidades de PS para añadirlos a un pedido por ejemplo.

Yo le he recomendado que lo debería hacer es importar los productos a la BD de Prestashop desde su módulo, para así poder añadirlos a pedidos, listarlos, hacer búsquedas, trabajar con ellos desde el backend, etc, y él comentaba la posibilidad de generar unos CSV (de productos) a partir de la API del otro software para importarlos luego, aunque eso no le permitiría mantener sincronizado el stock y la info de los pedidos.

Link to comment
Share on other sites

@Prestafan33 EXACTAMENTE! Ya creí q estaba hablando otro idioma. He logrado generar el csv de productos, y combinaciones (atributos) con la información de la api. Pero quiero confirmar si es la mejor opción para sincronizar con la api pq he estado viendo algunos códigos de módulos de importación con csv y se me ocurre generar uno y luego programar un cronjob para hacer que cada cierto tiempo se sincronice la tienda con la api. Solo estoy buscando  y consultando ideas con los expertos, la mejor alternativa posible. Gracias a ambos por sus aportes.

Link to comment
Share on other sites

Ok, a ver si entiendo.

Productos de un sistema externo que quieres que se muestren y que además se puedan añadir al carrito, pero que no estén en la base de datos de PrestaShop??

No se puede.

Importar productos de un sistema externo , añadirlos a la base de datos, que se muestren y que puedas comprarlos.

Si que se puede.

Actualizar el stock y precios de esos productos, fácil ,añade un código, que lea el sistema externo y que actualice el producto , ese código en un fichero PHP añade un cron cada x tiempo y listo.

 

Te he enviado un mensaje privado, supongo que es lo que quieres hacer, confirma por mensaje y continuamos aquí 

 

Edited by gusman126 (see edit history)
Link to comment
Share on other sites

3 hours ago, gusman126 said:

Ok, a ver si entiendo.

Productos de un sistema externo que quieres que se muestren y que además se puedan añadir al carrito, pero que no estén en la base de datos de PrestaShop??

No se puede.

Importar productos de un sistema externo , añadirlos a la base de datos, que se muestren y que puedas comprarlos.

Si que se puede.

Actualizar el stock y precios de esos productos, fácil ,añade un código, que lea el sistema externo y que actualice el producto , ese código en un fichero PHP añade un cron cada x tiempo y listo.

 

Te he enviado un mensaje privado, supongo que es lo que quieres hacer, confirma por mensaje y continuamos aquí 

 

Exactamente! @gusman126

"Importar productos de un sistema externo , añadirlos a la base de datos, que se muestren y que puedas comprarlos.

Si que se puede."

Por los momentos tomé la recomendación de @Prestafan33 y genere archivos csv desde la api e importé los productos a la tienda, pero no es así como quiero que funcione. Quiero no solo importar los productos sino establecer comunicación entre la api con mi prestashop para tal como dices "Actualizar el stock y precios de esos productos".

Edited by ruthcast (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...