• Ir a navegación principal
  • Ir al contenido principal
  • Ir a la barra lateral primaria

DecodeCMS

Tu WordPress a otro Nivel ...

  • Acerca de
  • Contacto
  • Inicio
  • Tutoriales
    • Themes
    • Plugins
    • Core
    • Recursos
  • Cursos
Inicio / Tutoriales / Plugins / Actualizar el stock de productos usando la API de WooCommerce
Anuncio banner webservi

Actualizar el stock de productos usando la API de WooCommerce

Actualizar el stock de productos usando la API de WooCommerce

[ 11 junio 2020 ] [ Autor: Jhon Marreros Guzmán ][ Plugins - Avanzado] [ ]

funcionalidad librería

¿Me ayudas a llegar a más gente?

Twittear Compartir LinkedIn WhatsApp

En algunos proyectos se requiere que una tienda de WooCommerce se integre con algún otro sistema. En este artículo veremos cómo integrar WooCommerce a través de su API para que actualice el stock de productos obtenidos desde un sistema externo.

 

Generalidades

En la siguiente imagen se muestra la estructura general de lo que queremos conseguir, por el lado derecho tenemos la API externa que nos proveerá los datos de origen, estos serán interpretados por código y llevados a la parte izquierda en donde se encuentra nuestra tienda con WooCommerce.

Gráfico estructura general

 

Stock Inicial: Inicialmente tendremos algunos productos que tienen el stock y el precio desactualizado, tal como se muestra en la siguiente imagen.

Lista de productos stock inicial

 
Datos API origen: Vemos que la API extena desde la que obtendremos los datos tiene la información actualizada para estos productos.

Datos servidor externo actualizados

 
Ejecución de código: Al ejecutar el código desde la ventana de comandos veremos que el proceso se realiza correctamente.

Ejecución de código desde la línea de comandos

 
Resultado Final: Al final obtendremos el stock y el precio de los productos de la tienda actualizados.

Lista de productos con stock y precios actualizados

 

Pre requisitos

Tienes que tener en cuenta los siguientes pre requisitos:

  • Una API como origen y que devuelva la información en formato Json, la identificación de los productos es a través del SKU.
  • La API de WooCommerce como destino, Para realizar esto puedes revisar el artículo: Cómo usar la REST API de WooCommerce.
  • Un entorno en donde puedas correr PHP desde la línea de comandos
  • El administrador de dependencias Composer instalado

 

Código para actualizar el stock y precio de productos usando la API de WooCommerce

El siguiente código puedes usarlo como parte de un plugin, como código en un archivo independiente, o ejecutarlo a través de la línea de comandos, tal como vemos en este artículo.

  • Antes de ejecutar el código necesitas instalar las dependencias usando Composer.
  • Puedes descargarte el código completo desde el repositorio de GitHub: Ir al Repositorio

require __DIR__ . '/vendor/autoload.php';
use Automattic\WooCommerce\Client;

// Conexión WooCommerce API destino
// ================================
$url_API_woo = 'https://tuempresa.site/';
$ck_API_woo = 'ck_5fde0679616fe2363980edf8a2061e815682e2ff';
$cs_API_woo = 'cs_992d905e88b2a119fc8e786d181e309d0685a4c0';

$woocommerce = new Client(
    $url_API_woo,
    $ck_API_woo,
    $cs_API_woo,
    ['version' => 'wc/v3']
);
// ================================


// Conexión API origen
// ===================
$url_API="http://localhost:3000/inventory/";

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$url_API);

echo "➜ Obteniendo datos origen ... \n";
$items_origin = curl_exec($ch);
curl_close($ch);

if ( ! $items_origin ) {
    exit('❗Error en API origen');
}
// ===================


// Obtenemos datos de la API de origen
$items_origin = json_decode($items_origin, true);

// formamos el parámetro de lista de SKUs a actualizar
$param_sku ='';
foreach ($items_origin as $item){
    $param_sku .= $item['sku'] . ',';
}

