Publicado el Dejar un comentario

Actualizar Woocommerce directo desde MyBusinessPOS con IA

Este ejemplo incorpora lo que se sabe sobre la estructura de la base de datos de MyBusiness POS (por ejemplo la tabla prods que contiene los artículos y precios) y cómo hacer consultas SQL desde VBScript en el entorno del propio sistema (porque esta tabla y otras son conocidas dentro de la comunidad técnica de helpmybusinesspos.info)

' ==========================================
' Script VBScript para MyBusiness POS v20
' Actualiza precio de producto en WooCommerce
' ==========================================

Sub ActualizarPrecioWoo()

    On Error Resume Next

    Dim rst, sSQL
    Dim sku, nuevoPrecio
    Dim httpReq, url
    Dim consumerKey, consumerSecret
    Dim jsonBody

    ' ----------------------------------------------------
    ' 1) Pedir al usuario el SKU a actualizar
    ' ----------------------------------------------------
    sku = InputBox("Ingrese el SKU del producto a actualizar en WooCommerce:", "Actualizar Precio Woo")

    If Trim(sku) = "" Then
        MsgBox "No se ingresó ningún SKU.", vbExclamation, "Aviso"
        Exit Sub
    End If

    ' ----------------------------------------------------
    ' 2) Consultar precio desde MyBusiness POS v20 (tabla prods)
    ' ----------------------------------------------------
    sSQL = "SELECT precio1 FROM prods WHERE articulo = '" & Replace(sku, "'", "''") & "'"

    Set rst = CreateObject("ADODB.Recordset")
    rst.Open sSQL, Ambiente.Connection, 1, 1

    If rst.EOF Then
        MsgBox "Producto no encontrado en MyBusiness POS.", vbCritical, "Error"
        rst.Close
        Set rst = Nothing
        Exit Sub
    End If

    nuevoPrecio = rst("precio1")

    rst.Close
    Set rst = Nothing

    ' ----------------------------------------------------
    ' 3) Preparar API de WooCommerce
    ' ----------------------------------------------------
    consumerKey = "ck_tu_consumer_key"
    consumerSecret = "cs_tu_consumer_secret"

    ' Construir data JSON para actualizar el precio
    jsonBody = "{""regular_price"": """ & CStr(nuevoPrecio) & """}"

    ' Formar URL para actualizar por SKU
    url = "https://tu-tienda.com/wp-json/wc/v3/products?sku=" & sku & _
          "&consumer_key=" & consumerKey & "&consumer_secret=" & consumerSecret

    ' ----------------------------------------------------
    ' 4) Primero buscar el producto por SKU (GET)
    ' ----------------------------------------------------
    Set httpReq = CreateObject("MSXML2.ServerXMLHTTP")

    httpReq.Open "GET", url, False
    httpReq.setRequestHeader "Content-Type", "application/json"
    httpReq.Send

    If httpReq.Status <> 200 Then
        MsgBox "Error al buscar producto en WooCommerce: " & httpReq.Status & " " & httpReq.statusText, vbCritical
        Set httpReq = Nothing
        Exit Sub
    End If

    ' ----------------------------------------------------
    ' 5) Extraer ID de producto de la respuesta
    '    (Se espera que la respuesta sea un array JSON con al menos un producto)
    ' ----------------------------------------------------
    Dim responseText, productId
    responseText = httpReq.responseText

    ' Aquí se asume que el primer objeto JSON tiene un id
    ' Se extrae usando métodos VBScript básicos (parser simple)
    productId = ""
    Dim startPos, endPos
    startPos = InStr(responseText, """id"":")
    If startPos > 0 Then
        endPos = InStr(startPos, responseText, ",")
        productId = Mid(responseText, startPos + 5, endPos - (startPos + 5))
    End If

    If productId = "" Then
        MsgBox "No se encontró ID de producto para SKU " & sku, vbCritical, "Error"
        Set httpReq = Nothing
        Exit Sub
    End If

    ' ----------------------------------------------------
    ' 6) Actualizar precio en WooCommerce
    ' ----------------------------------------------------
    Dim updateUrl
    updateUrl = "https://tu-tienda.com/wp-json/wc/v3/products/" & productId & _
                "?consumer_key=" & consumerKey & "&consumer_secret=" & consumerSecret

    httpReq.Open "PUT", updateUrl, False
    httpReq.setRequestHeader "Content-Type", "application/json"
    httpReq.Send jsonBody

    If httpReq.Status = 200 Or httpReq.Status = 201 Then
        MsgBox "Precio actualizado para SKU " & sku & " a $" & nuevoPrecio, vbInformation, "OK"
    Else
        MsgBox "Error al actualizar precio: " & httpReq.Status & " " & httpReq.statusText, vbCritical, "Error"
    End If

    Set httpReq = Nothing
    On Error GoTo 0

