商品-创建
接口信息
- 接口地址:
{your-site-url}/api/skill/product/create - 基础 URL:
{your-site-url}需替换为你自己的独立站 URL 地址,如https://your-domain.com/apimanager666 - 请求方式:
POST - Content-Type:
application/json - 说明: 此接口用于新增商品。
认证
请求头中需要携带 skill-access-token:
| Header | 值 |
|---|---|
skill-access-token |
{your-skill-access-token} (请替换为你自己的 token) |
请求参数 (Body - JSON)
顶层字段
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
product |
Object | ✅ 必填 | 产品主体数据 |
productattr_info |
Array | 选填 | 商品附加属性信息。使用前需先判断插件是否存在,详见下文说明 |
images |
Array | ✅ 必填 | 产品图片 |
videos |
Array | 选填 | 产品视频列表 |
addition_group_id |
int | 选填 | 商品自定义属性组 ID |
variantremark_id |
string/int | 选填 | 变体备注 ID |
groupbuy_id |
string/int | 选填 | 组合购买 ID |
collection_ids |
Array[int] | 选填 | 产品对应的专辑 ID 数组(多对多关系) |
label_ids |
Array | 选填 | 角标 ID 数组 |
options |
Array | 选填 | 产品规格定义。单规格为空,多规格必填 |
variants |
Array | ✅ 必填 | 产品变体(规格)。单规格产品数组只有一个子项 |
glasses |
Object | 选填 | 眼镜类商品属性 |
mergeimages |
Array | 选填 | 合并图片列表 |
tags |
Array | 选填 | 商品 tag 数组 |
groupbuy_id 说明
groupbuy_id是商品搭配组合购买(插件prodattr)提供的数据。使用前需要:
- 通过 商品组合购买-下拉条列表 获取下拉条列表
- 在该 API 返回的参数
groups中,选择一个子项的id,作为groupbuy_id的值- 商品搭配组合购买是插件功能,使用前需要先判断插件是否存在:通过 获取店铺基本信息 返回的字段
addons,查看prodattr是否在addons数组中存在,如果存在则说明店铺存在插件:商品搭配组合购买
productattr_info 说明
productattr_info是商品附加属性(插件prodattr)提供的数据。使用前需要:
- 通过 获取店铺基本信息 获取
addons字段,检查prodattr是否在addons数组中存在- 如果存在,则通过 商品附加属性-所有属性以及子项列表 获取所有属性及其子项
- 根据业务需要勾选属性和子项,构建
productattr_info数组
示例格式:
[
{"attr_id": 29, "item_ids": [52]},
{"attr_id": 30, "item_ids": [55]},
{"attr_id": 31, "item_ids": [56, 63]},
{"attr_id": 32, "item_ids": [57]},
{"attr_id": 33, "item_ids": [58, 61]}
]
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
attr_id |
int | ✅ 必填 | 属性 ID |
item_ids |
Array[int] | ✅ 必填 | 属性值 ID 数组 |
id |
string | 选填 | 记录 ID(新增时为空字符串) |
addition_group_id 说明
addition_group_id是自定义属性 ID,对应自定义属性插件。该字段是商品自定义属性 id 字段,需要先查看插件:商品自定义属性,店铺是否存在这个插件,并且,插件状态是否为开启。该字段赋值条件:
店铺存在插件:商品自定义属性
店铺是否存在插件:商品自定义属性,是插件功能,因此,使用前需要先判断商品自定义属性插件:additionattr,是否存在插件:additionattr,可以通过 api:获取店铺基本信息 返回的字段:addons,查看:additionattr 是否在 addons 数组中存在,如果存在则说明店铺存在插件:商品自定义属性
- 通过 api:商品自定义属性-下拉条列表,得到商品自定义属性下拉条列表,进行选择。因此,下拉条内容不为空,则可以选择商品自定义属性 id 的值,作为商品创建 api:
addition_group_id的值
collection_ids 说明
collection_ids是商品专辑 ID 数组,可通过 商品专辑-列表 获取商品专辑 ID。
google_product_category 说明
google_product_category是商品对应在 google category 的 ID,通过 商品-google categorys 获取数据。
product 字段详表
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
spu |
string | 选填 | 产品 SPU |
title |
string | ✅ 必填 | 产品标题 |
sub_title |
string | 选填 | 产品副标题 |
body_html |
string | ✅ 必填 | 产品描述(HTML) |
handle |
string | 选填 | 商品 URL handle。不填写则用 title 自动生成 |
status |
int | 选填 | 产品状态。1 上架,2 下架。默认上架 |
type |
int | ✅ 必填 | 产品规格类型。1 单规格,2 多规格 |
vendor |
string | 选填 | 产品厂家/品牌名称 |
virtual_sales_count |
int | 选填 | 产品虚拟销量 |
is_tax |
int | 选填 | 是否收税。1 收税,2 不收税 |
payafteruse |
int | 选填 | 先用后付。1 先用后付商品,2 普通商品 |
variant_need_image |
int | 选填 | 规格是否需要图片。1 需要,2 不需要。默认 1 |
variant_show_image |
int | 选填 | 前台商城规格显示方式。1 显示文字,2 显示图片,3 使用插件默认配置 |
variant_need_note |
int | 选填 | 变体是否需要备注。1 需要,2 不需要 |
inventory_police |
int | 选填 | 是否跟踪库存。1 跟踪,2 不跟踪。默认 1 |
inventory_police_type |
int | 选填 | 库存策略。1 库存为0允许购买,2 库存为0不允许购买,3 库存为0自动下架。默认 1 |
meta_is_edit |
int | 选填 | SEO 信息是否独立编辑。1 非独立编辑,2 独立编辑 |
meta_title |
string | 选填 | SEO 标题(meta title) |
meta_keywords |
string | 选填 | SEO 关键字(meta keywords) |
meta_description |
string | 选填 | SEO 描述(meta description) |
feed_title |
string | 选填 | Feed 自定义 title |
feed_description |
string | 选填 | Feed 自定义 description |
translate_type |
int | 选填 | 翻译类型。1 强制翻译,2 只翻译多语言为空的部分,3 不翻译 |
source_type |
int/string | 选填 | source 类型。1 代表 1688 |
template_type |
string | 选填 | 模版装修的 template key |
google_product_category |
int | 选填 | Google 商品分类 ID |
google_product_type_id |
string | 选填 | Google 产品类型 |
description_json |
Object | 选填 | JSON 描述内容(模板装修数据) |
description_json_status |
int | 选填 | 描述是否使用 JSON 字段。1 开启,2 关闭 |
params_json |
Array | 选填 | 参数 JSON 内容 |
params_json_status |
int | 选填 | 参数是否使用 JSON。1 开启,2 关闭 |
short_description_json |
Array[Object] | 选填 | 商品列表描述,简短描述(JSON 格式数组,支持多语言)。每项含 text(默认文本)和 lang_params(多语言翻译对象) |
collection_ids |
Array[int] | 选填 | 产品对应的专辑 ID 数组 |
label_ids |
Array | 选填 | 角标 ID 数组 |
variant_show_image 说明
variant_show_image该字段对应的是插件:商品规格图片,本来该字段是通过:商品规格图片-保存配置 的字段:default_show进行,如果某个商品,不想通过统一配置,想要单独配置,那么就可以设置这个字段。|
variant_show_image| int | 选填 | 前台商城规格显示方式。1显示文字,2显示图片,3使用插件默认配置 |默认的值为:
3,一般都是使用 3,也就是,使用插件默认配置,该值代表的意思是,以 api:商品规格图片-保存配置 的字段:default_show,这个字段为准。对于值 1 和 2,代表自定义值,譬如某个商品的规格全部使用文字,那么就可以在这里自定义某个商品的规格的显示方式。
short_description_json 结构说明
每项格式:
{
"text": "默认文本",
"lang_params": {
"text": {
"cn": "中文翻译"
}
}
}
short_description_json 插件判断说明
short_description_json(商品列表描述)是插件:商品列表描述对应的字段。该字段进行编辑后,通过 api:商品列表描述-获取配置,来查看 status 是否开启,如果开启,则前台商城,商品详情页,将会显示商品的列表属性。商品列表属性,是为了将商品的简要描述,在商品详情页更好地展示。简单来说,商品列表属性就是在前台商城的商品详情页,展示的一列商品属性文字——一行一段文字,多行显示。
使用前需要同时满足以下 2 个条件:
- 店铺存在插件:商品列表描述。这是插件功能,使用前需要先判断商品列表描述插件:prodlistattr 是否存在。可以通过 api:获取店铺基本信息 返回的字段:addons,查看:prodlistattr 是否在 addons 数组中存在,如果存在则说明店铺存在插件:商品列表描述
- 插件状态开启。通过 api:商品列表描述-获取配置 获取状态值 status 为 1 开启,则代表插件状态开启
template_type 说明
template_type是模版装修的 template key。取值方式:
- 通过 得到模版layout布局列表,传递 get 参数
page_type=product,即可获得 Template Types 列表- 从返回数据中的
template_types中选择一个值,作为template_type的值- 一般来说,该值留空即可,除非用户进行指定
- 如果用户提交了值,那么该值必须在该 API 返回的数据
template_types中存在;如果不存在,则留空即可
images 字段详表
新增时不需要传
id,系统会自动生成。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
src |
string | ✅ 必填 | 产品图片路径 |
alt |
string | 选填 | 图片 alt 文本 |
position |
int | ✅ 必填 | 图片排序位置,从 1 开始依次递增。标识为 1 的将作为主图 |
width |
int | 选填 | 图片宽度(像素) |
height |
int | 选填 | 图片高度(像素) |
ratio |
string | 选填 | 宽高比 |
key |
float | 选填 | 前端唯一标识 key |
videos 字段详表
新增时不需要传
id。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
src |
string | ✅ 必填 | 视频 URL 路径 |
alt |
string | 选填 | 视频 alt 文本 |
position |
int | ✅ 必填 | 排序位置 |
key |
float | 选填 | 前端唯一标识 key |
videos 插件判断说明
videos是商品视频字段,需要先查看插件:商品视频,店铺是否存在这个插件,并且,插件状态是否为开启。该字段赋值条件:这 2 个条件必须同时成立
options 字段详表
单规格产品为空,多规格产品必填。新增时不需要传
id。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name |
string | ✅ 必填 | 规格名称(如 "Color"、"Size") |
position |
int | ✅ 必填 | 规格排序,值只能为 1、2、3 中的一个,且每个 option 的 position 不可重复 |
items |
Array[string] | ✅ 必填 | 规格子项数组(如 ["White", "Black"]) |
variants 字段详表
单规格产品数组只有一个子项。新增时不需要传
id。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
price |
float | ✅ 必填 | 售卖价格 |
qty |
int | ✅ 必填 | 变体库存,默认 0 |
weight |
string | ✅ 必填 | 变体重量 |
weight_unit |
string | ✅ 必填 | 重量单位。可选值:g(克)、kg(千克)、lb(磅)、oz(盎司) |
option1 |
string | 选填 | 规格值 1。其值必须存在于 options 中 position=1 所在行的 items 数组中 |
option2 |
string | 选填 | 规格值 2。其值必须存在于 options 中 position=2 所在行的 items 数组中 |
option3 |
string | 选填 | 规格值 3。其值必须存在于 options 中 position=3 所在行的 items 数组中 |
cost_price |
float | 选填 | 成本价格 |
compare_at_price |
float | 选填 | 划线价格 |
wholesale_price |
Array[Object] | 选填 | 批发价格。每项含 qty(批发个数,int)和 price(批发价格,float) |
sku |
string | ✅/选填 | 产品 SKU。根据配置项决定必填唯一、选填唯一或选填非唯一 |
barcode |
string | 选填 | 条形码 |
image |
string | 选填 | 变体图片路径。注意:此图片必须存在于 images 数组中,否则无法保存 |
note |
string | 选填 | 变体备注 |
buy_min_count |
int | 选填 | 最小起购数量。这是商品最低购买的个数,需要插件:cartlimit(商品加购限制)存在且状态开启才生效,详见下方「buy_min_count 插件判断说明」 |
customervip |
Array[Object] | 选填 | VIP 会员价格。每项含 customervip_id(VIP等级ID,int)和 price(VIP价格,float) |
images |
Array | 选填 | 变体图片列表 |
variants 子项 image(变体图片)必填说明
variants子项的image字段(变体图片路径)是否必填,由product的variant_need_image字段决定:
- 当
product.variant_need_image值为1,则variants子项的字段:image(变体图片路径),必填,而且:注意:此图片必须存在于images数组中,否则无法保存- 当
product.variant_need_image值不为1,则variants子项的字段:image,不需要填写
variants 子项 images(商品规格多图)说明
商品规格多图,对应的是
variants的子项的images字段。variants字段是商品的规格字段,它的子项的images字段,保存的就是规格多图。这个字段是商品规格多图,需要先判断插件:商品规格多图,店铺是否存在这个插件,并且,插件状态是否为开启。
该字段赋值条件:这 2 个条件必须同时成立
- 店铺存在插件:商品规格多图
插件状态开启
店铺是否存在插件:商品规格多图,是插件功能,因此,使用前需要先判断商品规格多图插件:variantmutilimage,是否存在插件:variantmutilimage。可以通过 api:获取店铺基本信息 返回的字段:addons,查看:variantmutilimage 是否在 addons 数组中存在,如果存在则说明店铺存在插件:商品规格多图
- 通过 api:商品规格多图-获取配置,得到状态 status 为 1 开启,则代表插件状态开启
variants 子项 images 示例(即规格多图):
"images": [
{
"id": "",
"product_id": 7143,
"variant_id": 50400,
"position": 1,
"src": "https://sc04.alicdn.com/kf/Hd4e2987843a8423ebe6dfced71a6128df.jpg",
"width": "",
"height": "",
"ratio": "0.00"
},
{
"id": "",
"product_id": 7143,
"variant_id": 50400,
"position": 2,
"src": "https://sc04.alicdn.com/kf/H8e2257c0fcf34dec8240ba8e647e710bP.jpg",
"width": "",
"height": "",
"ratio": "0.00"
}
]
images 说明:
- images 的子项的 src 字段,是图片的路径,对于值,可以是 http 开头的完整 url,也可以是只有 path 的图片路径(通过图片基础 url 拼接得到完整图片 url)
- images 的子项的 src 字段,是图片的路径,必须在 post 的参数:images 中存在,
post 参数 images指的是最外层的商品所有图片的字段 images
images 子项说明:
| 字段 | 类型 | 说明 |
|---|---|---|
id |
string | 子项 id |
product_id |
string/int | 商品 id |
variant_id |
string/int | 规格变体 id |
position |
int | 图片位置,用于前台商城,商品详情页,图片的排序 |
src |
string | 图片的路径,可以是 http 开头的完整 url,也可以是只有 path 的图片路径(通过图片基础 url 拼接得到完整图片 url),该子项必须在最外层的 post 参数 images 中存在 |
ratio |
string | 图片宽高比 |
wholesale_price 插件判断说明
wholesale_price(商品批发价格)是商品批发价格插件提供的数据。注意:商品设置了批发价格数据后,店铺必须存在插件:商品批发价格,并且插件状态已开启,前台商品详情页才会显示商品的批发价格,顾客购买多个才会享受批发价格。使用前需要同时满足以下 2 个条件:
- 店铺存在插件:商品批发价格。这是插件功能,使用前需要先判断商品批发价格插件:wholesale_price 是否存在。可以通过 api:获取店铺基本信息 返回的字段:addons,查看:wholesale_price 是否在 addons 数组中存在,如果存在则说明店铺存在插件:商品批发价格
- 插件状态开启。通过 api:商品批发价格-获取配置 获取状态值,判断插件是否开启
buy_min_count 插件判断说明
variants子项的buy_min_count(最小起购数量),是商品最低购买的个数。需要插件:cartlimit(商品加购限制)存在,并且插件状态为开启状态,前台商城,商品购买个数限制才会生效。使用前需要同时满足以下 2 个条件:
- 店铺存在插件:商品加购限制。这是插件功能,使用前需要先判断商品加购限制插件:cartlimit 是否存在。可以通过 api:获取店铺基本信息 返回的字段:addons,查看:cartlimit 是否在 addons 数组中存在,如果存在则说明店铺存在插件:商品加购限制
- 插件状态开启。通过 api:商品加购限制-获取配置 返回的 status,状态为开启状态,前台商城,商品购买个数限制才会生效
如果店铺不存在插件:cartlimit,或者状态不开启,则前台商城,商品购买个数限制不会生效。
tags 字段详表
新增时传
id: ""(空字符串)。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id |
string | 选填 | Tag ID(新增时传空字符串 "",已有 tag 传实际 ID) |
title |
string | ✅ 必填 | Tag 标题 |
值格式为:
[
{
"title": "beginner",
"id": 199
},
{
"title": "baby closthes",
"id": 53
},
{
"title": "4343",
"id": ""
}
]
对于 tags 的值:
- 可以从 tag 列表中进行选择:商品Tag-列表,这种方式可以填写
id和title - 也可以直接填写 tags 的值,只填写
title,id为空。保存商品的时候,会通过 tag title 去查询 tag:如果找到则直接返回 tag id,找不到则会创建 tag,然后返回 tag id
glasses 字段详表
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
button_type |
int | 选填 | 按钮类型 |
distance_min |
string | 选填 | 最小距离 |
distance_max |
string | 选填 | 最大距离 |
sex |
Object | 选填 | 适用性别。含 value(默认值)和 language(多语言对象,如 {"cn": "性别"}) |
lens_type |
Object | 选填 | 镜片类型。含 value(默认值)和 language(多语言对象,如 {"cn": "类型"}) |
material |
Object | 选填 | 材质。含 value(默认值)和 language(多语言对象,如 {"cn": "材料"}) |
mergeimages 字段详表
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
src |
string | ✅ 必填 | 图片路径 |
position |
int | ✅ 必填 | 图片位置排序 |
alt |
string | 选填 | 图片 alt 文字 |
width |
int | 选填 | 图片宽度(像素) |
height |
int | 选填 | 图片高度(像素) |
ratio |
string | 选填 | 宽高比 |
请求示例
cURL
curl --location --request POST '{your-site-url}/api/skill/product/create' \
--header 'skill-access-token: {your-skill-access-token}' \
--header 'Content-Type: application/json' \
--data-raw '{
"product": {
"spu": "3232323",
"title": "Morden Lighting Nordic Fabric Shade Black White Floor Lamp",
"sub_title": "Morden Lighting Nordic Fabric Shade Black White Floor Lamp subtitle",
"body_html": "...(HTML 模板装修内容,详见下方 body_html 说明)...",
"status": 1,
"is_tax": 1,
"payafteruse": 1,
"virtual_sales_count": "33",
"type": 2,
"vendor": "Lighting Made",
"variant_need_image": "1",
"variant_show_image": 3,
"inventory_police": "1",
"inventory_police_type": 1,
"meta_is_edit": "2",
"meta_title": "Morden Lighting Nordic Fabric Shade Black White Floor Lamp",
"meta_keywords": "Morden Lighting",
"meta_description": "Morden Lighting Nordic Fabric Shade Black White Floor Lamp, ...",
"feed_description": "google feed description",
"feed_title": "google feed title",
"handle": "morden-lighting-nordic-fabric-shade-black-white-floor-lamp",
"translate_type": 3,
"google_product_category": 111,
"google_product_type_id": "light",
"description_json": "(Object,模板装修 JSON 数据,包含 collage-tabs 和 brand-list 两个 section)",
"description_json_status": 1,
"params_json": [],
"params_json_status": 2,
"short_description_json": [
{
"text": "Morden Lighting Nordic Fabric Shade Black White Floor Lamp",
"lang_params": {
"text": {
"cn": "摩登照明北欧布艺灯罩黑白落地灯"
}
}
},
{
"text": "Nordic Fabric Shade Black White Floor Lamp",
"lang_params": {
"text": {
"cn": "北欧风格黑白布艺灯罩落地灯"
}
}
}
],
"template_type": "product",
"variant_need_note": "1"
},
"productattr_info": [
{
"attr_id": 33,
"item_ids": [
61
]
},
{
"attr_id": 31,
"item_ids": [
56,
63
]
}
],
"images": [
{
"src": "/product/15/image/2026/04/28/3fb5620f4acf97bdf9d056a6220b87e0.jpg",
"position": 1,
"alt": "",
"width": 600,
"height": 600,
"ratio": "1.00"
},
{
"src": "/product/15/image/2026/04/28/f6d04b41c743455948ed5dfea357a53e.jpg",
"position": 2,
"alt": "",
"width": 600,
"height": 600,
"ratio": "1.00"
},
{
"src": "/product/15/image/2026/04/28/858278fe4f6d493ece46810169a4df21.jpg",
"position": 3,
"alt": "",
"width": 600,
"height": 600,
"ratio": "1.00"
}
],
"videos": [
{
"src": "https://cloud.video.taobao.com/play/u/2206786293671/p/1/e/6/t/1/453995116363.mp4",
"position": 1,
"alt": ""
}
],
"addition_group_id": 73,
"variantremark_id": 9,
"groupbuy_id": 12,
"collection_ids": [342, 343],
"label_ids": [],
"options": [
{
"name": "Color",
"position": 1,
"items": ["grey", "white"]
},
{
"name": "Size",
"position": 2,
"items": ["L", "M"]
}
],
"variants": [
{
"price": "59.99",
"compare_at_price": "69.99",
"cost_price": "29.99",
"sku": "3232323-grey-L-1010805",
"barcode": "1111",
"image": "/product/15/image/2026/04/28/3fb5620f4acf97bdf9d056a6220b87e0.jpg",
"qty": 8999,
"option1": "grey",
"option2": "L",
"option3": "",
"weight": "11",
"weight_unit": "kg",
"note": "grey l",
"buy_min_count": 1,
"wholesale_price": [
{"qty": 2, "price": "45.88"},
{"qty": 5, "price": "41.88"}
],
"customervip": [
{"customervip_id": 11, "price": 44},
{"customervip_id": 10, "price": 45},
{"customervip_id": 8, "price": 46},
{"customervip_id": 7, "price": 47}
],
"images": [
{
"src": "/product/15/image/2026/04/28/3fb5620f4acf97bdf9d056a6220b87e0.jpg",
"position": 1
},
{
"src": "/product/15/image/2026/04/28/f6d04b41c743455948ed5dfea357a53e.jpg",
"position": 2
}
]
},
{
"price": "59.99",
"compare_at_price": "69.99",
"cost_price": "29.99",
"sku": "3232323-grey-M-1010806",
"barcode": "2222",
"image": "/product/15/image/2026/04/28/3fb5620f4acf97bdf9d056a6220b87e0.jpg",
"qty": 8999,
"option1": "grey",
"option2": "M",
"option3": "",
"weight": "11",
"weight_unit": "kg",
"note": "grey m",
"buy_min_count": 1,
"wholesale_price": [
{"qty": 2, "price": "45.88"},
{"qty": 5, "price": "41.88"}
],
"customervip": [
{"customervip_id": 11, "price": 44},
{"customervip_id": 10, "price": 45},
{"customervip_id": 8, "price": 46},
{"customervip_id": 7, "price": 47}
],
"images": [
{
"src": "/product/15/image/2026/04/28/3fb5620f4acf97bdf9d056a6220b87e0.jpg",
"position": 1
},
{
"src": "/product/15/image/2026/04/28/f6d04b41c743455948ed5dfea357a53e.jpg",
"position": 2
}
]
},
{
"price": "59.99",
"compare_at_price": "69.99",
"cost_price": "29.99",
"sku": "3232323-white-L-1010807",
"barcode": "3333",
"image": "/product/15/image/2026/04/28/858278fe4f6d493ece46810169a4df21.jpg",
"qty": 8999,
"option1": "white",
"option2": "L",
"option3": "",
"weight": "11",
"weight_unit": "kg",
"note": "white l",
"buy_min_count": 1,
"wholesale_price": [
{"qty": 2, "price": "45.88"},
{"qty": 5, "price": "41.88"}
],
"customervip": [
{"customervip_id": 11, "price": 44},
{"customervip_id": 10, "price": 45},
{"customervip_id": 8, "price": 46},
{"customervip_id": 7, "price": 47}
],
"images": [
{
"src": "/product/15/image/2026/04/28/858278fe4f6d493ece46810169a4df21.jpg",
"position": 1
},
{
"src": "/product/15/image/2026/04/28/f6d04b41c743455948ed5dfea357a53e.jpg",
"position": 2
}
]
},
{
"price": "59.99",
"compare_at_price": "69.99",
"cost_price": "29.99",
"sku": "3232323-white-M-1010808",
"barcode": "4444",
"image": "/product/15/image/2026/04/28/858278fe4f6d493ece46810169a4df21.jpg",
"qty": 8999,
"option1": "white",
"option2": "M",
"option3": "",
"weight": "11",
"weight_unit": "kg",
"note": "white m",
"buy_min_count": 1,
"wholesale_price": [
{"qty": 2, "price": "45.88"},
{"qty": 5, "price": "41.88"}
],
"customervip": [
{"customervip_id": 11, "price": 44},
{"customervip_id": 10, "price": 45},
{"customervip_id": 8, "price": 46},
{"customervip_id": 7, "price": 47}
],
"images": [
{
"src": "/product/15/image/2026/04/28/858278fe4f6d493ece46810169a4df21.jpg",
"position": 1
},
{
"src": "/product/15/image/2026/04/28/f6d04b41c743455948ed5dfea357a53e.jpg",
"position": 2
}
]
}
],
"glasses": {
"button_type": 1,
"distance_min": "11",
"distance_max": "99",
"sex": {
"value": "sex",
"language": {"cn": "性别"}
},
"lens_type": {
"value": "style",
"language": {"cn": "类型"}
},
"material": {
"value": "type",
"language": {"cn": "材料"}
}
},
"mergeimages": [],
"tags": [
{"title": "white", "id": ""},
{"title": "black", "id": ""}
]
}'
返回结果
code 为 200 表示调用成功;code 不为 200 表示调用失败。
成功响应
{
"code": 200,
"data": {
"product_id": 4693
},
"message": "success"
}
返回字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
code |
Number | 状态码,200 表示成功 |
message |
String | 执行结果的文字描述 |
data.product_id |
int | 创建成功后返回的新产品 ID |
错误响应
{
"code": 100701001,
"message": "error message"
}
错误码说明
| 错误码 | 说明 |
|---|---|
100701003 |
商品id为空 |
100701001 |
商品保存报错 |
| 其他错误码 | 商品保存报错 |
Create vs Update 区别
/api/skill/product/update 和 /api/skill/product/create 参数结构几乎一致,主要区别:
| 区别点 | Create(新增) | Update(更新) |
|---|---|---|
| 接口地址 | /api/skill/product/create |
/api/skill/product/update |
product.id |
不需要传 | ✅ 必填 |
images[].id |
不需要传 | 选填(更新已有图片时传入) |
videos[].id |
不需要传 | 选填(更新已有视频时传入) |
options[].id |
不需要传 | 选填(更新已有规格时传入) |
variants[].id |
不需要传 | 选填(更新已有变体时传入) |
tags[].id |
传空字符串 ""(新建 tag) |
传已有 tag 的 ID |
注意事项
- productattr_info 插件判断:使用前先通过 获取店铺基本信息 检查
addons中是否包含prodattr。如果存在,则通过 商品附加属性-所有属性以及子项列表 获取所有属性及其子项后构建此字段。 body_html为商品详情页的 HTML 模板装修内容,与description_json对应。- 变体的
image字段必须已存在于images数组中,否则无法保存。 images[].position必须从1开始连续递增,position=1的图片为主图。options[].position只能为1、2、3,且每个 option 的 position 不可重复。variants中的option1/2/3值必须与对应position的options[].items中的值匹配。wholesale_price为变体的批发价格数组,每个元素包含qty(起批数量)和price(批发单价)。weight_unit支持g、kg、lb、oz四种单位。description_json为模板装修数据(Object),非数组;description_json_status为1时才生效。short_description_json每项包含text(默认文本)和lang_params.text.{语言}(多语言翻译)。- 新增时所有实体的
id字段均不需要传(或传空),系统会自动生成。 - videos 插件判断:
videos是商品视频字段,赋值条件:① 通过 获取店铺基本信息 检查addons中是否包含prodvideo(店铺存在插件:商品视频);② 通过 商品视频-获取配置 得到状态status为1开启(插件状态开启)。2 个条件必须同时成立。 - variants 子项 images 插件判断:
variants子项的images字段(商品规格多图),赋值条件:① 通过 获取店铺基本信息 检查addons中是否包含variantmutilimage(店铺存在插件:商品规格多图);② 通过 商品规格多图-获取配置 得到状态status为1开启(插件状态开启)。2 个条件必须同时成立。 variants子项images中的src必须是 http 开头的完整 url,或者只有 path 的图片路径(通过图片基础 url 拼接得到完整图片 url),且该src必须存在于最外层的post 参数 images中。- wholesale_price 插件判断:
wholesale_price(商品批发价格)是插件功能,赋值条件:① 通过 获取店铺基本信息 检查addons中是否包含wholesale_price(店铺存在插件:商品批发价格);② 通过 商品批发价格-获取配置 获取状态值(插件状态开启)。2 个条件必须同时成立,前台商品详情页才会显示批发价格,购买多个才会享受批发价格。 - short_description_json 插件判断:
short_description_json(商品列表描述)是插件功能,赋值条件:① 通过 获取店铺基本信息 检查addons中是否包含prodlistattr(店铺存在插件:商品列表描述);② 通过 商品列表描述-获取配置 得到状态status为1开启(插件状态开启)。2 个条件必须同时成立,前台商品详情页才会显示商品的列表属性。 - buy_min_count 插件判断:
variants子项的buy_min_count(最小起购数量)是商品最低购买的个数,赋值条件:① 通过 获取店铺基本信息 检查addons中是否包含cartlimit(店铺存在插件:商品加购限制);② 通过 商品加购限制-获取配置 返回的 status 为开启状态(插件状态开启)。2 个条件必须同时成立,前台商城商品购买个数限制才会生效;如果店铺不存在插件:cartlimit,或者状态不开启,则前台商城商品购买个数限制不会生效。