
关于
通过 WooCommerce REST API 和 Odoo 外部 API 同步 Odoo 与 WooCommerce 的产品、库存、订单和客户数据。
name: odoo-woocommerce-bridge description: "同步 Odoo 与 WooCommerce:通过 WooCommerce REST API 和 Odoo 外部 API 同步产品、库存、订单和客户。" risk: unknown source: community
Odoo ↔ WooCommerce 桥接
概述
本技能指导你构建 Odoo(后台 ERP)和 WooCommerce(WordPress 在线商店)之间的可靠同步桥接。涵盖产品目录同步、实时库存更新、订单导入和客户记录管理。
何时使用本技能
- 使用 WooCommerce 商店配合 Odoo 进行库存和履约管理。
- 自动将 WooCommerce 订单拉入 Odoo 作为销售订单。
- 保持 WooCommerce 产品库存与 Odoo 仓库同步。
- 将 WooCommerce 订单状态映射到 Odoo 交付状态。
工作原理
- 激活:提及
@odoo-woocommerce-bridge并描述你的同步需求。 - 设计:获取 WooCommerce 和 Odoo 对象之间的字段映射表。
- 构建:接收使用 WooCommerce REST API 的 Python 集成脚本。
字段映射:WooCommerce → Odoo
| WooCommerce | Odoo |
|---|---|
| products | product.template + product.product |
| orders | sale.order + sale.order.line |
| customers | res.partner |
| stock_quantity | stock.quant |
| sku | product.product.default_code |
| order status: processing | 销售订单:sale(已确认) |
| order status: completed | 交付:done |
示例
示例 1:将 WooCommerce 订单拉入 Odoo(Python)
from woocommerce import API
import xmlrpc.client
import os
# WooCommerce 客户端
wcapi = API(
url=os.getenv("WC_URL", "https://mystore.com"),
consumer_key=os.getenv("WC_KEY"),
consumer_secret=os.getenv("WC_SECRET"),
version="wc/v3"
)
# Odoo 客户端
odoo_url = os.getenv("ODOO_URL", "https://myodoo.example.com")
db = os.getenv("ODOO_DB", "my_db")
uid = int(os.getenv("ODOO_UID", "2"))
pwd = os.getenv("ODOO_PASSWORD")
models = xmlrpc.client.ServerProxy(f"{odoo_url}/xmlrpc/2/object")
def sync_orders():
# 获取未处理的 WooCommerce 订单
orders = wcapi.get("orders", params={"status": "processing", "per_page": 50}).json()
for wc_order in orders:
# 查找或创建 Odoo 合作伙伴
email = wc_order['billing']['email']
partner = models.execute_kw(db, uid, pwd, 'res.partner', 'search',
[[['email', '=', email]]])
if not partner:
partner_id = models.execute_kw(db, uid, pwd, 'res.partner', 'create', [{
'name': f"{wc_order['billing']['first_name']} {wc_order['billing']['last_name']}",
'email': email,
'phone': wc_order['billing']['phone'],
'street': wc_order['billing']['address_1'],
'city': wc_order['billing']['city'],
}])
else:
partner_id = partner[0]
# 在 Odoo 中创建销售订单
order_lines = []
for item in wc_order['line_items']:
product = models.execute_kw(db, uid, pwd, 'product.product', 'search',
[[['default_code', '=', item['sku']]]])
if product:
order_lines.append((0, 0, {
'product_id': product[0],
'product_uom_qty': item['quantity'],
'price_unit': float(item['price']),
}))
models.execute_kw(db, uid, pwd, 'sale.order', 'create', [{
'partner_id': partner_id,
'client_order_ref': f"WC-{wc_order['number']}",
'order_line': order_lines,
}])
# 将 WooCommerce 订单标记为暂停(已由 Odoo 处理)
wcapi.put(f"orders/{wc_order['id']}", {"status": "on-hold"})
示例 2:将 Odoo 库存推送到 WooCommerce
def sync_inventory_to_woocommerce():
# 从 Odoo 获取所有有 SKU 的产品
products = models.execute_kw(db, uid, pwd, 'product.product', 'search_read',
[[['default_code', '!=', False], ['type', '=', 'product']]],
{'fields': ['default_code', 'qty_available']}
)
for product in products:
sku = product['default_code']
qty = int(product['qty_available'])
# 通过 SKU 更新 WooCommerce
wc_products = wcapi.get("products", params={"sku": sku}).json()
if wc_products:
wcapi.put(f"products/{wc_products[0]['id']}", {
"stock_quantity": qty,
"manage_stock": True,
})
最佳实践
- ✅ 要做: 使用 SKU 作为连接 WooCommerce 产品和 Odoo 产品的唯一标识符。
- ✅ 要做: 按计划运行库存同步(每 15-30 分钟)而非实时,以避免速率限制。
- ✅ 要做: 将所有 API 调用和错误记录到数据库表中以便调试。
- ❌ 不要: 重复处理同一个 WooCommerce 订单——导入后立即标记为已处理。
- ❌ 不要: 将草稿或已取消的 WooCommerce 订单同步到 Odoo——按
status = processing筛选。
兼容工具
Claude CodeCursor
标签
电商