End Sub

¿Cómo funciona este script?

  1. Solicita el SKU al usuario (para identificar el producto).
  2. Consulta el precio actual desde la tabla prods de MyBusiness POS usando Ambiente.Connection.
  3. Hace una petición GET a la API REST de WooCommerce para buscar el producto por SKU (esto devuelve datos en JSON).
  4. Extrae el ID del producto de la respuesta.
  5. Hace una petición PUT para actualizar el precio usando MSXML2.ServerXMLHTTP.
  6. Muestra un mensaje indicando si la actualización fue exitosa o si ocurrió un error.

Requisitos para que este script funcione

✔ WooCommerce con API REST habilitada y llaves de acceso (consumer_key, consumer_secret).
✔ MyBusiness POS v20 con acceso a la base de datos y tabla prods.
✔ Permiso para ejecutar VBScript dentro del sistema (como procedimiento, evento o botón).
✔ La tienda WooCommerce debe permitir peticiones HTTPS a su API desde la red donde se ejecuta MyBusiness.


Consideraciones importantes

🔹 VBScript no tiene un parser JSON nativo, por lo que la extracción del ID es muy básica. Para JSON más complejo necesitarás librerías adicionales o manejar el texto cuidadosamente.
🔹 En producción es ideal no pasar keys directamente en la URL y usar HTTPS con autenticación más segura.
🔹 Asegúrate de que el SKU en WooCommerce realmente coincide con el campo articulo de MyBusiness.

Publicado el Dejar un comentario

Consultando productos con MybusinesPOS y woocommerce

Ejemplo completo para integrar WooCommerce y MyBusiness POS v20, usando prácticas comunes de sincronización (productos, precios e inventario)


🛒 Integración WooCommerce + MyBusiness POS v20: Ejemplo Práctico

Conectar tu tienda en línea en WooCommerce con tu sistema de MyBusiness POS v20 permite que:

  • Los productos y precios se sincronicen automáticamente.
  • El inventario se mantenga actualizado en ambos sistemas.
  • Las ventas en línea y físicas compartan el mismo catálogo y stock.

A continuación te muestro un ejemplo técnico completo de cómo podrías implementar una sincronización básica de productos y precios entre WooCommerce y MyBusiness POS.


📌 Antes de Empezar

Este ejemplo asume que:

✔ Tu WooCommerce está activo y accesible con la REST API de WooCommerce.
✔ MyBusiness POS v20 está instalado y ejecutándose en tu red local.
✔ Los productos en POS tienen un campo adicional (por ejemplo wc_id) que almacena el ID de producto de WooCommerce.
✔ Los productos se identifican por SKU (código de producto) para que coincidan entre WooCommerce y POS.


🔧 ¿Qué vamos a lograr?

Queremos que un script externo (por ejemplo, en Python o Node.js) haga lo siguiente:

  1. Leer productos de MyBusiness POS.
  2. Comparar con WooCommerce usando SKU.
  3. Actualizar o crear productos en WooCommerce con esos datos.
  4. Asegurar que los precios y existencias queden sincronizados.

Este patrón es común cuando no hay un plugin oficial listo para MyBusiness POS + WooCommerce.(helpmybusinesspos.info)


💻 Ejemplo de Script de Sincronización (Python)

Este es un ejemplo básico que:

  • Conecta a la base de datos SQL de MyBusiness POS.
  • Conecta a WooCommerce vía REST API.
  • Sincroniza productos, precios e inventario.

Ajusta los parámetros de conexión a tu servidor SQL Server y WooCommerce.

# Instalar dependencias:
# pip install pyodbc woocommerce

import pyodbc
from woocommerce import API

# Configuración de WooCommerce API
wcapi = API(
    url="https://tu-tienda.com",
    consumer_key="ck_CONSUMER_KEY",
    consumer_secret="cs_CONSUMER_SECRET",
    version="wc/v3"
)

# Conexión a SQL Server donde está MyBusiness POS
conn = pyodbc.connect(
    "Driver={SQL Server};"
    "Server=TU_SERVIDOR_SQL;"
    "Database=MyBusiness20;"
    "Trusted_Connection=yes;"
)

cursor = conn.cursor()

# Consultar productos desde MyBusiness POS
cursor.execute("SELECT articulo, descripcion, precio1, existencia FROM prods")

for row in cursor.fetchall():
    sku = row.articulo
    name = row.descripcion
    price = float(row.precio1)
    stock = int(row.existencia)

    # Construir el payload para WooCommerce
    data = {
        "product": {
            "sku": sku,
            "name": name,
            "regular_price": str(price),
            "stock_quantity": stock
        }
    }

    # Intentar actualizar el producto por SKU en WooCommerce
    r = wcapi.get("products?sku=" + sku).json()

    if len(r) > 0:
        # Si existe, actualizamos con el ID
        product_id = r[0]['id']
        wcapi.put(f"products/{product_id}", data)
        print(f"Actualizado: {sku}")
    else:
        # Si no existe, crear uno nuevo
        wcapi.post("products", data)
        print(f"Creado: {sku}")

conn.close()

📊 ¿Cómo funciona esto?

🧠 1. Conexión a WooCommerce

Usamos la REST API de WooCommerce para crear o actualizar productos desde código.
Esto te permite sincronizar precios, stock e información general del producto con tu tienda en línea.(5205495.fs1.hubspotusercontent-na1.net)

🗄 2. Conexión a MyBusiness POS

El script se conecta directamente a la base de datos de MyBusiness POS, que normalmente se ejecuta en SQL Server. Extrae productos y datos relevantes (como articulo, precio1 y existencia).(My Business POS SIL)

🔄 3. Comparación con WooCommerce

Para cada producto en POS:

  • Se busca por SKU en WooCommerce.
  • Si existe, se actualiza.
  • Si no existe, se crea.

De esta forma se garantiza que ambos sistemas mantengan los mismos productos y precios.


🚀 Próximos pasos y mejoras

Este ejemplo es una base funcional, pero en un entorno productivo te puede interesar:

✅ Sincronizar imágenes de producto.
✅ Sincronizar categorías y atributos.
✅ Ejecutar la sincronización de forma automática (cron).
✅ Manejo de errores y logs detallados.
✅ Sincronizar también órdenes de WooCommerce hacia POS (ventas web a tienda física).(helpmybusinesspos.info)


Prompt para consultar en la IA


Quiero que generes un script completo en Python para sincronizar productos entre WooCommerce y MyBusiness POS v20.

Primero realiza una **búsqueda profunda en helpmybusinesspos.info** y en toda la documentación disponible de MyBusiness POS para identificar:

1. La estructura de la base de datos SQL, especialmente las tablas y campos relacionados con productos (como prods, articulos, precios, existencias).
2. Los campos más comunes utilizados en MyBusiness POS para SKU, nombre, precio y stock.
3. Buenas prácticas al consultar esa base de datos desde aplicaciones externas.

Luego genera el script con las siguientes características:

- Conectarse a la base de datos SQL Server donde está MyBusiness POS.
- Leer los productos desde la tabla principal (por ejemplo prods) tomando por lo menos:
    - articulo (como SKU),
    - descripcion (como nombre),
    - precio1 (como precio regular),
    - existencia (como stock).
- Conectarse a la REST API de WooCommerce usando la versión wc/v3 y las credenciales del usuario (consumer_key y consumer_secret).
- Buscar cada producto por SKU en WooCommerce.
- Si existe, actualizar su precio y stock.
- Si no existe, crearlo.
- Mostrar en consola qué productos fueron creados y cuáles actualizados.

Requisitos técnicos del script:

- Usar pyodbc para SQL Server.
- Usar la librería oficial `woocommerce` para la API.
- Incluir instrucciones para instalar dependencias (pip install).
- Incluir comentarios explicando cada sección del código.
- No dejar valores reales de conexión; usar placeholders como:
    - TU_SERVIDOR_SQL
    - TU_BASE_DE_DATOS
    - TU_USUARIO_SQL
    - TU_PASSWORD_SQL
    - TU_URL_WOOCOMMERCE
    - ck_xxxxxxxxx
    - cs_xxxxxxxxx
