22 Dic

La API REST de WooCommerce en una Tienda Online WordPress

Héctor Garnacho García
Web Developer / teacher @ Vital Innova
woocommerce api rest

Si estamos afrontando el desarrollo de una tienda online en WordPressWooCommerce, puede surgirnos la necesidad de que nuestro sitio web se comunique con aplicaciones externas. Por poner un ejemplo, es posible que sea necesario integrar nuestra tienda wordpress online con otras herramientas implantadas en nuestra organización, como por ejemplo, un ERP. Tal vez deseemos obtener informes de ventas que sean procesados por otras aplicaciones, o necesitemos que el registro de clientes se realice desde otros sitios diferentes a la propia tienda.

En casos como estos, podemos plantearnos una integración manual, a nivel de datos o procesos, accediendo directamente a la base de datos. Como podemos suponer, esta no es una buena opción, por varias razones. Entre otras, nuestros desarrollos serán dependientes de las versiones de WordPress y Woocommerce que estamos empleando, ya que cualquier cambio en el esquema de la base de datos, por pequeño que sea, puede suponer una catástrofe.

WooCommerce nos ofrece una completa API REST que permite que aplicaciones externas se comuniquen con ella, y lancen procesos internos desde el exterior. Si utilizamos WooCommerce 2.6, y WordPress 4.4 (o posteriores), dispondremos de la API de WooCommerce (WC Versión 1) perfectamente integrada con la API estándar de WordPress.

Aunque, como sabemos, es muy recomendable mantener nuestro WordPress y nuestros Plugins actualizados a la última versión, y supondremos que disponemos al menos de las versiones indicadas anteriormente para el resto del articulo, es posible hacer uso de las versiones «Legacy» de la API de WooCommerce, que pueden ser usadas desde la versión 2.1 de WooCommerce y 4.1 de WordPress.

Requisitos

De forma general, los requisitos son los siguientes:

  • WooCommerce 2.6+
  • WordPress 4.4+
  • Permalinks activados

Aunque podremos acceder a la API a través de HTTP, es recomendable hacerlo a través de HTTPS. Por defecto, WC V1 ofrece soporte para JSONP.

Qué me permite hacer la API REST de WooCommerce?

Esta API cubre prácticamente todas las operaciones que podamos necesitar en el ámbito de WooCommerce. Aparte de realizar acciones de alta, baja, modificación y consulta de clientes, productos o pedidos, podemos operar con devoluciones, impuestos, atributos de productos e incluso obtener informes.

Librerías

Existen librerías específicas para los entornos de desarrollo más populares:

Autenticación

Aunque existen diferentes maneras de autenticarse en la API de WooCommerce (como por ejemplo, mediante plugins u otros métodos de autenticación), vamos a ver un ejemplo usando API Keys.

Para implementar este método, debemos entrar en la administración de nuestro WordPress y acceder a wordpress api de la siguiente manera:

WooCommerce -> Ajustes -> API

A continuación, haremos click en el enlace Claves/Aplicaciones

Generar API Key

Para avanzar en el proceso,  se debe pulsar el botón «añadir Clave», y especificar la descripción, el usuario y los permisos para la API.

Detalles de la API Key

Una vez establecidos los parámetros, podremos generar nuestra API Key. Como podemos ver, tendremos un par de claves, el código QR y la posibilidad de revocar las claves.

API Key generada

Cómo probar que la API está funcionando. Acceso al Index

Por defecto, el index de la API permite consultar todos los endpoints disponibles. Para hacer esto, no es necesario que nos autentiquemos.

Este es un primer paso muy aconsejable para comprobar que la WooCommerce API está activa. Para ello, basta con llamar al index de la API a través de una URL como la siguiente:

http://www.midominio.com/wp-json/wc/v1

La respuesta de éste método será un objeto JSON que contendrá información sobre los endpoints disponibles.

Llamadas a la API con cURL

Para la mayoría de los endpoints definidos en la API, será necesario identificarse. Como hemos visto anteriormente, cuando hemos activado la API de WooCommerce, se generaron dos claves. La clave que hemos de emplear para identificarnos y de esta manera acceder a los métodos de la API es la Clave Secreta de Cliente.

Si intentamos llamar a un proceso sin indicar la clave secreta de cliente, obtendremos un mensaje similar al siguiente:

{"code":"woocommerce_rest_cannot_view","message":"Lo sentimos, no puedes ver este recurso.","data":{"status":401}}

Como ejemplo, vamos a hacer uso de la API de WooCommerce para obtener la información de un producto determinado en formato JSON.

Ejemplo. Obtener información de un producto

Supongamos que deseamos obtener información sobre el producto cuyo identificador es el 6. Si consultamos la documentación de la API, podemos ver cómo el proceso que nos permite hacer esto es el siguiente:

/wp-json/wc/v1/products/

Para invocar este método desde PHP, podemos hacer uso de cURL, empleando la siguiente sintaxis:

curl https://www.midominio.com/wp-json/wc/v1/products/6 \ -u consumer_key:consumer_secret

Cuando se lanza el proceso, obtendremos un objetos JSON que comenzara con las siguientes líneas:

{
  "id": 6,
  "name": "Ejemplo de Producto WooCommerce",
  "slug": "ejemplo-producto-wooocomerce",
  "permalink": "https://www.midominio.com/product/ejemplo-producto-woocommerce/",
  "date_created": "2016-10-31T10:21:30",
  "date_modified": "2016-10-31T10:21:30",
  "type": "simple",
  "status": "publish",
  "featured": false,
  "catalog_visibility": "visible",
  "description": "Descripción del producto", 
  "short_description": "Descripción corta", 
  "sku": "", 
  "price": "14.99", 
  "regular_price": "14.99", 
  "sale_price": "", 
  "date_on_sale_from": "", 
  "date_on_sale_to": "", 
  .... 
  ....

Modificar un cliente

En otras ocasiones, no solamente desearemos obtener información, sino que será necesario modificarla. El siguiente ejemplo modifica el nombre para el cliente con id 2. Para los métodos que requieran recibir parámetros, se empleará el formato JSON, con tantos elementos como atributos requiera el proceso. En el siguiente ejemplo, se modificará el nombre del cliente en 3 sitios diferentes: en los datos generales del cliente, en la dirección de facturación y en la dirección de envío.

curl -X PUT https://example.com/wp-json/wc/v1/customers/2 \
    -u consumer_key:consumer_secret \
    -H "Content-Type: application/json" \
    -d '{
         "first_name": "Luis",
         "billing": {
                      "first_name": "Luis"
                    },
        "shipping": {
                      "first_name": "Luis"
                    }
     }'

¿Dónde puedo encontrar la mejor documentación sobre esta API?

Aunque existen varios sitios en los que podemos obtener información valiosa sobre esta API, probablemente el mejor recurso es el siguiente:

Documentación de la API en Github

Si te ha parecido interesante el post y quieres aplicarlo en tu web no dudes en ponerte en contacto.