Last active
April 28, 2021 14:22
-
-
Save javimata/75014df55e517ff94dd1a6750dbf13f3 to your computer and use it in GitHub Desktop.
API Shopify update stock
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"require": { | |
"phpclassic/php-shopify": "^1.1" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Sincroniza inventario de stock en shopify | |
* Se deben dar permisos a la APP a: | |
* Inventory (Read and write) | |
* Locations (Read access) | |
* Product, variants and collections (Read and write) | |
* | |
* Configuración: | |
* @int $updateStock 0|1 Genera la actualización | |
* @Array $config con los datos de la tienda y claves de la API | |
* @int $limit establece el limite de productos por página, max. 250 | |
*/ | |
// Incluimos el autoload de Composer | |
include "vendor/autoload.php"; | |
// Datos de configuración de la tienda | |
$config = [ | |
'ShopUrl' => '[TIENDA].myshopify.com', | |
'ApiKey' => '0a17323c6cd17f1cba392000000', | |
'Password' => 'a3b3577653678cd144910000000' | |
]; | |
// Indica si se debe actualizar el stock | |
$updateStock = 0; | |
// Limite de productos por carga, max 250 | |
$limit = 50; | |
// Configura los parametros para el limite de productos | |
$params["limit"] = $limit; | |
// Llamado al SDK y carga en $shopify | |
PHPShopify\ShopifySDK::config($config); | |
$shopify = new PHPShopify\ShopifySDK; | |
// Cuenta el total de productos en el sitio | |
$productCount = $shopify->Product->count(); | |
// Calcula la cantidad de páginas en base al total de productos entre el limite a mostrar por carga | |
$paginas = ceil($productCount/$limit); | |
// Contador (opcional) | |
$contador = 1; | |
// Crea el encabezado resumen y el de la tabla | |
echo "Limite: " . $limit . "<br>Cantidad total: " .$productCount . "<br>Paginas: " . $paginas . "<hr>"; | |
echo "<table cellpadding='5' cellspacing='2'>"; | |
// Obtiener la locación(es) del inventario | |
$location = $shopify->Location->get(); | |
// Ciclo que recorre los productos paginados | |
for ($i=1; $i < $paginas+1; $i++) { | |
// Header de la sección de la tabla, agrupado por el bloque de limites | |
echo "<tr><td colspan='4'>Pagina: " . $i . " de ". $paginas ."</td></tr>"; | |
echo "<tr><td>#</td><td>ID</td><td>PRODUCTO</td><td>STOCK</td></tr>"; | |
// Establece el parametro para la página actual | |
$params["page"] = $i; | |
// Obtiene los productos dentro de la página actual | |
$products = $shopify->Product->get($params); | |
// Ciclo que recorre cada producto en la página actual y genera una nueva fila en la tabla | |
foreach ($products as $key => $producto) { | |
// Fila de producto con #, ID, nombre e imagen | |
echo "<tr><td>" . $contador . "</td><td>" . $producto['id'] . "</td><td>" . $producto['title'] . "</td><td>"; | |
/* Ciclo para variantes, indicando Stock de cada una de ellas, además del titulo | |
* $stock almacena la suma de stock de variantes | |
*/ | |
$stock = 0; | |
foreach($producto['variants'] as $keyv => $variante) { | |
// Suma stock de variantes al total | |
$stock = $variante["inventory_quantity"] + $stock; | |
// Imprime el stock de la variante actual | |
echo $variante['inventory_quantity'] . " "; | |
/* | |
* Si updateStock es == 1 actualiza el stock | |
* En este ejemplo actualiza el stock en las variantes que tengan stock de 1 y lo pone en 10 | |
* Si updateStock == 0 solo imprime el ID de la variante | |
*/ | |
if ( $variante['inventory_quantity'] == 3 && $updateStock == 1 ) { | |
/* | |
* Establece la sincronización de stock, aquí debería hacerse la conexión real | |
* al sistema de stock de la tienda fuera de shopify | |
* @array $data con los datos a proveer para actualizar el inventario de la variante | |
* available = Cantidad en stock | |
* inventory_item_id = El ID de la variante a actualizar | |
* location_id = El ID del almacen, este valor lo toma automaticamente cuando solo se tiene un almacen identificado dentro de Shopify | |
*/ | |
$data = array( | |
"inventory_item_id" => $variante['inventory_item_id'], | |
"location_id" => $location[0]['id'], | |
"available" => 10 | |
); | |
// Envia los datos de inventario | |
$shopify->InventoryLevel->set($data); | |
} else { | |
echo " | " . $variante['inventory_item_id']; | |
} | |
// Imprime el nombre de la variante | |
echo " " . $variante['title'] . "<br>"; | |
} | |
// Imprime la suma total del stock | |
echo "STOCK TOTAL: " . $stock; | |
// Cierra la fila de producto | |
echo "</td></tr>"; | |
// Aumenta el contador de productos (opcional) | |
$contador++; | |
} | |
} | |
// Cierra la tabla | |
echo "</table>"; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment