En Abatic Soluciones Tecnológicas no hemos parado de realizar proyectos en estos meses. Uno de ellos ha sido realizar unas mejoras a un ERP, desarrollado en Delphi, para que se conecte con una tienda web en Prestashop.

Un proyecto interesante que debía ser compatible desde la versión de Delphi 2007 como mínimo. En este post te hablamos sobre los requisitos previos para poder llevar a cabo la conexión y uno de los problemas que nos encontramos cuando queríamos enviar datos a la web.

Primero, ¿Qué es un ERP desarrollado en Delphi?

Un ERP (Enterprise Resource Planning) es un software de gestión empresarial que permite la integración de las operaciones internas de cada área de un negocio, como pueden ser la producción, la logística, el inventario, la distribución, la contabilidad y recursos humanos, y automatizan sus procesos internos. De este modo, con un único software, los datos se comparten entre todos los departamentos dando lugar a un sistema centralizado.

Desarrollado en Delphi no es más que este software ha sido desarrollado utilizando nuestra herramienta de desarrollo favorita; Delphi.

Configuración previa de Prestashop

Lo primero que necesitamos fue habilitar el Webservice de Prestashop desde la web. Esto se consigue desde el panel de administración de la web, yendo a ‘Configuración’ -> ‘Parámetros avanzados’ -> ‘Webservice’, ahí aparece la opción de ‘Activar el servicio web’.

Con eso ya listo, queda generar la API Key que usaremos para poder conectarnos. En esa misma pantalla, en la parte superior hay un botón para ‘Añadir una nueva clase Webservice’, donde podremos generar la clave y activar los permisos que necesitemos.

Con esa configuración previa ya pasamos directamente a escribir código en Delphi.

Conexión con Delphi

La conexión es muy sencilla, el componente que utilizamos en este proyecto es el TIdHttp de Indy. Un ejemplo básico de lo que realizamos en este proyecto, sería crear el componente mediante con estas simples líneas:

http:= TIdHTTP.Create(Self);
http.Request.ContentType:= 'text/html';
http.Request.Accept:= 'text/html, */*';

Solo con esa configuración del componente ya podíamos conectarnos a Prestashop desde la aplicación en Delphi. Por ejemplo, para obtener el listado de productos, si hemos almacenado en una variable la URL de la tienda y en otra, la API key generada, como era el caso de este proyecto, la obtención de productos la realizamos con esta línea de código:

http.Get(URLTienda+’/api/products/?ws_key=’+APIkey);

Esta petición GET devuelve la respuesta de Prestashop en un formato XML que luego procesamos con código para obtener los datos que necesitamos.

Esta petición se añade dentro de un bloque ‘try… except’, ya que, si la conexión con Prestashop falla, esta es la línea que lanza el error.

¿Qué tener en cuenta si la tienda usa el protocolo SSL?

En este proyecto nos encontramos que una de las tiendas en Prestashop con las que iba a conectarse el ERP, bastaba con la configuración anterior para hacer la conexión, pero en una segunda tienda, se usaba el protocolo SSL (https://) y fallaba la conexión a la hora de hacer las peticiones.

En este caso, había que comprobar que, en la carpeta donde estaban almacenadas las DLL, se encontraban las librerías de OpenSSL (ssleay32.dll y libeay32.dll), en caso de no tenerlas, habría que conseguirlas y añadirlas a la carpeta de las DLL que usa el proyecto.

Una vez que contamos con esas librerías, pasamos a añadir estas líneas de código a las opciones de TIdHTTP:

  1. Añadiendo en los Uses:
    IdSSLOpenSSL
  2. Añadiendo después de la creación del objeto TIdHTTP, la línea:
    http.IOHandler:= TIdSSLIOHandlerSocketOpenSSL.Create(nil);

Y listo, eso nos permitió conectarnos a la tienda con protocolo SSL sin problemas.

Problema con los caracteres especiales y los acentos.

Uno de los problemas más habituales es el tema de la codificación, algo que  no podía faltar en este proyecto.

Al descargar los productos o clientes no tuvimos problemas, pero si queríamos hacer una actualización o añadir nuevos datos, la conexión con Prestashop fallaba si algún elemento tenía algún tipo de acentuación o caracter especial.

La forma que tuvimos para solucionar este problema, teniendo en cuenta que debía ser compatible el código con versiones más antiguas de Delphi y que no necesitábamos almacenar estos caracteres en Prestashop, fue creando una función que se encargaría de procesar cada dato antes de generar el XML que enviaríamos a Prestashop.

A base de prueba y error detectamos unos caracteres problemáticos para el envío de datos con Prestashop. Por todo ello tuvimos que hacer nuestros propios procedimientos para reemplazar los caracteres extraños para esta versión de Prestashop y de Delphi. Debéis tener cuidado porque según la instalación que tengáis, vais a utilizar codificaciones diferentes, como UTF8, entre otros formatos, así pues, cuando os ocurra, iréis tomando vuestras propias decisiones.

Hasta aquí una parte de nuestra experiencia conectando un ERP desarrollado en Delphi y Prestashop, en futuros posts seguiremos hablando de los proyectos realizados y los problemas que nos hemos ido encontrando en cada uno de ellos. ¡Te esperamos!

Acerca de Sandra Camero

Programadora Delphi | Programadora FrontEnd
En 2016 me reinventé de manera profesional para adentrarme en el mundo de la programación y el desarrollo web y desde entonces no he dejado de aprender.
Empecé mi andadura trabajando con WordPress y tecnologías JavaScript, como Angular e Ionic, y desde hace tres años me lancé al aprendizaje del desarrollo con Delphi, en el cuál ahora estoy enfocada.

Reader Interactions

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad

Responsable: ABATIC SOLUCIONES TECNOLOGICAS SLU
Finalidad: gestionar los comentarios.
Legitimación: tu consentimiento.
Destinatarios: los datos que me facilitas estarán ubicados en los servidores de Nicalia dentro de la UE. Ver política de privacidad de Nicalia.
Derechos: podrás ejercer tus derechos, entre otros, a acceder, rectificar, limitar, suprimir, portabilidad y olvido de tus datos.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.