Creación masiva de colecciones - Shopify API & PHP

En días pasados me encontré con la necesidad dentro de Shopify de crear una larga lista de colecciones automatizadas, para lo cual utilice la API de Shopify con PHP, aquí te muestro como hacerlo.

Comenzaré con explicar brevemente que son las colecciones automatizadas.

Son colecciones que agregan los productos dentro de ellas en base a reglas, por ejemplo, puedes crear colecciones para todos los productos que estén en oferta, los que sean de un vendedor en especifico, que contengan una o varias TAGS, por el tipo de producto, información en el nombre, y varias opciones más, además de permitir la utilización de varias reglas, por ejemplo, puedes crear una colección para todos los zapatos de hombre que sean de la marca Adidas, esto lo podrías hacer agregando las siguientes reglas:
- Todos los productos que su tipo sea ZAPATO
- Todos los productos que tengan el TAG Hombre
- Todos los productos que tengan como vendedor/vendor/marca Adidas

Esto hará que cualquier producto que cumpla esas reglas se agregue automáticamente a dicha colección.

Cuando el paso es crear unas cuantas colecciones el proceso puede hacerse sin problemas desde el dashboard de Shopify, el problema surge cuando se deben crear muchas colecciones, esto se vuelve un tanto engorroso hacerlo uno por uno, pero para eso podemos utilizar la API de Shopify, a continuación te muestro lo fácil que es hacerlo de esa manera.


Comencemos

El primer paso será crear las credenciales para poder conectarnos a la API, para eso debemos crear una nueva APP Privada, para esto entramos a Aplicaciones -> Gestionar apps privadas y damos click en Crear una nueva aplicación privada.

En el siguiente paso nos solicitará los datos de la aplicación, deberás darle un nombre e indicar un email de desarrollador, además, en el apartado de Panel de control API cambiar los permisos de Product, variants and collections a Read and write y listo, nos creará la aplicación y en el siguiente paso nos generará las claves (keys) necesarias, estas debemos copiarlas por que las necesitaremos en nuestro código, tanto la Clave API como la Contraseña.



Una vez creada la app y obtenidas las claves necesarias pasamos al código.

La conexión la haremos desde un archivo PHP de manera local y crearemos las colecciones en un archivo .json.


Archivo colecciones.php
<?php
/**
 * Definicion de los datos de la API
 */

// Claves y datos de la tienda
$user    = "0a17323c6cd17f1cba392a0000000000";
$pass    = "a3b3577653678cd144919d0000000000";
$store   = "LATIENDA.myshopify.com";


$apiDest = "/admin/api/2019-10/smart_collections.json";

/**
 * Creamos la URL de conexión
 */
$url = "https://$user:[email protected]$store$apiDest";
$file = "colecciones.json";

/**
 * Indica si se conecta o no a la API
 * @number 1|0 1 Se conecta, 0 No
 */
$use = 1;

/**
 * Obtiene el archivo json con las colecciones
 */
$datos = json_decode(file_get_contents($file));

/**
 * Recorre el archivo JSON con los valores de cada colección
 */
foreach ($datos as $key => $valor) {

    /**
     * Crea el array $data para el almacenado de información de la colección actual
     * @string title - Nombre de la colección
     * @array rules - Reglas de la smart collection
     */
    $data  = [];
    $data["smart_collection"]["title"] = $key;
    $data["smart_collection"]["rules"] = [];

    /**
     * Crea el ciclo de la creación de cada regla para cada colección
     */
    $reglas = $valor->rules;
    foreach ($reglas as $keyr => $regla) {
        $data["smart_collection"]["rules"][$keyr]["column"]    = $regla->column;
        $data["smart_collection"]["rules"][$keyr]["relation"]  = $regla->relation;
        $data["smart_collection"]["rules"][$keyr]["condition"] = $regla->condition;
    }

    /**
     * Si se asigna el valor 1 a $use se conecta con la API de shopify para crear cada colección
     * @int $use
     */
    if ( $use == 1 ) {

        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_VERBOSE, 0);
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_POSTFIELDS,json_encode($data));

        $response = curl_exec($ch);

        if (!$response) 
        {
            return false;
        }    
    }
}

/**
 * Imprime los resultados con depurador de respuesta
 */
echo "<br>Result: $apiDest";​

Donde tenemos 3 valores que debemos modificar y son las primeras 3 variables en el código php:
$user es el valor dentro de la app de Shopify indicada como Clave API
$pass es la clave de la app
$store es la url de la tienda

Ahora creamos el archivo json con la información de las colecciones automáticas a agregar y lo ponemos en la misma carpeta del archivo php.


Archivo colecciones.json
{
    "Zapatos de caballero": {
        "rules": [
            {
                "column": "tag",
                "relation": "equals",
                "condition": "ZAPATOS"
            },
            {
                "column": "tag",
                "relation": "equals",
                "condition": "CABALLERO"
            }
        ]
    },
    "Zapatos de dama": {
        "rules": [
            {
                "column": "tag",
                "relation": "equals",
                "condition": "ZAPATOS"
            },
            {
                "column": "tag",
                "relation": "equals",
                "condition": "DAMA"
            }
        ]
    }
}​


En este ejemplo simple estamos creando 2 colecciones automatizadas que en base a las tags de los productos los agrega de manera automática, por ejemplo, en la colección Zapatos de caballero agregará todos los productos que tengan dentro de sus tags la de ZAPATOS y la de CABALLERO y en la colección de Zapatos de dama agregará todos los productos con la tag ZAPATOS y DAMA.

Se pueden crear colecciones con las reglas necesarias, para más información sobre esta API y las colecciones automatizadas (smart collections) visita: https://help.shopify.com/en/api/reference/products/smartcollection

Esto es como crear una colección automatizada dentro del dashboard de Shopify pero pudiendo hacerlo de manera masiva.