Cómo utilizar la API de PrestaShop
5 (100%) 2 voto[s]

PrestaShop es una plataforma eCommerce que cuenta con una gran comunidad de usuarios y un ecosistema en lo que a módulos se refiere, que suplen una gran cantidad de necesidades diversas, además cuenta con una licencia Open Software License v.3.0. Nos brinda una gran cantidad de opciones, que van desde tarifas para transportistas de diferentes zonas geográficas, stock avanzado e incluso la posibilidad de hacer una multitienda. Pero, si queremos interactuar con el core PrestaShop sin necesidad de hacerlo de forma manual o a través de las vías habituales haciendo uso del del backoffice. ¿Cómo lo hacemos? Para este propósito se creó el webservice, el cual, a través de la exposición de un recurso, nos permite realizar acciones para automatizar tareas, integrar la información en otros sistemas, etc. Entre los cuales, podemos ver que hay recursos para «orders», «products» o «customers» entre otros.

¿Qué vamos a hacer?

En este artículo, vamos a ver como podemos explotar el recurso de «orders» con los permisos de «Ver» a través del webservice. Anteriormente, comentamos que era un API REST, te dejamos aquí un link por si todavía no sabes qué es. Además, en este otro artículo, comentamos el uso de composer, que usaremos para instalar una librería que nos facilitará el trabajo. Vamos a suponer que se dispone de un servidor apache o nginx para ejecutar los archivos que a continuación se presentan.

Para comenzar con las pruebas, vamos a utilizar un paquete llamado guzzle, que instalaremos a través de composer. En la documentación del paquete nos instan a que instalemos composer, paso que nos saltaremos, suponiendo que ya lo tenemos instalado. El siguiente comando lo que hará entre otras cosas, es descargar el paquete con sus respectivas dependencias en la carpeta vendor, generar los autoloaders, etc, para que podamos usarlo.

¿Cómo crear el api key en PrestaShop?

En primer lugar, lo que necesitamos para poder iniciar las pruebas es tener una clave de webservice. Para ello, nos dirigimos a parámetros avanzados > Webservice. Si nunca lo hemos usado, tendremos que activar el servicio con el switch correspondiente antes de añadir el key. Tras pulsar sobre añadir, se nos muestra una tabla, con los recursos a la izquierda, y las acciones en la parte superior. Nosotros sólo activaremos el recurso «orders» con la acción GET, para poder llevar a cabo consultas, como hemos comentado anteriormente. El resto de acciones, se pueden usar para crear, borrar y modificar un recurso, cosa que queda fuera de este artículo.

Es importante remarcar, que tanto el resultado, como la introducción de datos al webservice se hace en formato xml. Así pues, para tratar la información que nos devuelva, como también la información que le proporcionemos al crear o editar, será necesario que esté en formato xml correcto. Para ello hay opciones que trae el propio core de PHP, como podría ser SimpleXML. Nosotros recomendamos una alternativa mejor llamada serializer, la cual tiene mucha versatilidad por la cantidad de formatos que pueden usarse y cuenta con una documentación de excelente calidad.

Ahora que tenemos creada nuestra api key, podemos hacer una prueba rápida de que funciona, accediendo a la url: . Esto devolverá un listado de elemento en formato xml con todos los permisos que la cuenta tiene sobre ese recurso. Revisa que en el xml, el atributo get es true, para el recurso «orders». En caso de que no sea correcta la configuración, PrestaShop te mostrará el siguiente mensaje de error: «405 Method Not Allowed».

La estructura para acceder a los recursos es la siguiente: /api/[recurso]/[?identificador]?ws_key=[clavegenerada]. Si introducimos un identificador nos mostrará los datos relevantes al elemento, por el contrario, si obviamos ese identificador, devolverá un listado de todos los elementos que hay en ese recurso.

Obtención de un listado de elementos

Para llevar a cabo el primer cometido, vamos a crear un archivo, como el siguiente para obtener un listado de elementos, que forman parte del recurso «orders»:

Y a continuación, la respuesta:

Como podemos observar, el listado de elementos, a parte de tener una propiedad id, nos muestra la url absoluta donde podemos consultar la información de ese elemento en concreto. No se puede obtener mas de uno a la vez, es necesario hacer una petición por cada elemento a consultar.

*Si accedes al archivo a través de un navegador, es probable que no veas la respuesta del servidor, puesto que el navegador va a detectar que se trata de xml y lo intentará parsear. En tal caso, puedes usar un lector de xml usando alguna extensión para el navegador, o simplemente ver el código fuente de la página. En caso de usar otras herramientas como curl o httpie para realizar la petición, verás el contenido correctamente.

Obtención de un listado de elementos de forma paginada

Ahora vamos a hacer uso de un parámetro que nos permite realizar una paginación simple, solo para los listados de elementos, ya que al consultar la información de un elemento, carece de sentido. Para ello vamos a utilizar el parámetro limit que tiene el siguiente formato: limit=[inicio],[cantidad]:

Y esta es la respuesta:

Como se puede observar, la respuesta muestra un listado, pero esta vez, con el número de elementos y el inicio que le solicitamos. Esto es un aspecto clave a tener en cuenta a la hora de hacer uso de la api, para optimizar los recursos. Nos permite obtener cantidades de información mayores con la misma petición.

Obtención de la información relativa a un elemento

Para ello vamos a crear el siguiente archivo:

La respuesta:

Hemos omitido parte de la respuesta, ya que son datos irrelevantes para el objetivo de la prueba. Aquí podemos observar como los recursos que cuentan con su propia uri para acceder, nos indica su url absoluta, y no nos proporciona la información de dicho recurso. En caso de necesitar, por ejemplo, el elemento del carrito (cart), deberíamos hacer una nueva petición a esa url. En nuestro caso, no podríamos tener acceso a él, sin habilitar los permisos al menos de «Ver» para dicho recurso.

Conclusión

Hemos configurado el acceso al webservice de prestashop para hacer posteriormente un uso en los tres casos que se nos pueden presentar por lo que a consulta se refiere: listar elementos, paginar listado de elementos y consultar la información relacionada con cada elemento. Además hemos hecho uso de composer para utilizar el paquete de un tercero.

Cuando tenemos un tienda en PrestaShop y necesitamos extraer y/o actualizar información, este es un buen punto de partida para conseguir la interoperabilidad entre sistemas. Si bien es cierto, que carece de algunos aspectos que facilitarían la obtención de datos, como por ejemplo, extracción de la información de los elementos en bloque, pues estamos limitados a consultar los elementos de uno en uno. Es posible llevar a cabo una integración al tratarse de una API REST, que nos puede permitir realizar cualquier automatización de tareas o la extracción de información. En todo caso, es una herramienta útil, que deberemos tener siempre en cuenta, para cuando tengamos unas necesidades que no podemos realizar por otras vías.

He leído y estoy conforme con la Política de Privacidad.