打通 Odoo 与 Shopify 电商库存同步

解决多平台电商管理痛点:通过本技能指导你利用 Odoo 和 Shopify 的 API,自动化完成产品目录、实时库存、新订单及客户数据的同步与对账。

为什么需要这个技能

许多商家在 Shopify 开店,却希望利用 Odoo 强大的 ERP 系统管理库存和销售订单。若不使用自动化工具,人工处理订单、核对库存极易出错,且无法实现实时数据更新。

本技能教 AI 如何搭建 Odoo 与 Shopify 之间的数据桥梁,实现:

  • 在 Shopify 销售时自动在 Odoo 创建销售订单。
  • 保持两地库存水位实时一致,防止超卖。
  • 自动映射 Shopify 的商品变体到 Odoo 产品模板。

适用场景

  • 卖家主要在 Shopify 前台接单,后台库存管理希望统一在 Odoo。
  • 需要将 Shopify 的进货单自动转化为 Odoo 的销售订单。
  • 需确保两个平台的产品 ID 或 SKU 能正确关联,避免数据乱码。

核心工作流

  1. 激活与设计:提及 @odoo-shopify-integration,描述你的同步需求。AI 会输出数据流向架构和字段映射方案。
  2. 构建接口:获取 Shopify Webhook 接收器代码以及调用 Odoo XMLRPC API 的代码片段。
  3. 部署验证:运行代码,配置 Shopify 回调 URL 和 Odoo 数据库凭据,确保订单状态自动确认。

技术实现示例

以下代码展示了如何从 Shopify 接收新订单并写入 Odoo:

Example 1: Push an Odoo Sale Order for a Shopify Order (Python)

import xmlrpc.client, requests

# Odoo connection
odoo_url = "https://myodoo.example.com"
db, uid, pwd = "my_db", 2, "api_key"
models = xmlrpc.client.ServerProxy(f"{odoo_url}/xmlrpc/2/object")

def create_odoo_order_from_shopify(shopify_order):
    # Find or create customer
    partner = models.execute_kw(db, uid, pwd, 'res.partner', 'search_read',
        [[['email', '=', shopify_order['customer']['email']]]],
        {'fields': ['id'], 'limit': 1}
    )
    partner_id = partner[0]['id'] if partner else models.execute_kw(
        db, uid, pwd, 'res.partner', 'create', [{
            'name': shopify_order['customer']['first_name'] + ' ' + shopify_order['customer']['last_name'],
            'email': shopify_order['customer']['email'],
        }]
    )

    # Create Sale Order
    order_id = models.execute_kw(db, uid, pwd, 'sale.order', 'create', [{
        'partner_id': partner_id,
        'client_order_ref': f"Shopify #{shopify_order['order_number']}",
        'order_line': [(0, 0, {
            'product_id': get_odoo_product_id(line['sku']),
            'product_uom_qty': line['quantity'],
            'price_unit': float(line['price']),
        }) for line in shopify_order['line_items']],
    }])
    return order_id

def get_odoo_product_id(sku):
    result = models.execute_kw(db, uid, pwd, 'product.product', 'search_read',
        [[['default_code', '=', sku]]], {'fields': ['id'], 'limit': 1})
    return result[0]['id'] if result else False

Example 2: Shopify Webhook for Real-Time Orders

from flask import Flask, request
app = Flask(__name__)

@app.route('/webhook/shopify/orders', methods=['POST'])
def shopify_order_webhook():
    shopify_order = request.json
    order_id = create_odoo_order_from_shopify(shopify_order)
    return {"odoo_order_id": order_id}, 200

最佳实践与注意事项

  • 使用 Webhook:优先使用 Shopify Webhook 推送数据,而不是轮询查询,确保实时性。
  • 以 SKU 为唯一键:使用 SKU 或内部参考编号作为两平台间的匹配关键字,不要使用不稳定的 Shopify 产品 ID。
  • 单一数据源:选定一个平台作为库存真相来源,避免双写导致数据冲突。
  • 验证签名:处理 Webhook 时必须验证 HMAC 签名,防止恶意请求注入。
  • 避免盲目同步:不要在没有主系统的情况下同时从两端同步库存,容易造成死锁。

下载和安装

下载 odoo-shopify-integration 中文版 Skill ZIP

你可能还需要

暂无推荐