echo "➜ Obteniendo los ids de los productos... \n";
// Obtenemos todos los productos de la lista de SKUs
$products = $woocommerce->get('products/?sku='. $param_sku);

// Construimos la data en base a los productos recuperados
$item_data = [];
foreach($products as $product){

    // Filtramos el array de origen por sku
    $sku = $product->sku;
    $search_item = array_filter($items_origin, function($item) use($sku) {
        return $item['sku'] == $sku;
    });
    $search_item = reset($search_item);

    // Formamos el array a actualizar
    $item_data[] = [
        'id' => $product->id,
        'regular_price' => $search_item['price'],
        'stock_quantity' => $search_item['qty'],
    ];

}

// Construimos información a actualizar en lotes
$data = [
    'update' => $item_data,
];

echo "➜ Actualización en lote ... \n";
// Actualización en lotes
$result = $woocommerce->post('products/batch', $data);

if (! $result) {
    echo("❗Error al actualizar productos \n");
} else {
    print("✔ Productos actualizados correctamente \n");
}

En el código anterior:

  • La primera parte del código establece la conexión con la API de WooCommerce que será el destino al cual actualizaremos los datos
  • Luego establecemos la conexión para la API de origen, vemos que en los datos de la API de origen tenemos el SKU del producto
  • Puesto que para realizar la ejecución de actualizaciones por lotes necesitamos el ID del producto, entonces antes necesitamos recuperar los productos en base a su SKU
  • Recorremos los productos y vamos formando el array de los datos a actualizar
  • Finalmente realizamos la actualización por lotes

Para entender el proceso por lotes de actualización puedes revisar: Batch updates Products API WooCommerce

 

Conclusión

En algunos proyectos es posible que requieras integrar WooCommerce con otro servicio externo ya sea para actualizar precios o stocks, tal como hemos visto en este artículo puedes hacer esto a través de código usando la API de WooCommerce.

 
¿Aún con dudas?, en el siguiente video se detallan los puntos anteriores.

Suscríbete a DecodeCMS:  

 

¿Me ayudas a llegar a más gente?

Twittear Compartir LinkedIn WhatsApp

Artículos Relacionados

  • Agregar datos a los  endpoints de la API de WooCommerceAgregar datos a los endpoints de la API de WooCommerce
  • REST API WoocommerceCómo usar la REST API de WooCommerce
  • REST API en WordPressCómo usar la REST API de WordPress
  • Mostrar la descripción corta del producto en la página de tienda de WooCommerceMostrar la descripción corta del producto en la página de tienda de WooCommerce
Valora este artículo : 1 barra2 barras3 barras4 barras5 barras (3 votos, promedio: 5,00 de 5)
Cargando...

Interacciones con los lectores

