¿Por qué usar la API de Magento?

Una tarea muy interesante en el mantenimiento de proyectos con Magento es conectar a éstos mediante su API. A las APIs se les llama comúnmente Servicios Web, porque suelen ser interfaces de programación de aplicaciones que funcionan haciendo peticiones web. En Magento tenemos dos tipos de Servicios Web: los SOAP/XML-RPC y REST.

Tengo que decir que aunque el servicio REST es más completo, en este post me voy a centrar en el SOAP/XML-RPC porque es más sencillo. Concretamente, vamos a hacer unas llamadas de prueba a un Magento 1.9. Así en muy poco tiempo, y con todo tipo de software externo, podemos enlazar otro sistema informático sin modificar absolutamente nada de Magento, añadiendo nuevas funcionalidades a un proyecto.

Un poco de teoría

En uno de los proyectos con Magento tenemos esta API SOAP/XML-RPC que se consulta desde una aplicación de móvil. En esta aplicación de móvil se gestionan cosas como pedidos, stock de productos, aparte de otras cosas extra que trae con un módulo en la parte de Magento. Se tratan de tareas clásicas de gestión de un ERP.

Es decir, tenemos prácticamente todos los objetos de información clásicos disponibles para trabajarlos externamente a través de estas APIs: clientes, productos, categorías, pedidos, inventarios, etcétera. Sólo tenemos que configurar el acceso y podremos hacerlo. Usar una API es muy limpio ya que no necesitamos modificar Magento, no necesitamos añadir módulos ni modificar los que ya hay para enganchar un sistema externo. Sino que directamente conectamos a la API y gestionamos la información de manera externa.

Configurando la API de Magento

El primer paso que tenemos que dar es configurar Magento para poder usar esta API que vamos a ver esta vez. En un Magento 1.9 tenemos las siguientes dos opciones de configuración:

Magento API SOAP configs

La idea es que tenemos usuarios SOAP/XML-RPC que están asignados a roles. Entonces tenemos que configurar estas dos cosas, por un lado configuramos unos roles y por otro lado los usuarios dándoles usuario y contraseña. Por ejemplo, éstas son algunas configuraciones que tenemos para limitar el acceso a ciertos datos a un rol:

Magento API SOAP edit role

Y éstas son unas configuraciones de un usuario de pruebas:

Magento API SOAP edit user

Esto es todo lo que necesitamos configurar en la parte del panel de control de Magento. Fíjate que tenemos dos elementos importantes que vamos a necesitar, son la API key y el nombre de usuario. Con este nombre de usuario y clave de API vamos a conectarnos a Magento y haremos peticiones.

Unas pruebas

Ahora nos queda hacer unas sencillas pruebas para comprobar que todo esto funciona correctamente. Para ser prácticos elijo PHP como cliente, y vamos a hacer unas consultas a un Magento 1.9 actualizado. Un listado de productos del catálogo completo con los atributos básicos:

<?php

$proxy = new SoapClient('https://www.tupaginawebmagento.com/es/api/v2_soap/?wsdl');
$sessionId = $proxy->login('jaime', 'contraseña');

$start = microtime(true);

// Listing all products
$products = $proxy->catalogProductList($sessionId);

$end = microtime(true);
$time = number_format((microtime(true) - $start), 2);

echo count($products).' productos descargados en '.$time.' segundos.'.PHP_EOL;

foreach ($products as $product) {
    echo $product->product_id.','
        .$product->sku.','
        /*.$product->name.','
        .$product->set.','
        .$product->type.','
        .implode('#', $product->category_ids).','
        .implode('#', $product->website_ids)*/
        .PHP_EOL;
}

Esto lo pones en un fichero pruebas.php y lo ejecutas desde línea de comandos. En la pantalla debes ver algo parecido a esto:

4962 productos descargados en 7.84 segundos.
26,F8W153vfc02,
30,HDW14322003W,
42,NKCA190CD,
48,ASEMPS80R,
66,MLITTZEROLIM,
69,NKBL5CB,
80,F8Z460eaRED,
81,SEMS410,
94,BCH205HKE,
95,TNK6500NS,

Otra consulta intersante puede ser obtener un listado completo de los atributos por defecto de un producto:

$product = $proxy->catalogProductInfo($sessionId, $productId);

Pero los productos pueden tener más atributos que los que ves en el listado anterior. También podemos obtener los atributos de producto definidos por nosotros pero antes hay que saber cuáles son estos. Así tenemos un listado de estos atributos extra:

$productFullAttributes = $proxy->catalogProductListOfAdditionalAttributes($sessionId, $product->type, $product->set);

..y entonces podemos llamar de nuevo para obtener más datos del producto anterios. Es decir, así tenemos los atributos por defecto más los atributos extra:

$product = $proxy->catalogProductInfo($sessionId, $productId, null, array(
    'additional_attributes' => $additional_attributes,
), null);

Así podríamos seguir con el listado de categorías, stocks, precios, clientes, pedidos y un largo etcétera.

Documentación sobre la API de Magento

Para terminar no me queda más que remitirme a la documentación oficial donde están el conjunto completo de llamadas SOAP disponibles:
https://devdocs.magento.com/guides/m1x/api/soap/introduction.html
https://devdocs.magento.com/guides/v2.0/get-started/soap/soap-web-api-calls.html

¿Prefieres que te echemos un cable?

A veces, ciertas cosas pueden sonar a chino. Estaremos encantados de conocer tu proyecto para darte una solución personalizada.

¡Contáctanos!

¿Te has quedado con ganas de más?

Echa un vistazo a otros posts del blog. ¡Nos esforzamos por crear contenido útil para ti!

¡Ver posts!

    Deja un comentario

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