- Agregar manejo básico de excepciones con try/except.
- Cerrar correctamente la conexión a la base de datos al finalizar.

El resultado debe ser un script Python completo, listo para producción básica, bien comentado y claro para desarrolladores que integran WooCommerce con MyBusiness POS, con la estructura de tablas y campos verificada en la documentación de helpmybusinesspos.info.

Se requiere lo siguiente:

MyBusiness POS v20 instalado y funcionando
Acceso al servidor SQL Server donde está la base de datos
Nombre de la base de datos de MyBusiness
Usuario y contraseña con permisos de lectura (mínimo SELECT)
Conocer las tablas reales como prods, existenciaalmacen u otras según documentación actual
Identificar correctamente los campos como articulo (SKU), precio, imagen y existencias
WooCommerce instalado y funcionando en WordPress
Llaves API de WooCommerce (consumer_key y consumer_secret)
Python 3.9 o superior instalado
Librerías de Python instaladas: pyodbc, requests y json
Conexión a internet para comunicarse con la API de WooCommerce
Permisos adecuados en MyBusiness para consulta de inventarios y precios

Además, se requiere realizar una búsqueda profunda en helpmybusinesspos.info para confirmar nombres de tablas, estructura de datos, relaciones y posibles cambios en MyBusiness POS v20 antes de implementar el código.

Publicado el Dejar un comentario

Sincronizar el POS y WooCommerce con Python

Este es un ejemplo de cómo sincronizar una base de datos local con woocommerce:

Subida: productos, precios, estatus de pedidos

Bajada: Pedidos

import pyodbc
from woocommerce import API

# --- CONFIGURACIÓN DE CONEXIÓN ---
wcapi = API(
    url="https://tu-tienda.com",
    consumer_key="ck_xxxx",
    consumer_secret="cs_xxxx",
    version="wc/v3",
    timeout=120
)

# Conexión a SQL Server 2012
conn_str = "Driver={SQL Server};Server=localhost\MYBUSINESSPOS;Database=v8_demo;Trusted_Connection=yes;"

def ejecutar_sincronizacion_batch():
    try:
        db = pyodbc.connect(conn_str)
        cursor = db.cursor()

        # --- 1. ACTUALIZAR STOCK (PRODS -> WEB) ---
        # Solo productos vinculados (wc_id no nulo)
        cursor.execute("SELECT wc_id, existencia, articulo FROM prods WHERE wc_id IS NOT NULL")
        productos = cursor.fetchall()

        if productos:
            for i in range(0, len(productos), 100):
                lote = productos[i:i+100]
                # Formato Batch para WooCommerce
                items_stock = [
                    {
                        "id": p.wc_id,
                        "manage_stock": True,
                        "stock_quantity": int(p.existencia) if p.existencia >= 0 else 0
                    } for p in lote
                ]
               
                payload = {"update": items_stock}
                wcapi.post("products/batch", payload)
                print(f"Inventario: Procesados {len(lote)} artículos.")

        # --- 2. ACTUALIZAR ESTATUS (PEDIDOS CO -> COMPLETED) ---
        # Buscamos ventas que ya pasaron de PE a CO
        cursor.execute("SELECT wc_order_id, Venta FROM pedidos WHERE wc_order_id IS NOT NULL AND estatus = 'CO'")
        ventas_finalizadas = cursor.fetchall()

        if ventas_finalizadas:
            for i in range(0, len(ventas_finalizadas), 100):
                lote_v = ventas_finalizadas[i:i+100]
                batch_orders = {
                    "update": [{"id": v.wc_order_id, "status": "completed"} for v in lote_v]
                }
               
                wcapi.post("orders/batch", batch_orders)
               
                # Opcional: Limpiar wc_order_id o marcar como sincronizado en SQL
                # para evitar procesarlos en la siguiente vuelta
                for v in lote_v:
                    cursor.execute("UPDATE pedidos SET wc_order_id = NULL WHERE Venta = ?", (v.Venta,))
               
            db.commit()
            print(f"Estatus: {len(ventas_finalizadas)} órdenes marcadas como completadas.")

    except Exception as e:
        print(f"Error en sincronización: {e}")
    finally:
        if 'db' in locals(): db.close()

if __name__ == "__main__":
    ejecutar_sincronizacion_batch()
Continúa leyendo Sincronizar el POS y WooCommerce con Python