Manual de usuario · Comercio electrónico
Conector Shopify para Odoo 19
De la creación de la app en Shopify a la conciliación del payout: catálogo, clientes, pedidos, inventario, entregas, reembolsos y sincronización en tiempo real, con la contabilidad cuadrada en Odoo.
1.Cómo usar este manual
Está escrito para la persona que va a operar la tienda todos los días, no para quien programa. No hace falta saber qué es una API para seguirlo.
El manual va en orden: primero se crea la app en Shopify, después se configura la instancia en Odoo y solo al final se sincroniza. Si se salta pasos, lo más probable es que se tope con un error que este documento ya previene.
| Si usted es… | Empiece por |
|---|---|
| Quien instala | Capítulos 3 a 13. Ahí está todo lo que se configura una sola vez. |
| Quien vende | Capítulos 14 a 23. El día a día: importar pedidos, entregarlos, reembolsar. |
| Quien soluciona problemas | Capítulos 25, 26 y 30. Colas, registros y los errores más comunes con su causa. |
1.1 Convenciones
- Las rutas de menú se escriben así: Shopify → Configuración → Instancias.
- Los nombres de campo van en negrita; los valores literales, en
código. - Las capturas provienen de una tienda de Shopify y de una base de Odoo reales, no de maquetas.
2.Qué hace el conector
Mantiene sincronizados el catálogo, los clientes, el inventario y los pedidos entre Shopify y Odoo, y deja la contabilidad cuadrada del lado de Odoo.
2.1 Qué viaja en cada dirección
| Información | Dirección | Cuándo |
|---|---|---|
| Productos y variantes | Shopify → Odoo Odoo → Shopify |
En ambos sentidos, según quién sea el dueño del catálogo. Lo decide usted. |
| Imágenes | Shopify → Odoo Odoo → Shopify |
Junto con el producto o por separado. |
| Existencias | Odoo → Shopify | Odoo manda. También puede leerse de Shopify una vez, para arrancar. |
| Clientes | Shopify → Odoo | Al importarlos o al llegar un pedido suyo. |
| Pedidos | Shopify → Odoo | Manualmente, por acción planificada o al instante por webhook. |
| Entregas y guías | Odoo → Shopify | Cuando se valida la entrega en Odoo. |
| Reembolsos y cancelaciones | Shopify → Odoo | Se convierten en notas de crédito y devoluciones de stock. |
| Payouts de Shopify Payments | Shopify → Odoo | Se convierten en extractos bancarios para conciliar. |
2.2 El recorrido completo de un pedido
2.3 Por qué hay colas
El conector nunca escribe directamente lo que baja de Shopify. Primero lo guarda en una cola y después lo procesa registro por registro. Esto tiene tres ventajas concretas:
- Si un pedido falla, los demás del mismo lote sí entran.
- Queda constancia de qué se descargó y qué se hizo con cada elemento.
- Se puede reintentar solo lo que falló, sin volver a descargar todo.
3.Requisitos previos
Tres cosas antes de empezar: la tienda, el Odoo y una decisión de negocio.
3.1 Del lado de Shopify
- Una tienda de Shopify activa (o una tienda de desarrollo, para pruebas).
- Una cuenta de Shopify Partners para entrar al Dev Dashboard. Es gratuita.
- Ser propietario de la tienda o tener permiso para instalar aplicaciones.
3.2 Del lado de Odoo
- Odoo 19 con los módulos Ventas, Inventario y Contabilidad instalados.
- El módulo
mrdc_shopifyinstalado. - Un plan de cuentas cargado y un diario de ventas configurado; sin eso no se pueden facturar los pedidos.
- El país de la compañía configurado, si va a dejar que el conector cree los impuestos.
3.3 La decisión de negocio: ¿quién manda en el catálogo?
Es la única decisión que el conector no puede tomar por usted, y conviene tomarla antes de sincronizar nada:
| Escenario | Cómo se trabaja |
|---|---|
| Shopify manda | El catálogo se arma en Shopify y se importa a Odoo. Es lo habitual cuando la tienda ya existía antes que el Odoo. Odoo aporta el inventario y la contabilidad. |
| Odoo manda | Los productos se crean en Odoo y se exportan a Shopify. Es lo habitual cuando ya hay un ERP con el catálogo maestro y la tienda es un canal más. |
| Mixto | Se importa una vez para partir de lo que ya existe, y a partir de ahí Odoo manda. Es lo más común en la práctica. |
4.Crear la app en Shopify
Aquí se equivoca casi todo el mundo, porque la forma de hacerlo cambió en enero de 2026 y la mayoría de tutoriales que hay en internet describen el método viejo.
4.1 El método actual: el Dev Dashboard
Las apps nuevas se crean en el Dev Dashboard de Shopify y ya no entregan un token fijo: entregan un Client ID y un Client Secret. Con ese par de credenciales el conector pide el token por su cuenta y lo renueva solo, porque esos tokens caducan cada 24 horas.
- Entre a dev.shopify.com con su cuenta de Shopify Partners.
- Pulse Create app y elija Start from Dev Dashboard.
- Póngale un nombre reconocible, por ejemplo
Conector Odoo, y pulse Create.
4.2 Configurar la versión y los permisos
Entre a la app y abra la pestaña Versions. Ahí se definen tres cosas:
| Campo | Qué poner |
|---|---|
| App URL | Puede ser cualquier dirección al principio, por ejemplo https://example.com.
El conector no la usa; Shopify solo exige que exista. |
| Webhooks API version | 2026-07. No importa demasiado cuál elija: el conector no depende del formato
del webhook, como se explica en el capítulo 24. |
| Access scopes | La lista completa del capítulo 5. Es lo único que sí hay que copiar con cuidado. |
4.3 Instalar la app en la tienda
- Vaya a Home, dentro de la app.
- Baje hasta Install app.
- Elija la tienda (o cree una de desarrollo) y pulse Install.
4.4 Copiar las credenciales
Con la app ya instalada, abra Settings dentro de la app. Ahí están el Client ID y el Secret.
5.Los permisos que hay que conceder
Shopify llama scopes a los permisos. Si falta uno, la operación que lo necesita falla con un error de acceso denegado; el resto sigue funcionando.
5.1 Permisos obligatorios
Sin estos el conector no puede trabajar:
read_products,write_products,read_orders,write_orders,
read_customers,write_customers,read_inventory,write_inventory,
read_locations,read_fulfillments,write_fulfillments,
write_merchant_managed_fulfillment_orders,
read_publications,write_publications
read_ por separado
Shopify considera que write_products ya incluye read_products. La prueba
de conexión del conector lo tiene en cuenta, así que no le va a reportar como faltantes los
permisos de lectura que ya están cubiertos por su equivalente de escritura.
5.2 Permisos opcionales
| Permiso | Para qué |
|---|---|
read_all_orders |
Leer pedidos de más de 60 días. Si va a importar histórico, es obligatorio. |
read_shopify_payments_accountsread_shopify_payments_payouts |
Payouts de Shopify Payments. Hacen falta los dos. |
read_returns · write_returns |
Devoluciones gestionadas desde Shopify. |
read_shipping |
Leer los servicios de transportista configurados en la tienda. |
read_shopify_payments_payouts, Shopify responde
ACCESS_DENIED y en el mensaje le dice que necesita read_shopify_payments.
Ese permiso ya no se puede solicitar: Shopify lo dividió en permisos más específicos y el
Dev Dashboard lo rechaza con «Contains invalid scopes». El que sí funciona es
read_shopify_payments_accounts. Es un mensaje de error que quedó desactualizado del
lado de Shopify.
5.3 La lista para copiar y pegar
read_all_orders,write_customers,write_fulfillments,write_inventory,
read_locations,write_merchant_managed_fulfillment_orders,write_orders,
write_products,write_publications,write_returns,read_shipping,
read_shopify_payments_accounts,read_shopify_payments_payouts
6.Crear la instancia en Odoo
Una instancia es una tienda de Shopify conectada. Si maneja varias tiendas, crea una instancia por cada una.
6.1 El menú del conector
Tras instalar el módulo aparece el menú Shopify, organizado en cuatro bloques:
| Menú | Contiene |
|---|---|
| Operaciones | El asistente de importar y exportar, los pedidos, los productos, las variantes y los reportes de payout. |
| Colas | Las cuatro colas: pedidos, productos, clientes y exportación de existencias. |
| Registros | Las líneas de registro y los libros de registro. |
| Configuración | Instancias, ubicaciones, flujos de trabajo, pasarelas de pago y webhooks. Solo visible para el administrador del conector. |
6.2 Alta de la instancia
Vaya a Shopify → Configuración → Instancias → Nuevo y llene los datos de conexión:
| Campo | Ejemplo | Notas |
|---|---|---|
| Nombre | Tienda Antigua Shopify | Solo para identificarla dentro de Odoo. |
| Dominio de la tienda | mi-tienda.myshopify.com |
El dominio myshopify.com, no el dominio comercial. Si pega la URL completa,
el conector la limpia solo. |
| Autenticación | Credenciales de la app | Déjelo así salvo que tenga una app antigua anterior a 2026. |
| Client ID y Client Secret | — | Los del Dev Dashboard (figura 5). |
| Secreto de webhooks | — | Opcional. Si lo deja vacío se usa el Client Secret, que es lo correcto en la mayoría de los casos. |
| Versión de la API | 2026-07 |
Viene puesta. Solo cámbiela si mrdc.tech se lo indica. |
6.3 Probar la conexión
Pulse Probar conexión. El conector hace dos cosas: pide un token con sus credenciales y consulta qué permisos le concedió la tienda.
| Resultado | Qué significa |
|---|---|
| Conectada en verde | Todo bien. Se rellenan el nombre de la tienda, su moneda y su zona horaria. |
| Aviso amarillo | Conectó, pero faltan permisos obligatorios. Los nombra uno por uno. Corrija los scopes en el Dev Dashboard y reinstale la app. |
| Error | No pudo conectar. Casi siempre es el dominio mal escrito o credenciales de otra tienda. |
7.Ubicaciones y almacenes
Es el primer paso después de conectar y el que más problemas evita más adelante.
Shopify guarda el inventario en ubicaciones; Odoo, en almacenes. El conector necesita saber qué ubicación corresponde a qué almacén para dos cosas: saber de dónde descontar el inventario que exporta y desde qué almacén entregar cada pedido.
- En la ficha de la instancia, pulse Importar ubicaciones.
- Abra la pestaña Ubicaciones.
- Para cada ubicación, elija el Almacén de Odoo que le corresponde.
- En Almacenes que suman existencias indique de qué almacenes se debe sumar el stock que se publica en esa ubicación.
8.Configuración de ventas
La pestaña Ventas controla cómo entran los pedidos y con qué valores por defecto se crean.
| Campo | Para qué sirve |
|---|---|
| Prefijo de pedidos | Se antepone al nombre del pedido de Shopify. Con SH, el pedido
#1003 se llama SH#1003 en Odoo. Sirve para distinguir de un vistazo
lo que viene de la tienda. |
| Usar la secuencia de Odoo | Si lo activa, los pedidos se numeran con la secuencia normal de Odoo y el número de Shopify queda solo como referencia. Se recomienda dejarlo desactivado: es más fácil rastrear un reclamo cuando el número coincide en ambos sistemas. |
| Importar pedidos posteriores a | Fecha de corte. Ningún pedido anterior se importa. Póngala en la fecha de arranque para no arrastrar el histórico completo. |
| Estados de pedido a importar | Filtra por estado de preparación. Con Cualquiera entran todos. Los pedidos cancelados nunca entran por esta vía: tienen su propia operación. |
| Usar la moneda de presentación | Si sus clientes pagan en su propia moneda, active esto para que Odoo registre el importe que el cliente pagó realmente y no el convertido a la moneda de la tienda. |
| Notificar al cliente | Cuando se envía la entrega a Shopify, pide que Shopify mande el correo de envío al cliente. Desactívelo si ya envía esa notificación desde Odoo, para no duplicar. |
| Almacén | Almacén por defecto de los pedidos que no traen ubicación asignada. |
| Lista de precios | Lista base de la instancia. Si un pedido llega en otra moneda, el conector busca o crea automáticamente una lista en esa moneda; véase el capítulo 28. |
| Cliente por defecto del punto de venta | Cliente que se usa cuando el pedido no trae comprador, típico de las ventas de mostrador con el POS de Shopify. |
9.Configuración de productos
Cómo decide el conector que un producto de Shopify y uno de Odoo son el mismo.
9.1 El emparejamiento
| Opción | Cómo empareja |
|---|---|
| Referencia interna | El SKU de Shopify contra la referencia interna de Odoo. Es la opción recomendada. |
| Código de barras | El código de barras de Shopify contra el de Odoo. Útil si su catálogo se maneja por EAN. |
| Referencia interna o código de barras | Prueba primero el SKU y, si no encuentra, el código de barras. |
9.2 Creación automática
| Campo | Efecto |
|---|---|
| Crear productos automáticamente | Si al importar un pedido aparece un producto que no existe en Odoo, lo crea en lugar de dejar el pedido fallido. Cómodo, pero puede llenar el catálogo de productos improvisados: actívelo solo si confía en su catálogo de Shopify. |
| Sincronizar imágenes de producto | Trae las imágenes junto con el producto. |
| Actualizar la categoría del producto | Si el producto ya existe en Odoo, le cambia la categoría según lo que diga Shopify. |
| Crear la categoría automáticamente | Crea en Odoo las categorías que no existan, tomando el nombre de la categoría o del tipo de producto de Shopify. |
| Campo de existencias | Qué cantidad de Odoo se publica: free_qty (disponible, descontando lo
reservado), qty_available (a mano) o virtual_available (previsto).
Lo habitual es free_qty, para no vender lo que ya está comprometido. |
10.Productos especiales
Un pedido de Shopify no trae solo artículos: trae envío, descuentos, propinas y a veces aranceles. Cada uno de esos conceptos necesita un producto en Odoo donde aterrizar.
| Producto | Cuándo se usa |
|---|---|
| Producto de envío | Por cada línea de envío del pedido. Si no lo configura, el cobro del envío se pierde y el total de Odoo no cuadrará con el de Shopify. |
| Producto de descuento | Para descuentos que no se pueden repartir entre las líneas. |
| Producto de propina | Cuando el cliente deja propina al pagar. |
| Producto de aranceles | En ventas internacionales con impuestos de importación. |
| Producto de ajuste de reembolso | Para las diferencias que Shopify agrega a un reembolso y no corresponden a ninguna línea. |
| Producto de tarjeta de regalo | Cuando se vende una tarjeta de regalo. |
| Servicio y producto genéricos | Comodines para líneas de pedido sin variante asociada, típicas de productos personalizados. |
11.Flujos de trabajo automáticos
Esta es la pieza que decide cuánto trabajo manual queda después de importar un pedido. Bien configurada, un pedido pagado llega a Odoo ya confirmado y facturado.
11.1 Qué es un flujo de trabajo
Un flujo es una receta de pasos que se ejecutan sobre el pedido recién importado:
11.2 Asignar el flujo según el estado de pago
No todos los pedidos merecen el mismo tratamiento: uno pagado se puede facturar, pero uno pendiente de pago no. Por eso el flujo se asigna combinando la pasarela de pago con el estado financiero del pedido.
| Estado financiero | Flujo recomendado |
|---|---|
| Pagado | Confirmar y facturar. El dinero ya entró. |
| Parcialmente pagado | Confirmar y facturar, si acepta pagos parciales. |
| Pendiente | Solo confirmar. Se factura cuando el pago se confirme. |
| Autorizado | Solo confirmar. El cargo está retenido pero no cobrado. |
| Reembolsado · Anulado | Sin flujo. Deje esas líneas sin configurar: el pedido entra en borrador para que alguien lo revise. |
11.3 Las pasarelas de pago
El conector crea la pasarela sola la primera vez que ve un pedido pagado con ella. No hay que darlas de alta a mano: haga una importación de prueba y luego configure los flujos sobre las pasarelas que aparezcan.
12.Clientes, reembolsos y payouts
Tres pestañas cortas de la instancia que definen comportamientos importantes.
12.1 Clientes
Importar el cliente como empresa hace que, cuando la dirección de Shopify trae un nombre de compañía, el contacto se cree en Odoo como empresa en lugar de como persona. Actívelo si vende mayoreo; déjelo desactivado si vende al consumidor final.
12.2 Reembolsos y devoluciones
| Campo | Efecto |
|---|---|
| Crear devolución de stock al reembolsar | Genera una devolución de mercancía por las unidades reembolsadas. Solo se devuelve lo que Shopify marcó para reingresar a inventario, no todo el pedido. |
| Validar la devolución de stock | La valida automáticamente. Desactívelo si prefiere revisar físicamente lo que regresa antes de darle entrada. |
| Ubicación de devolución | Dónde ingresa la mercancía devuelta. Útil si tiene una zona de cuarentena. |
| Registrar el pago de la nota de crédito | Marca la nota de crédito como pagada automáticamente, porque el dinero ya salió por Shopify. |
12.3 Payouts
Un payout es cada transferencia que Shopify Payments hace a su cuenta bancaria. El conector los descarga con su detalle de comisiones y los convierte en extractos bancarios. Se explica en el capítulo 23.
13.Notificaciones y sincronización
Cómo enterarse de que algo falló sin tener que estar revisando.
Con Crear actividad programada activo, cuando una cola falla tres veces el conector abre una actividad a los usuarios responsables, con el plazo que indique. Es la forma de que un problema de sincronización no pase inadvertido durante días.
14.El asistente de operaciones
Es el mando único: desde una sola pantalla se lanza cualquier importación o exportación.
Está en Shopify → Operaciones → Importar / Exportar. Elija la instancia, elija la operación y pulse Ejecutar. El formulario cambia según lo que elija: si la operación admite rango de fechas, aparecen las fechas; si trabaja sobre productos concretos, aparece el selector de productos.
| Operación | Qué hace |
|---|---|
| Importar productos | Baja el catálogo a una cola de productos. |
| Importar clientes | Baja los clientes a una cola de clientes. |
| Importar pedidos | Baja los pedidos a una cola de pedidos. |
| Importar pedidos enviados | Solo los ya preparados en Shopify. |
| Importar pedidos cancelados | Refleja en Odoo las cancelaciones hechas en Shopify. |
| Importar existencias | Trae el inventario de Shopify a Odoo. Solo para el arranque. |
| Importar ubicaciones | Actualiza la lista de ubicaciones. |
| Importar reportes de payout | Baja los payouts de Shopify Payments. |
| Exportar productos | Crea en Shopify los productos que aún no existen ahí. |
| Actualizar productos | Actualiza en Shopify los que ya existen. |
| Exportar existencias | Publica en Shopify el inventario de Odoo. |
| Actualizar el estado de envío | Manda a Shopify las entregas validadas en Odoo. |
| Publicar / Despublicar productos | Los muestra u oculta en los canales de venta. |
#1003, #1004 el conector trae exactamente esos dos e ignora las fechas. Es la forma
rápida de resolver el reclamo de «este pedido no me apareció».
15.Importar productos
Trae de Shopify los productos, sus variantes, sus atributos y sus imágenes.
15.1 Cómo ejecutarlo
- Abra el asistente y elija Importar productos.
- Deje las fechas vacías para traer todo el catálogo la primera vez.
- Pulse Ejecutar. Se abre la cola creada.
- Pulse Procesar la cola, o espere a que la acción planificada la procese sola.
15.2 Qué crea exactamente
Por cada producto de Shopify el conector mantiene tres registros en Odoo:
| Registro | Para qué |
|---|---|
| Producto de Odoo | El producto de siempre, con su categoría, precio e inventario. |
| Producto de Shopify | La capa de enlace: guarda el identificador de Shopify, el handle, las etiquetas y el estado de publicación. |
| Variante de Shopify | Una por variante: guarda el SKU, el identificador de la variante y el del artículo de inventario, que es lo que permite exportar existencias. |
15.3 Atributos y variantes
Si el producto tiene opciones en Shopify (talla, color), el conector crea en Odoo los atributos y sus valores, y deja que Odoo genere las variantes. Después empareja cada variante de Shopify con la de Odoo comparando la combinación de valores.
15.4 Catálogos grandes
Para catálogos de miles de productos, marque Usar operación masiva. En lugar de pedir los productos página por página, el conector le encarga a Shopify que prepare el catálogo completo en un archivo y lo descarga de una sola vez. Es notablemente más rápido y no consume el límite de llamadas de la tienda.
16.Exportar productos a Shopify
El camino inverso: el catálogo se arma en Odoo y se publica en la tienda.
16.1 Preparar el producto en Odoo
Antes de exportar, revise que el producto tenga:
- Referencia interna en cada variante. Es lo que viaja como SKU.
- Precio de venta.
- Peso, si va a cobrar envío calculado.
- Atributos, si es un producto con variantes.
16.2 Exportar
- Abra el asistente y elija Exportar productos.
- Deje el selector de productos vacío para exportar todos los pendientes, o elija los que quiera.
- Pulse Ejecutar.
Al terminar, la ficha de Shopify guarda el identificador del producto creado, su handle y los identificadores de cada variante. A partir de ahí, Actualizar productos modifica el producto existente en lugar de crear uno nuevo.
17.Publicar y despublicar
Un producto puede existir en Shopify sin estar a la venta. Publicarlo es lo que lo hace visible en la tienda en línea y en el punto de venta.
Desde la ficha del producto de Shopify, los botones Publicar y Despublicar actúan sobre todos los canales de venta de la tienda. También se puede hacer en lote desde el asistente, seleccionando varios productos.
| Estado | Qué significa |
|---|---|
| Publicado | Visible y comprable en los canales. |
| No publicado | Existe en Shopify pero no aparece en la tienda. Útil para preparar lanzamientos. |
| Estado del producto en Shopify, distinto de la publicación. Un borrador no se vende aunque esté publicado. |
18.Inventario
Odoo manda. La existencia que ve el comprador en la tienda sale del almacén.
18.1 Exportar existencias
Elija Exportar existencias en el asistente. El conector calcula, para cada variante y cada ubicación, la cantidad que corresponde según el campo de existencias configurado y los almacenes asociados a esa ubicación, y arma una cola.
18.2 Cantidades fijas y porcentajes
En cada variante de Shopify puede fijar un tipo de existencia fija:
| Tipo | Efecto |
|---|---|
| Cantidad fija | Publica como máximo esa cantidad, aunque en bodega haya más. Sirve para reservar inventario a otros canales. |
| Porcentaje | Publica ese porcentaje de la existencia real. Con 70, de 100 unidades publica 70. |
18.3 Importar existencias
Importar existencias trae a Odoo lo que hay en Shopify y hace un ajuste de inventario. Es para el arranque, cuando la tienda ya operaba y Odoo empieza en cero. No la programe: si la ejecuta periódicamente, pisará los movimientos de bodega.
19.Clientes
Los clientes llegan de dos formas: importados en lote o creados al vuelo cuando entra su primer pedido.
19.1 Cómo evita duplicados
Antes de crear un contacto, el conector busca en este orden:
- Un contacto ya enlazado con ese cliente de Shopify.
- Un contacto con el mismo correo electrónico.
- Un contacto con el mismo teléfono.
Solo si no encuentra nada crea uno nuevo. Las direcciones adicionales se agregan como contactos hijos de tipo dirección de entrega, comparando calle, ciudad, código postal y país para no repetir la misma dirección dos veces.
20.Pedidos
El corazón del conector. Un pedido de Shopify se convierte en un pedido de venta de Odoo con todas sus líneas, impuestos, descuentos y envío.
20.1 Qué se trae de cada pedido
| Dato de Shopify | Dónde queda en Odoo |
|---|---|
| Cliente y direcciones | Contacto, dirección de facturación y dirección de entrega. |
| Artículos y cantidades | Líneas del pedido. Se usa la cantidad vigente, ya descontado lo reembolsado. |
| Descuentos por línea | Como porcentaje de descuento en la línea, no como línea aparte. |
| Impuestos | Se buscan o se crean en Odoo según la configuración de impuestos. |
| Envío | Línea con el producto de envío configurado. |
| Propinas y aranceles | Líneas con sus productos especiales. |
| Origen de la venta | Origen, medio y campaña, tomados de los parámetros UTM. |
| Transacciones y riesgo | Pestaña Shopify del pedido. |
SH permite distinguirlos del resto de ventas.20.2 La factura
Si el flujo lo indica, la factura se crea y se valida sola, en la moneda del pedido.
20.3 Reimportar es seguro
21.Entregas y fulfillment
Cuando se despacha en Odoo, Shopify se entera: el pedido pasa a preparado y el cliente recibe su número de guía.
21.1 El flujo
- Prepare la entrega en Odoo como cualquier otra.
- Escriba el número de guía y elija el transportista.
- Valide la entrega.
- Ejecute Actualizar el estado de envío, o deje que lo haga la acción planificada.
21.2 El transportista
Para que el número de guía sea útil, el transportista de Odoo debe llevar su código de transportista en Shopify. Ese código es el que Shopify usa para armar el enlace de rastreo que ve el cliente.
21.3 Entregas parciales
Si despacha en varias entregas, cada una genera su propio fulfillment con sus artículos y su guía. Shopify irá mostrando el pedido como parcialmente preparado hasta que se complete.
22.Reembolsos y cancelaciones
Se hacen en Shopify, que es donde está el dinero, y Odoo los refleja en la contabilidad y en el inventario.
22.1 Reembolso parcial
Al reembolsar en Shopify y traerlo a Odoo, el conector:
- Crea una nota de crédito a partir de la factura original.
- Deja en ella solo las líneas y cantidades reembolsadas, no la factura completa.
- Agrega, si la hay, una línea de ajuste por las diferencias que Shopify sumó al reembolso.
- La valida y, si está configurado, la marca como pagada.
- Si el reembolso reingresa mercancía, crea la devolución de stock por esas unidades.
22.2 Cancelación
Al cancelar un pedido en Shopify e importar la cancelación, el conector distingue dos casos:
| Situación | Qué hace Odoo |
|---|---|
| Sin factura validada | Cancela las entregas pendientes, cancela la factura en borrador y cancela el pedido. |
| Con factura validada | Cancela las entregas pendientes y emite una nota de crédito. El pedido queda confirmado, porque contablemente una factura publicada no se borra: se reversa. |
23.Payouts y conciliación
Shopify no le deposita lo que vendió: le deposita lo que vendió menos sus comisiones. Aquí es donde eso cuadra.
23.1 Qué es un payout
Cada transferencia de Shopify Payments a su banco es un payout, y viene con su desglose: cargos brutos, comisiones, reembolsos y ajustes. El conector descarga cada payout con todas sus transacciones y las enlaza con los pedidos de Odoo cuando puede identificarlos.
23.2 De payout a extracto bancario
- Ejecute Importar reportes de payout.
- Abra el payout y revise sus transacciones.
- Pulse Generar extracto bancario.
- Concilie el extracto en Odoo como cualquier otro.
El extracto se crea en el diario de payouts configurado, con una línea por transacción y el importe neto de cada una. Al conciliar, los cobros cierran las facturas de los pedidos y las comisiones van a la cuenta de gastos que usted indique.
read_shopify_payments_accounts y read_shopify_payments_payouts, los dos.
24.Webhooks: sincronización en tiempo real
Con webhooks, un pedido aparece en Odoo segundos después de que el cliente pagó, sin esperar a la siguiente acción planificada.
24.1 Qué hace falta
Un webhook es un aviso que Shopify envía a su Odoo cuando algo pasa. Para que llegue, su Odoo
tiene que ser alcanzable desde internet. Antes de activarlos, configure el parámetro del sistema
web.base.url con la dirección pública de su Odoo.
localhost o en una red interna sin salida, Shopify no puede
alcanzarlo y el conector rechazará crear los webhooks con un mensaje explícito. En ese caso use
las acciones planificadas del capítulo 27.
24.2 Activarlos
En la pestaña Webhooks de la instancia hay tres interruptores. Al activar cualquiera, el conector registra en Shopify los avisos de ese grupo:
| Grupo | Avisos que registra |
|---|---|
| Webhooks de productos | Creado, actualizado y eliminado. |
| Webhooks de clientes | Creado y actualizado. |
| Webhooks de pedidos | Creado, actualizado, cancelado, preparado, parcialmente preparado y reembolso creado. |
24.3 Cómo se protege
La dirección del webhook es pública, así que el conector verifica cada aviso antes de hacerle caso:
- Comprueba la firma HMAC con el secreto de la app. Si no coincide, responde
401y descarta el aviso. - Comprueba que el dominio de la tienda del encabezado coincida con el de la instancia.
Si no, responde
404.
24.4 Qué pasa cuando llega un aviso
| Situación | Reacción |
|---|---|
| Pedido nuevo | Se crea una cola con ese pedido y se procesa enseguida. |
| Pedido que ya existe en Odoo | Se actualizan sus estados, sin duplicarlo. |
| Pedido cancelado | Se aplica el proceso de cancelación del capítulo 22. |
| Reembolso creado | Se genera la nota de crédito. |
| Producto o cliente | Entra en su cola correspondiente. |
Si por un mismo registro llegan dos avisos seguidos (Shopify manda «creado» y «actualizado» casi a la vez), el conector reutiliza la cola pendiente en lugar de crear otra. Así no se llena de colas repetidas.
25.Las colas de importación
Todo lo que baja de Shopify pasa por aquí. Saber leer una cola es saber resolver el 90 % de los problemas.
25.1 Los estados
| Estado | Significado |
|---|---|
| Borrador | Descargada, todavía sin procesar. |
| Completada | Todas las líneas se procesaron bien. |
| Unas entraron y otras fallaron. Revise las fallidas. | |
| Fallida | Ninguna línea se pudo procesar. |
25.2 Qué hacer con una cola fallida
- Ábrala y pulse Registros para ver el motivo exacto de cada fallo.
- Corrija la causa en Odoo: cree el producto que faltaba, arregle el SKU, abra el período contable.
- Pulse Reintentar las líneas fallidas.
- Pulse Procesar la cola.
Si algunas líneas no se van a poder procesar nunca, Cancelar las líneas pendientes las marca como canceladas para que la cola deje de aparecer como pendiente.
26.Registros y libros de registro
Aquí está siempre la respuesta a «¿por qué no se importó esto?».
| Columna | Para qué sirve |
|---|---|
| Tipo | Error, advertencia o información. |
| Referencia del pedido | Buscar por el número de pedido del reclamo. |
| Referencia interna | El SKU implicado, cuando el problema es de producto. |
| ID de Shopify | Identificador del registro en la tienda. |
| Discrepancia | Marca los casos en que un dato de Shopify no encontró su par en Odoo. Filtre por aquí para ver de golpe todo lo que falta emparejar. |
27.Acciones planificadas
Para que la sincronización ocurra sola.
| Acción | De fábrica | Recomendación |
|---|---|---|
| Procesar la cola de pedidos | Activa | Déjela activa. Cada 10 minutos. |
| Procesar la cola de productos | Activa | Igual. |
| Procesar la cola de clientes | Activa | Igual. |
| Procesar la cola de exportación de existencias | Activa | Igual. |
| Importar pedidos | Inactiva | Actívela cada 15–30 minutos si no usa webhooks. |
| Importar productos | Inactiva | Solo si Shopify manda el catálogo. Una vez al día basta. |
| Importar clientes | Inactiva | Rara vez necesaria: los clientes entran con sus pedidos. |
| Exportar existencias | Inactiva | Actívela cada hora. Es la que evita vender lo que no hay. |
| Actualizar el estado de envío | Inactiva | Actívela cada hora si despacha durante todo el día. |
| Importar pedidos cancelados | Inactiva | Una vez al día, si no usa webhooks. |
| Importar reportes de payout | Inactiva | Una vez al día, si concilia Shopify Payments. |
| Generar extractos de payout | Inactiva | Actívela solo si quiere el extracto sin intervención. |
28.Impuestos y monedas
Dos temas donde un descuido se convierte en contabilidad mal registrada.
28.1 Impuestos
| Tratamiento | Cómo funciona |
|---|---|
| Crear el impuesto desde Shopify | Por cada impuesto que trae el pedido, busca en Odoo uno del mismo porcentaje y tipo; si no existe, lo crea. Garantiza que el total de Odoo coincida con el de Shopify. |
| Impuesto por defecto de Odoo | Ignora los impuestos de Shopify y aplica los del producto y la posición fiscal. Elíjalo si su fiscalidad la manda Odoo. |
28.2 Monedas
Un pedido se registra en la moneda en que se vendió. Si esa moneda no es la de la lista de precios de la instancia, el conector busca una lista de precios en esa moneda y, si no existe, la crea. También activa la moneda en Odoo si estaba desactivada.
29.Usuarios y permisos
Dos perfiles: quien opera y quien configura.
| Grupo | Puede | No puede |
|---|---|---|
| Usuario | Ver instancias, productos, pedidos y colas; ejecutar importaciones y exportaciones; procesar colas; revisar registros. | Ver ni cambiar las credenciales, ni tocar flujos, webhooks o ubicaciones. |
| Administrador | Todo lo anterior más la configuración completa. | — |
Si maneja varias compañías, cada instancia pertenece a una y las reglas de registro impiden que los usuarios de una compañía vean los datos de otra.
30.Problemas frecuentes
Ordenados por lo que se ve en pantalla.
30.1 Al conectar
| Síntoma | Causa y solución |
|---|---|
| «Shopify rechazó las credenciales» | Client ID o Secret mal copiados, o la app no está instalada en esa tienda. Revise el capítulo 4 y confirme que instaló la app en la tienda correcta. |
| «El dominio de tienda no es válido» | Escribió el dominio comercial en lugar del myshopify.com. |
| Aviso de permisos faltantes | Agréguelos en el Dev Dashboard, cree una versión nueva y reinstale la app. |
| «Contains invalid scopes: read_shopify_payments» | Ese permiso ya no existe. Use read_shopify_payments_accounts. |
30.2 Al importar productos o pedidos
| Síntoma | Causa y solución |
|---|---|
| «Ningún producto de Odoo corresponde a…» | El SKU no existe en Odoo o no coincide. Cree el producto con esa referencia interna, o active Crear productos automáticamente. |
| «Ninguna variante de Odoo corresponde a…» | Las opciones de la variante cambiaron en Shopify. Revise los atributos del producto en Odoo. |
| El pedido no aparece y no hay error | Casi siempre es la fecha de Importar pedidos posteriores a, o que el pedido está cancelado y esos entran por su propia operación. Pruebe importándolo por su número. |
| El pedido entró en borrador | No hay flujo configurado para esa combinación de pasarela y estado financiero. Capítulo 11. |
| El total de Odoo no cuadra con el de Shopify | Falta el producto de envío, o el tratamiento de impuestos está en «Impuesto por defecto de Odoo» y los impuestos no coinciden. |
30.3 Al exportar
| Síntoma | Causa y solución |
|---|---|
| El inventario no cambia en Shopify | La ubicación no está mapeada a un almacén, o la variante no tiene activado el control de inventario en Shopify. |
| «No hay existencias que exportar» | Ninguna variante cumple las condiciones: exportada, con control de inventario y con artículo de inventario. Exporte primero el producto. |
| La guía no llega a Shopify | La entrega no está validada, o el pedido ya figuraba como preparado en Shopify. |
30.4 Webhooks
| Síntoma | Causa y solución |
|---|---|
| No se pueden crear | Falta el parámetro web.base.url o apunta a una dirección no pública. |
| Se registran pero no llega nada | Su Odoo no es alcanzable desde internet, o un cortafuegos bloquea a Shopify. |
| Aparecen como inactivos | Shopify los da de baja tras muchos intentos fallidos de entrega. Vuelva a activarlos con el interruptor de la instancia. |
31.Anexos
31.1 Modelos que crea el conector
| Menú | Para qué |
|---|---|
| Configuración → Instancias | La tienda conectada y toda su configuración. |
| Configuración → Ubicaciones | Ubicaciones de Shopify y su almacén. |
| Configuración → Flujos de trabajo | Recetas de automatización de pedidos. |
| Configuración → Pasarelas de pago | Formas de pago detectadas. |
| Configuración → Webhooks | Avisos registrados en Shopify. |
| Operaciones → Productos | Enlace entre el producto de Odoo y el de Shopify. |
| Operaciones → Variantes | Enlace a nivel de variante, con SKU e inventario. |
| Operaciones → Pedidos | Pedidos de venta que vienen de la tienda. |
| Operaciones → Reportes de payout | Liquidaciones de Shopify Payments. |
| Colas | Las cuatro colas de importación y exportación. |
| Registros | Líneas y libros de registro. |
31.2 Límites de Shopify que conviene conocer
| Límite | Cómo lo maneja el conector |
|---|---|
| Llamadas por segundo | Mide el saldo disponible que le reporta Shopify y se autorregula. Si aun así lo frenan, espera y reintenta. |
| Costo máximo por consulta | Los pedidos se piden de cinco en cinco. Si una tienda tiene pedidos muy grandes, el conector reduce el tamaño de página automáticamente. |
| Pedidos de más de 60 días | Requieren el permiso read_all_orders. |
| Catálogos grandes | La opción Usar operación masiva los descarga en bloque, sin consumir el límite. |
| Vigencia del token | 24 horas. Se renueva solo. |
31.3 Glosario
| Término | Significado |
|---|---|
| Instancia | Una tienda de Shopify conectada a Odoo. |
| Scope | Permiso que la tienda concede a la app. |
| Handle | Identificador del producto en la URL de la tienda. |
| Fulfillment | El registro de Shopify que dice que un pedido, o parte de él, ya se despachó. |
| Payout | Transferencia de Shopify Payments a su banco. |
| Cola | Lote de registros descargados, pendiente de procesar. |
| Webhook | Aviso que Shopify envía a Odoo cuando algo cambia. |
| Estado financiero | Cómo va el cobro del pedido: pendiente, pagado, reembolsado… |
31.4 Lista de verificación de puesta en marcha
- App creada en el Dev Dashboard con todos los permisos.
- App instalada en la tienda; Client ID y Secret copiados.
- Instancia creada en Odoo y Probar conexión en verde, sin permisos faltantes.
- Ubicaciones importadas y mapeadas a almacenes.
- Productos especiales revisados, sobre todo el de envío.
- Emparejamiento por SKU verificado: todas las variantes de Shopify tienen SKU.
- Flujos de trabajo configurados por pasarela y estado financiero.
- Importación de prueba de productos y clientes, con las colas en verde.
- Un pedido de prueba importado, facturado y entregado de punta a punta.
- Existencias exportadas y verificadas en Shopify.
- Acciones planificadas activadas, o webhooks registrados.
- Responsables de notificaciones asignados.