api-prestashop

Cómo utilizar la API de PrestaShop

4.8/5 - (6 votos)

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.

Comparte
¿Quieres más información?
Ponte en contacto con nosotros.
Picture of Jordi Mahiques
Jordi Mahiques
Backend developer - Departamento de desarrollo

13 comentarios en “Cómo utilizar la API de PrestaShop

  1. Necesito conectarme a un webservice y actualizar la informacion de mi ecommerce en prestashop. debo autenticarme con usuario y contraseña y acceder a un token con duracion de 24 horas. con este modulo lo puedo hacer?

  2. Hola Jordi,

    Primero felicitarte y agradecerte por el artículo.

    Una pregunta, haciendo uso de esta API se puede crear una orden de compra?

    Lo que pasa es uno de mis clientes quiere que el proceso de cobro lo realice por medio de una paserla de pago que no tiene algún módulo para prestashop, lo que si tiene es una API. Esto quiere decir que tendría que hacer la integración por mi cuenta. Viendo tú articulo me surgió la de idea procesar el pago (mediante la API de la plataforma de pago) y una vez que que este haya sido aceptado crear la orden por medio de la API de prestashop. En tu opinión, qué tan complejo sería adaptar el proceso de compra para poder utilizar este método de pago?

    Saludos

    1. Buenas tardes Emmanuel,

      gracias por tus comentarios. Te aconsejamos que intentes desarrollar un módulo de PrestaShop para realizar el pago. Tendrás mas facilidad para desarrollarlo, puesto que está integrado en el flujo normal de la plataforma. Te dejamos un enlace a la documentación oficial donde explican como crear un módulo de pago: https://devdocs.prestashop.com/1.7/modules/payment/

      Si te sientes con fuerzas, puedes incluso subirlo al PrestaShop Addons marketplace ;).

      Un saludo.

  3. Hola, segui tus indicaciones, pero al momento de imprimir la informacion de retorno, no se muestra error, es decir, pareciera q el echo (string)$response->getBody(); retornara vacio.

    No hay mensajes de error ni nada.

    1. Buenos días,

      te aconsejamos que uses un debugger para depurar el código. En caso de que no dispongas de él puedes hacer uso de:

      ini_set('display_errors', 1);
      error_reporting(E_ALL);

      Un saludo.

  4. Saludos soy nuevo en esto y quiero implementar la conexion de un erp como admpiere con prestashop para conectarlos y llevar una conexión de imventario me pidieron conectar una api de terceros con prestashop esto se haria con web service?

  5. Hola, me confirman si esto seria posible?
    – Crear un cart/checkout desde la API
    – Obtener un Url del checkout page
    – Redireccionar al usuario a ese url para que realice el pago

    Muchas gracias

Enviar Comentario

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

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

Suscríbete a nuestra newsletter
para estar al día en el mundo online
¿Tienes alguna incidencia?

Cuéntanos qué ocurre
y nos pondremos con ello lo antes posible.

    Este sitio está protegido por reCAPTCHA, y la Política de privacidad y Términos de servicio de Google.

    ¡Cuéntanos tus ideas!
    +34 96 653 19 14
    info@acceseo.com

      Este sitio está protegido por reCAPTCHA, y la Política de privacidad y Términos de servicio de Google.