Perdonar por retomar este tema.... https://www.webempresa.com/foro/packs-webempresa/enlazar-woocommerce-con-google-sheets#post-476469
Pero me he dado cuenta que al actualizar la hoja de google, no amplia la lista de pedidos, sino que queda limitada a 10 clientes...lo suyo es que la importación de datos fuera de los últimos 100 pedidos, por ejemplo.... otra cosa podría ser, que no se borrara la hoja antes de poner los datos importados y los datos se fueran añadiendo a los que ya están en la hoja...
No sé que opción puede resultar mejor para que esa cantidad no se limite y los pedidos se vayan acumulando en la hoja ?
Perdonar por abrir otro tema, pero no he conseguido escribir en el otro. A ver si podéis fusionar este tema con el anterior.
Gracias
Contenido solo visible a usuarios registrados
Hola Antonio.
El problema está en que WooCommerce sólo devuelve por defecto 10 resultados por solicitud.
Vamos a ver si podemos solucionarlo con esto:
function importarPedidos() {
var urlBase = 'https://tuweb.com/wp-json/wc/v3/orders';
var consumerKey = 'TU_CONSUMER_KEY';
var consumerSecret = 'TU_CONSUMER_SECRET';
var auth = "Basic " + Utilities.base64Encode(consumerKey + ":" + consumerSecret);
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// Si la hoja está vacía, escribimos los encabezados
if (sheet.getLastRow() === 0) {
sheet.appendRow(['ID Pedido', 'Número de Factura', 'Fecha del Pedido', 'Estado', 'Nombre del Cliente', 'Teléfono', 'Email', 'Método de Pago', 'Total', 'Nombre del Producto', 'Cantidad', 'Precio Unitario']);
}
var existingOrders = new Set(); // Para evitar duplicados
var lastRow = sheet.getLastRow();
if (lastRow > 1) {
var orderIds = sheet.getRange(2, 1, lastRow - 1, 1).getValues();
orderIds.forEach(function(row) {
existingOrders.add(row[0]); // Guardamos los IDs de pedidos existentes
});
}
var page = 1;
var perPage = 100; // WooCommerce permite hasta 100 pedidos por solicitud
var hasMoreOrders = true;
while (hasMoreOrders) {
var response = UrlFetchApp.fetch(urlBase + '?per_page=' + perPage + '&page=' + page, {
"method": "get",
"headers": { "Authorization": auth }
});
var orders = JSON.parse(response.getContentText());
if (orders.length === 0) {
hasMoreOrders = false; // Si no hay más pedidos, detenemos la paginación
break;
}
orders.forEach(function(order) {
if (!existingOrders.has(order.id)) { // Solo agregamos pedidos nuevos
var invoiceNumber = "";
if (order.meta_data) {
order.meta_data.forEach(function(meta) {
if (meta.key === "_wcpdf_invoice_number") {
invoiceNumber = meta.value;
}
});
}
order.line_items.forEach(function(item) {
sheet.appendRow([
order.id, // ID del Pedido
invoiceNumber, // Número de Factura
order.date_created, // Fecha del Pedido
order.status, // Estado
order.billing.first_name + ' ' + order.billing.last_name, // Nombre del Cliente
order.billing.phone, // Teléfono
order.billing.email, // Email
order.payment_method_title, // Método de Pago
order.total, // Total del Pedido
item.name, // Nombre del Producto
item.quantity, // Cantidad
item.price // Precio Unitario
]);
});
}
});
page++; // Pasamos a la siguiente página
}
}
Revisa si con eso se soluciona y nos comentas.
Un Saludo
Pues parece que funciona, se ha tirado un rato cuando lo he ejecutado la primera vez y ha cargado los pedidos hechos...
vamos a ver como va funcionando ahora con las actualizaciones
muchas gracias
hola Antonio.
Ok, dejo el hilo abierto por si necesitas retomarlo.
Un Saludo