Comentarios

  1. Claudio Saavedra

    14 julio, 2020

    Estimado.

    Siguiendo su ejemplo no logro actualizar el SRC de la o las imagenes, como se podria hacer?
    Mi código es:

     $item_data[] = [
            'id' => $id_destino,
            'images' => [
                [
                    'src' => $ruta_imagen,
               
                ]
            ],
            'regular_price' => '6',
        ];

    Agradezco su ayuda desde ya

    • Jhon Marreros Guzmán

      14 julio, 2020

      Hola,
      ¿Te aparece algún error?, si el $id_destino y la $ruta_imagen es válido no deberías tener problemas.
      Prueba hacerlo sin batch, es decir actualiza un solo producto, puedes guiarte de: https://woocommerce.github.io/woocommerce-rest-api-docs/#update-a-product

      • Claudio Saavedra

        17 julio, 2020

        Estimado, no me aparece ningún error de hecho logro sacar dos imagenes y en biblioteca de medios quedan adjuntas al producto que corresponde, sin embargo, no las muestra en el producto y no actualiza los demás productos. Usted ha hecho actualización de imagenes de un Woo a otro Woo?

        • Claudio Saavedra

          17 julio, 2020

          Ya encontré el error, resulta que no hace la actualización cuando el producto tiene más de una imagen.
          Cuando el producto tiene una sola imagen no hay problema.

          Que podre hacer??

  2. gerber

    15 julio, 2020

    Intento instalar las dependencias en la terminal de mi macbook pro pero no me deja, me regresa esto
    MacBook-Pro-de-minombre:Update-inventory-WooCommerce-master minombre$ composer install
    -bash: composer: command not found

    • Jhon Marreros Guzmán

      16 julio, 2020

      Hola, tienes que primero instalar Composer

  3. Claudio

    28 julio, 2020

    Increíble tus publicaciones, son muy buenas y útiles, realmente te agradezco mucho. Un saludo y sigue asi porque es excelente el material

    • Jhon Marreros Guzmán

      30 julio, 2020

      Gracias Claudio 🙂

  4. CesarFe

    14 agosto, 2020

    Hola, te consulto como se generan los «Datos API origen» ? Veo que estan en la carpeta ‘data-example’ del archivo .zip que descargo, pero en el codigo de index.php el acceso a los datos origen es http://localhost:3000/inventory/ Como genero ese link en mi pc para poder acceder y verlo como tu ejemplo.
    Jhon aprovecho a decirte GRACIAS por los videos, son geniales y explicados fantasticamente.

    • Jhon Marreros Guzmán

      15 agosto, 2020

      Hola Cesar, gracias, en el ejemplo he usado https://nodejs.org/ como servidor y he instalado este paquete: https://www.npmjs.com/package/json-server , con eso tienes un servidor rápido de pruebas que te devuelve un json.

  5. Marco Castro

    17 agosto, 2020

    buen dia, excelente tutorial, consulta: cuando me da un error «woocommerce_rest_authentication_missing_parameter» a que se debe? he puesto los parametros url_API_woo, ck_API_woo y cs_API_woo de forma adecuada

    • Jhon Marreros Guzmán

      19 agosto, 2020

      Holas estas usando correctamente la librería https://packagist.org/packages/automattic/woocommerce?, revisa primero este artículo y asegúrate de que se conecte correctamente https://decodecms.com/como-usar-la-rest-api-de-woocommerce/

  6. Rama

    8 septiembre, 2020

    Hola lo intento hacer con una conexion sql como origen.

    
    $select_sentence = "SELECT IdArticulo, PrecVBru, Stock_Artic FROM productos";
    $productosSQL = mysqli_query($db, $select_sentence); 
    $productosSQLData = array();
    while($row=$productosSQL->fetch_assoc()){$productosSQLData[] = $row;}
    $param_sku ='';
    foreach ($productosSQLData as $item){$param_sku .= $item['IdArticulo'] . ',';}
    

    Hasta ahi todo bien
    var_dump($param_sku);
    Me devuelve: string(36) «PAI00033,ATL00005,PAI00030,ATL00007,»

    pero la siguente linea
    $products = $woocommerce->get(‘products/?sku=’. $param_sku);
    me devuelve Fatal error:

    Sabes a que se debe?

    Uncaught Automattic\WooCommerce\HttpClient\HttpClientException: Error: Lo siento, no puedes listar recursos. [woocommerce_rest_cannot_view] in C:\xampp\htdocs\UpWoo\vendor\automattic\woocommerce\src\WooCommerce\HttpClient\HttpClient.php:350 Stack trace: #0 C:\xampp\htdocs\UpWoo\vendor\automattic\woocommerce\src\WooCommerce\HttpClient\HttpClient.php(386): Automattic\WooCommerce\HttpClient\HttpClient->lookForErrors(Object(stdClass)) #1 C:\xampp\htdocs\UpWoo\vendor\automattic\woocommerce\src\WooCommerce\HttpClient\HttpClient.php(422): Automattic\WooCommerce\HttpClient\HttpClient->processResponse() #2 C:\xampp\htdocs\UpWoo\vendor\automattic\woocommerce\src\WooCommerce\Client.php(82): Automattic\WooCommerce\HttpClient\HttpClient->request(‘products/?sku=P…’, ‘GET’, Array, Array) #3 C:\xampp\htdocs\UpWoo\index.php(83): Automattic\WooCommerce\Client->get(‘products/?sku=P…’) #4 {main} thrown in C:\xampp\htdocs\UpWoo\vendor\automattic\woocommerce\src\WooCommerce\HttpClient\HttpClient.php on line 350

    • Jhon Marreros Guzmán

      9 septiembre, 2020

      Hola, revisa si tienes activas las urls amigables de tu sitios web, desde Ajustes > Enlaces Permanentes, ya que se requiere esto en el get de WooCommerce.

  7. Héctor Angulo

    10 septiembre, 2020

    Tengo el mismo error:
    ➜ Obteniendo datos origen … ➜ Obteniendo los ids de los productos…
    Fatal error: Uncaught Automattic\WooCommerce\HttpClient\HttpClientException: Error: Lo siento, no puedes listar recursos. [woocommerce_rest_cannot_view] in /home/customer/www/kariokids.com/public_html/conector/vendor/automattic/woocommerce/src/WooCommerce/HttpClient/HttpClient.php:350 Stack trace: #0
    Me ha dado varios problemas, en un hosting vps dreamhost no conecto la API (no abre) y no tengo acceso a la configuración. Ahora estoy probando ahora en un siteground y abrió la API, pero me sale el mismo error del amigo anterior, esto con la versión wp 5.5.1 wc 4.5.1. Ayer u hoy hubo un update de WC

    Alguna idea?

    • Jhon Marreros Guzmán

      11 septiembre, 2020

      Hola, usualmente sale porque no tienes las urls amigables configuradas, pero podría ser también alguna configuración de servidor, revisa por ejemplo: https://github.com/woocommerce/wc-api-php/issues/261

  8. vivi

    11 septiembre, 2020

    hola, tengo un caso en el que la api de origen que genera la información se encuentra en un servidor que requiere autentificarse.

    • Jhon Marreros Guzmán

      11 septiembre, 2020

      Hola, tendrías que generar entonces antes el token de autenticación y luego seguir el proceso, en la documentación de tu API debería especificarse cómo realizar esto.

  9. Amadeus

    20 septiembre, 2020

    Hola solo quiero pasar esto [{«regular_price»:»75,83″,»sku»:»codX1″,»stock_quantity»:300,»sale_price»:»81,85″}]
    desde mi data de origen y me da error.
    ➜ Obteniendo datos origen … ➜ Obteniendo los ids de los productos…
    Fatal error: Uncaught Automattic\WooCommerce\HttpClient\HttpClientException: Error: [] in C:\xampp\htdocs\ClientephpWoocomerce\vendor\automattic\woocommerce\src\WooCommerce\HttpClient\HttpClient.php:350 Stack trace: #0 C:\xampp\htdocs\ClientephpWoocomerce\vendor\automattic\woocommerce\src\WooCommerce\HttpClient\HttpClient.php(386): Automattic\WooCommerce\HttpClient\HttpClient->lookForErrors(Object(stdClass)) #1 C:\xampp\htdocs\ClientephpWoocomerce\vendor\automattic\woocommerce\src\WooCommerce\HttpClient\HttpClient.php(422): Automattic\WooCommerce\HttpClient\HttpClient->processResponse() #2 C:\xampp\htdocs\ClientephpWoocomerce\vendor\automattic\woocommerce\src\WooCommerce\Client.php(82): Automattic\WooCommerce\HttpClient\HttpClient->request(‘products/?sku=c…’, ‘GET’, Array, Array) #3 C:\xampp\htdocs\ClientephpWoocomerce\actualizarWoo.php(50): Automattic\WooCommerce\Client->get(‘products/?sku=c…’) #4 {main} thrown in C:\xampp\htdocs\ClientephpWoocomerce\vendor\automattic\woocommerce\src\WooCommerce\HttpClient\HttpClient.php on line 350
    Ya verifique las Url amigables y todo ese tema.
    cual podra ser el problema?
    gracias excelente vídeo y explicación

    • Jhon Marreros Guzmán

      22 septiembre, 2020

      Hola, hay un problema en la obtención de los IDs, posiblemente tengas problemas de acceso a la API, revisa este artículo de base, ya que primero tienes que asegurarte de que puedas al menos leer los productos.

      Saludos.

  10. Jorge Morales

    29 septiembre, 2020

    Gracias por tu post, me ha sido de muchísima ayuda!!!

    Estoy trabajando con una gran cantidad de productos, alrededor de 4000….
    Haciendo una modificación a tu código logré obtenerlos desde woocommerce haciendo uso de la paginación.

    El problema es que no puedo actualizar los productos con «batch» me da un error 500… ¿Alguna idea? y nuevamente gracias por tu explicación….

    • Jhon Marreros Guzmán

      2 octubre, 2020

      Hola, prueba actualizarlos de 100 en 100, ya que al parecer el batch no te aceptará 4000.
      Saludos.

  11. Norbey

    8 octubre, 2020

    Hola
    $products = $woocommerce->get(‘products’); cuando realizo la consulta al woocomerce solo me arroja 10 productos. esto tiene algun limite y cómo hago para que me arroje toda la información

    • Jhon Marreros Guzmán

      9 octubre, 2020

      Hola, eso es debido a la configuración de productos por página, revisa la documentación de la API de WooCommerce: https://woocommerce.github.io/woocommerce-rest-api-docs/#list-all-products

      • norbey Martinez

        9 octubre, 2020

        Estuve leyendo y esta esta opción per_page
        se la estoy enviando como parametros desde la autenticación de la siguiente forma

        true,
        ‘wp_api’ => true,
        ‘version’ => ‘wc/v1’,
        ‘per_page’ => ’60’,
        ‘page’ => ‘5’

        ]
        );

        pero no me funciona, estoy realizando algo mal?

        • Jhon Marreros Guzmán

          10 octubre, 2020

          Hola, usa la version 3 de la API, tienes más de 300 productos?, mejor prueba sólo con la primera página.

  12. Hector

    9 octubre, 2020

    He revisado cada linea de codigo y funcionan haciendo un print_r el proceso no falla y segun las sentencias actualiza pero al entrar al producto sigue la misma información active las url amigables, recorri los arrays y si me muestra los productos.

  13. norbey

    13 octubre, 2020

    Hola, tengo productos que tienen variación y otros que no, como puedo consultar todo en una sola consulta?

  14. José Rojas

    20 octubre, 2020

    Hola Jhon, mi pregunta es simple. Cómo puedo hacer esto mismo pero con otra API de Woocommerce? Me refiero a que dos Woocommerce se sincronicen en stock mediante este mismo código. También me gustaría saber cómo hacerlo con otra API que necesita autentificación. Gracias

    • Jhon Marreros Guzmán

      22 octubre, 2020

      Hola, podrías evaluar un plugin ya que tienes esta funcionalidad ya realizada, evalúa por ejemplo: https://es.wordpress.org/plugins/stock-sync-for-woocommerce/

  15. Marrero Eduardo

    30 octubre, 2020

    Hola Jhon nunca habias escuchado tu apellido es raro soy soy Marrero sin S :-), bueno queria preguntarte si me puedes dar un idea de como puede saber desde la api si hubo cambios por ejemplo: En la tabla de clientes si un usuario cambio su telefono, de que manera con un consulta api rest puedo saber que hubo un cambio en tabla para, no estar revisando regitros por restigro, para saber si hubo algun cambio, No se si me explique?

    • Jhon Marreros Guzmán

      30 octubre, 2020

      Hola, jeje, enhorabuena por los apellidos similares 🙂
      Con respecto a lo que comentas, para que no revises toda la data revisa si se guarda alguna fecha de modificación en el registro, sino tienes este dato, entonces cada vez que se haga un cambio en un cliente tendrías que guardar algún log en alguna otra tabla o como metadato, de manera que puedas consultar sólo estos que cumplen esta condición.

  16. Juan Marcano

    2 noviembre, 2020

    Buenos días Jhon; estoy haciendo una aplicación para recuperar datos de un producto y generar un pdf, ya tengo la conexión por medio de API RES, ya tengo como generar el PDF, lo que me hace falta es recuperar los datos de un producto en específico según la url con el id del producto. Un ejemplo de lo que quiero hacer esta en: https://www.clinicahernancortes.com/meditickets/brackets-de-zafiro/ que cuando le das al botón (Descargar e imprimir PDF) te genera el pdf según los datos de ese producto y el link del botón seria algo como (https://www.clinicahernancortes.com/pdf/meditickets.php?p=1840) Quisiera conversar contigo via telefónica para que me ayudaras con esto; claro! cobrando tus honorarios correspondientes. Lo que me falta del código PHP es muy poco, te pasaría el código de como esta realizado en https://www.clinicahernancortes.com/meditickets/ para adaptarlo al mío.

    Espero su respuesta,

    Saludos;

    • Jhon Marreros Guzmán

      4 noviembre, 2020

      Hola Juan,
      Escríbeme a través del formulario de contacto: https://decodecms.com/contacto/

  17. HCordero

    3 noviembre, 2020

    Logro realizar la actualizacion de productos pero cuando un producto tiene variacion no me actualiza la variacion al hacer un var_dum($result) me muestra lo siguiente: ( [update] => Array ( [0] => stdClass Object ( [id] => 185 [error] => stdClass Object ( [code] => woocommerce_rest_invalid_product_id [message] => Para manipular variaciones de producto deberías usar la variable /products///variations/ [data] => stdClass Object ( [status] => 404 ) )

    Alguna orientacion donde debo modificar para actualizar los productos con variacion?

    • Jhon Marreros Guzmán

      4 noviembre, 2020

      Hola, el propio mensaje te indica la ruta que debes usar, igual te sugiero revisar: https://woocommerce.github.io/woocommerce-rest-api-docs/#product-variations

  18. Javier

    7 noviembre, 2020

    Hola Jhon como va todo, puede ser que el codigo ya no funcione? estuve probandolo pero me sale el siguiente error:
    Fatal error: Uncaught Automattic\WooCommerce\HttpClient\HttpClientException: JSON ERROR: Syntax error in D:\portables\xampp2\htdocs\inventario\vendor\automattic\woocommerce\src\WooCommerce\HttpClient\HttpClient.php:378 Stack trace: #0 D:\portables\xampp2\htdocs\inventario\vendor\automattic\woocommerce\src\WooCommerce\HttpClient\HttpClient.php(422): Automattic\WooCommerce\HttpClient\HttpClient->processResponse() #1 D:\portables\xampp2\htdocs\inventario\vendor\automattic\woocommerce\src\WooCommerce\Client.php(82): Automattic\WooCommerce\HttpClient\HttpClient->request(‘products/?sku=R…’, ‘GET’, Array, Array) #2 D:\portables\xampp2\htdocs\inventario\index.php(49): Automattic\WooCommerce\Client->get(‘products/?sku=R…’) #3 {main} thrown in D:\portables\xampp2\htdocs\inventario\vendor\automattic\woocommerce\src\WooCommerce\HttpClient\HttpClient.php on line 378
    ➜ Obteniendo datos origen …
    ➜ Obteniendo los ids de los productos…

    • Jhon Marreros Guzmán

      7 noviembre, 2020

      Hola, revisa la siguiente discusión, ya que el error no es tan claro, hay diferente alternativas de solución que se discuten en este enlace: https://github.com/woocommerce/wc-api-php/issues/247

  19. Javier

    7 noviembre, 2020

    perfecto, aunque no me sirvio las soluciones de ese foro, esta si funciono y filtra supuestamente
    para verificar hice un print_r a la variable $products para ver que se llene con el filtro
    esto es lo que reemplace
    $products = $woocommerce->get(‘products’, [‘sku’ => $param_sku]); ahi si funciona hasta ese punto pero hice un count() para ver cuantos items devolvia el filtro, y solo son 10 el limite que tiene por defecto la api,
    y tengo 59 productos simples que por lo menos deberia mostrar esa cantidad filtrada,
    ahora aparte de filtrar solo 10 siguiente paso me da el error que te muestro:
    Notice: Trying to access array offset on value of type bool in D:\portables\xampp2\htdocs\inventario\index.php on line 69
    Notice: Trying to access array offset on value of type bool in D:\portables\xampp2\htdocs\inventario\index.php on line 70
    se repite 7 veces, corresponde a las lineas
    ‘regular_price’ => $search_item[‘price’], //linea 69
    ‘stock_quantity’ => $search_item[‘qty’], //linea 70
    y sigue hasta el final mostrando el mensaje de actualizado correctamente pero no actualizo nada

  20. Estuardo

    14 noviembre, 2020

    Muy bien explicado! Excelente Tutorial 💪, solo con una pregunta, no tendrás algun ejemplo de como subir los productos con variaciones? He leído e intentado siguiendo la documentación de woocommerce pero no lo he logrado :/

    • Jhon Marreros Guzmán

      16 noviembre, 2020

      Hola, tomo nota de esto, ya que no lo he probado con variaciones, posiblemente actualice o haga un artículo sobre esto proximamente. Saludos.

  21. Marco Gonzalez

    15 noviembre, 2020

    Primero que nada muchas gracias por tus aportes, tengo un problema quiero hacer lo mismo que haces con una Api Rest de un Proveedor mio, pero el tema es que me sale el siguiente error:

    Notice: Trying to access array offset on value of type int in C:\Users\Sescom\Desktop\Update-inventory-WooCommerce-master\Update-inventory-WooCommerce-master\index.php on line 56

    Linea 56: $param_sku .= $item[‘modelo’] . ‘,’;

    asi viene el ‘sku’ en la Api de mi proveedor, pero me parece que esta en un segundo nivel como lo siguiente:

    {«cantidad»:6281,»pagina»:1,»paginas»:105,»productos»:[{«producto_id»:»20451″,»modelo»:»KDP-601A1M\/MS2D»,»total_existencia»:198,…………………..

    Espero me puedas ayudar, te lo agradeceria mucho

    • Jhon Marreros Guzmán

      16 noviembre, 2020

      Hola, utiliza $items_origin[‘productos’], ya que te interesa acceder a los productos.

      • Marco Gonzalez

        18 noviembre, 2020

        Ahora me sale este error:

        PHP Notice: Array to string conversion in C:\Users\Sescom\Desktop\Update-inventory-WooCommerce-master\Update-inventory-WooCommerce-master\index.php on line 55

        Se que el tiempo es valioso, me gustaría saber si me podrías vender una asesoría ya sea vía teamviewer o anidesk, para poder resolver este tema y poder utilizar esta Api Rest, te agradezco tu atención, saludos

  22. Juan

    16 noviembre, 2020

    hola jhon estoy implementando este metodo y creo que tengo problemas con https ya que estoy haciendo pruebas en desarrollo con http y me da este mensaje que debo hacer para poder hacer la actualizacion de productos con http?

    este es el mensaje de error :
    Fatal error: Uncaught Automattic\WooCommerce\HttpClient\HttpClientException: Error: Missing OAuth parameter oauth_consumer_key [woocommerce_rest_authentication_missing_parameter] in /Applications/MAMP/htdocs/wordpress/wp-content/plugins/api/vendor/automattic/woocommerce/src/WooCommerce/HttpClient/HttpClient.php:350

    • Jhon Marreros Guzmán

      16 noviembre, 2020

      Hola, revisa la siguiente discusión, prueba poniendo el parámetro ‘verify_ssl’ => false , en la definición del objeto Client. https://github.com/woocommerce/wc-api-php/issues/22

      • Juan

        20 noviembre, 2020

        hola jhon gracias aunque no queria tomarme esa opcion de ‘verify_ssl’ => false igual me daba error tuve que montar un server de wordpress con https y ahi si pude , probe y todo bien , lo malo es que ahora me sale error ya que necesito actualizar una gran cantidad de productos, ya lei en el foro que debo darle paginacion para poder actualizar de 100 en 100 pero igual me da error , sabes de algun sitio en el que pueda buscar informacion sobre como hacerlo con una gran cantidad de productos? ya que trato de paginar y no logro

  23. Valentina

    26 noviembre, 2020

    Hola Jhon, una consulta, este metodo seria para correrlo manualmente y local, no? Se puede automatizar en el servidor de WP directamente?
    Muchas gracias!

    • Jhon Marreros Guzmán

      27 noviembre, 2020

      Hola, si, sería similar en un servidor, si quieres integrarlo con WordPress, sería construir un plugin, en el servidor puedes programar un cron igualmente para que sea cada X tiempo.

  24. Darlin Sanchez

    4 diciembre, 2020

    Hola buen día Estimado, Gracias por el tutorial, quería saber si es posible obtener los datos de un arreglo y no de un json en ejecución. gracias de antemano

    Saludos,

    • Jhon Marreros Guzmán

      5 diciembre, 2020

      Hola, si, claro, si ya tienes los datos en un arreglo sería mucho más práctico ya que llenarías directamente la variable $items_origin a la que hago referencia.

  25. Christian

    5 enero, 2021

    Buenas, tengo un problema, me finaliza el proceso pero no se actualizan los datos en mi pagina, sabrias cual podria ser mi error con respecto a eso?

    • Jhon Marreros Guzmán

      6 enero, 2021

      Hola, difícil saberlo, ve depurando con el error_log, prueba igualmente en otro sitio de ejemplo y verifica si te sucede lo mismo.

  26. Matías Ochoa

    1 febrero, 2021

    Muy buena explicación, Jhon.
    Tengo una duda. Tengo un cliente con una tienda online que trabaja con un gran proveedor. Este proveedor nos envía un excel de carga de productos. Y nos comenta que debemos enlazar su API una vez al día para actualizar los precios de productos.

    ¿Cómo debo hacerlo?
    —
    Ellos me dan la siguiente indicación, pero no entiendo cómo proceder.

    -Añadir cabecera Authorization con tu token
    -Endpoint: https://api.horturc.es/products/download-woocommerce-csv
    -Método: GET
    -Parámetros en query (en este caso, al ser get, los parámetros van en la query):
    -URL final: https://api.horturc.es/products/download-woocommerce-csv?type=complete&file=products&category=8
    —
    Muchas gracias.
    Saludos.

    • Jhon Marreros Guzmán

      2 febrero, 2021

      Hola, primero valida los datos que te dan, puedes usar alguna aplicación como Postman para esto, tienes que tener el token de autenticación posiblemente para pasarlo en la cabecera de la petición. Una vez que pruebes con Postman entonces podrás implementarlo más fácilmente en PHP.

Para escribir código envolver con: <pre class="language-xxx"><code> </code></pre> ,reemplaza las xxx (php, css, html)

*

* Gravatar habilitado

Barra lateral primaria

Presentación

Únete a DecodeCMS

Recibirás como regalo:

Guia práctica con video:
Los 5 posibles errores que estas cometiendo cuando trabajas con código en WordPress

Niveles

Básico Intermedio Avanzado

Etiquetas

accesibilidad css dashboard editor error funcionalidad herramientas imagen js librería mejoras optimización seguridad social

Populares

Eliminar Opciones de Pantalla en WordPress

Enviar datos desde PHP a Javascript en WordPress

Crear usuario Administrador de WordPress desde la Base de Datos

Generador de plugins base para WordPress

Recientes

  • Exportar / importar la configuración del personalizador de temas en WordPress
  • Personalizar página de gracias de WooCommerce
  • Configura el tema Twenty Twenty One WordPress
  • Abrir enlaces externos en un nuevo tab automáticamente
alojamiento wordpress

© logo decode pie Copyright 2021 | Todos los derechos reservados | Política de Privacidad