You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python通过API向Shopware 6导入商品数据

字段是否满足Shopware 6导入要求说明

你现有的8个字段已经覆盖了商品导入的核心业务字段,但还需要补充3个系统必填的配置项才能完成正常导入:

  • 税率ID:Shopware 6要求所有商品绑定提前在后台配置好的税率规则,导入时需要传入对应税率的唯一ID
  • 库存数值:实物类商品默认需要填写库存数量,如果你开启了「无限库存」规则可跳过该项
  • 商品启用状态:需明确传入商品是否在前端展示,未传的话系统默认会将商品设为禁用状态

现有字段和Shopware 6商品字段的对应关系如下,可直接映射使用:

  • SKU → productNumber(全局唯一,可作为后续更新商品的唯一标识)
  • 商品名称 → name
  • 售价 → price数组中的原价字段
  • 优惠后价格 → price数组中的促销价字段,如有时间限制可同步传入促销生效/失效时间
  • 商品描述 → description
  • 生产商 → manufacturerId,可提前在后台创建生产商后拿到对应ID,也可在导入商品时同步创建生产商
  • EAN码 → ean
  • 商品图片 → 需先上传到Shopware媒体库,再将媒体ID关联到商品的media字段中
Python调用API实现商品导入操作

前置准备

先在Shopware 6后台获取API权限:进入「设置>系统>集成」,新建一个集成,开启商品和媒体的写入权限,保存后拿到对应的API域名、Client ID、Client Secret。

依赖安装

执行命令安装网络请求库:
pip install requests

完整代码示例

import requests
import json

# 配置项,替换为你自己的信息
SHOPWARE_API_URL = "https://你的店铺域名/api"
CLIENT_ID = "你的Client ID"
CLIENT_SECRET = "你的Client Secret"

# 第一步:获取API访问凭证
def get_access_token():
    url = f"{SHOPWARE_API_URL}/oauth/token"
    payload = {
        "grant_type": "client_credentials",
        "client_id": CLIENT_ID,
        "client_secret": CLIENT_SECRET
    }
    response = requests.post(url, json=payload)
    return response.json()["access_token"]

# 第二步:创建商品
def create_product(access_token, product_data):
    url = f"{SHOPWARE_API_URL}/product"
    headers = {
        "Authorization": f"Bearer {access_token}",
        "Content-Type": "application/json"
    }
    response = requests.post(url, headers=headers, json=product_data)
    return response.json()

# 第三步:上传商品图片并关联到商品
def upload_and_associate_image(access_token, product_id, image_path, image_name):
    # 先上传图片到媒体库
    upload_url = f"{SHOPWARE_API_URL}/_action/media/upload"
    headers = {
        "Authorization": f"Bearer {access_token}"
    }
    files = {
        "file": (image_name, open(image_path, "rb"), "image/jpeg")
    }
    params = {
        "extension": "jpg",
        "fileName": image_name
    }
    upload_response = requests.post(upload_url, headers=headers, files=files, params=params)
    media_id = upload_response.json()["data"]["id"]
    
    # 关联图片到商品
    associate_url = f"{SHOPWARE_API_URL}/product-media"
    associate_payload = {
        "productId": product_id,
        "mediaId": media_id,
        "position": 1
    }
    requests.post(associate_url, headers=headers, json=associate_payload)

if __name__ == "__main__":
    token = get_access_token()
    # 替换为你自己的商品数据
    test_product = {
        "name": "测试商品",
        "productNumber": "TEST001",
        "stock": 100,
        "active": True,
        "taxId": "你后台的税率ID",
        "price": [
            {
                "currencyId": "你后台的货币ID,默认人民币对应ID可在后台查看",
                "gross": 199.99, # 售价
                "net": 168.06, # 税前价格,可根据税率计算
                "linked": True,
                "listPrice": {
                    "currencyId": "你后台的货币ID",
                    "gross": 159.99, # 优惠后价格
                    "net": 134.45,
                    "linked": True
                }
            }
        ],
        "description": "这是商品描述内容",
        "ean": "1234567890123",
        "manufacturerId": "你后台的生产商ID"
    }
    product_result = create_product(token, test_product)
    product_id = product_result["data"]["id"]
    # 上传并关联图片,替换为你本地的图片路径
    upload_and_associate_image(token, product_id, "./test_product.jpg", "test_product.jpg")

注意事项

  • 批量导入时建议单次请求最多处理50个商品,避免触发API限流规则
  • 可通过productNumber(即SKU)作为唯一标识,后续更新商品时直接调用PUT接口即可,无需重复创建
  • 导入前可先传入一条测试数据验证字段格式是否正确,避免批量写入脏数据

内容的提问来源于stack exchange,提问作者lanavargas2002

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:45:03