零售 - 创建商品信息
创建商品信息接口中 skus 规格信息传入示例
说明:本文档主要用来解释说明零售创建商品接口 skus 规格信息传入方式,并提供对应参数的请求 JSON 示例,SDK 调用代码示例,具体常规参数传入请参考接口文档:
https://doc.youzanyun.com/doc#/content/API/2-433/detail/api/0/251
一、创建商品信息(不含规格信息)
1)代码示例:
@Test
public void spuCreate() throws SDKException{
DefaultYZClient yzClient = new DefaultYZClient();
Token token = new Token("token");
YouzanRetailOpenSpuCreate youzanRetailOpenSpuCreate = new YouzanRetailOpenSpuCreate();
//创建参数对象,并设置参数
YouzanRetailOpenSpuCreateParams youzanRetailOpenSpuCreateParams = new YouzanRetailOpenSpuCreateParams();
youzanRetailOpenSpuCreateParams.setCategoryId(1810202L);
youzanRetailOpenSpuCreateParams.setRetailSource("有赞配置的调用值");
youzanRetailOpenSpuCreateParams.setUnit("件");
youzanRetailOpenSpuCreateParams.setRetailPrice("100");
youzanRetailOpenSpuCreateParams.setName("艾斯测试商品");
System.out.println(JSON.toJSONString(youzanRetailOpenSpuCreateParams));
youzanRetailOpenSpuCreate.setAPIParams(youzanRetailOpenSpuCreateParams);
YouzanRetailOpenSpuCreateResult result = yzClient.invoke(youzanRetailOpenSpuCreate, token, YouzanRetailOpenSpuCreateResult.class);
System.out.println(JSON.toJSONString(result));
}
二、创建商品信息(含规格信息)
1、关于 skus 的传值规则
1)首先思考明确即将创建的商品有几级规格,例如以衣服为例,有颜色、尺码和款式三个规格。每个规格对应的规格值为:颜色:红色、白色,尺码:L、XL,款式:休闲,最终进行排列组合计算规格组合数量。
计算公式如下:
skus 数量 = 规格 1 数量 * 规格 2 数量 * 规格 3 数量【注意:最多只支持三个规格】
2)我们以第一个规格为颜色(红色、白色)、第二个规格为尺码(L、XL)、第三个规格为款式(休闲)为例。
skus 数量 = 颜色(2 种) * 尺码(2 种) * 款式(1 种)= 4 条 skus 数据。
skus1:红色 * L * 休闲
skus2:红色 * XL * 休闲
skus3:白色 * L * 休闲
skus4:白色 * XL * 休闲注意:specs中的规格名称、规格值需和spec_define_tuple中的规格定义信息一一对应
3)入参注意点:
1.skus 表示规格信息的类型为数组不是 JSON,具体可以参考下文 JOSN 示例。
2.retail_price 是商品建议零售价,skus 节点下的 sku_no 是商品的规格条码,sku_code 是商品的规格编码,k 是规格名称,kid 是规格名称对应的 id,v 是规格值名称,vid 是规格值名称对应的 id。
3.skus 中的 kid 和 vid 是开发者自定义的。
4.k 规格名称、v 规格值名称不要超过 20 个字符且不要传入特殊字符,否则会报 code:121001001,message:规格名称非法(缺失或者过长)。
4)完整代码示例:
@Test
public void spuCreate() throws SDKException {
DefaultYZClient yzClient = new DefaultYZClient();
Token token = new Token("token");
YouzanRetailOpenSpuCreate youzanRetailOpenSpuCreate = new YouzanRetailOpenSpuCreate();
//创建参数对象,并设置参数
YouzanRetailOpenSpuCreateParams youzanRetailOpenSpuCreateParams = new YouzanRetailOpenSpuCreateParams();
youzanRetailOpenSpuCreateParams.setCategoryId(1810202L);
youzanRetailOpenSpuCreateParams.setRetailSource("有赞配置的调用值");
youzanRetailOpenSpuCreateParams.setUnit("件");
youzanRetailOpenSpuCreateParams.setRetailPrice("100");
youzanRetailOpenSpuCreateParams.setName("艾斯测试商品");
/**
* 以规格:颜色:红色、白色,尺码:L、XL,款式:休闲 为例
* skus数量= 颜色(2种) * 尺码(2种) * 款式(1种)= 4条skus数据
*/
List<YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSkus> youzanRetailOpenSpuCreateParamsSkusList = new ArrayList<>();
List<YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs> youzanRetailOpenSpuCreateParamsSpecsList1 = new ArrayList<>();
//skus1数据:红色 * L * 休闲
//specs值设置
YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs specsRedL = new YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs();
YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs specsL = new YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs();
YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs specs = new YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs();
specsRedL.setName("颜色");
specsRedL.setValue("红色");
specsL.setName("尺码");
specsL.setValue("L");
specs.setName("款式");
specs.setValue("休闲");
youzanRetailOpenSpuCreateParamsSpecsList1.add(specsRedL);
youzanRetailOpenSpuCreateParamsSpecsList1.add(specsL);
youzanRetailOpenSpuCreateParamsSpecsList1.add(specs);
//skus值设置
YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSkus sku1 = new YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSkus();
sku1.setSkuNo("RedL123");
sku1.setSkuCode("TESTRedL123");
sku1.setRetailPrice("100");
sku1.setStandardPrice("100");
sku1.setSpecs(youzanRetailOpenSpuCreateParamsSpecsList1);
youzanRetailOpenSpuCreateParamsSkusList.add(sku1);
//skus2数据:红色 * XL * 休闲
List<YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs> youzanRetailOpenSpuCreateParamsSpecsList2 = new ArrayList<>();
YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs specsRedXL = new YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs();
YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs specsXL = new YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs();
YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs specs2 = new YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs();
specsRedXL.setName("颜色");
specsRedXL.setValue("红色");
specsXL.setName("尺码");
specsXL.setValue("XL");
specs2.setName("款式");
specs2.setValue("休闲");
youzanRetailOpenSpuCreateParamsSpecsList2.add(specsRedXL);
youzanRetailOpenSpuCreateParamsSpecsList2.add(specsXL);
youzanRetailOpenSpuCreateParamsSpecsList2.add(specs2);
YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSkus sku2 = new YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSkus();
sku1.setSkuNo("RedXL123");
sku1.setSkuCode("TESTRedXL123");
sku2.setRetailPrice("100");
sku2.setStandardPrice("100");
sku2.setSpecs(youzanRetailOpenSpuCreateParamsSpecsList2);
youzanRetailOpenSpuCreateParamsSkusList.add(sku2);
//skus3数据:白色 * L * 休闲
List<YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs> youzanRetailOpenSpuCreateParamsSpecsList3 = new ArrayList<>();
YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs specsWhiteL = new YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs();
YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs specsXL3 = new YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs();
YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs specs3= new YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs();
specsWhiteL.setName("颜色");
specsWhiteL.setValue("白色");
specsXL3.setName("尺码");
specsXL3.setValue("L");
specs3.setName("款式");
specs3.setValue("休闲");
youzanRetailOpenSpuCreateParamsSpecsList3.add(specsWhiteL);
youzanRetailOpenSpuCreateParamsSpecsList3.add(specsXL3);
youzanRetailOpenSpuCreateParamsSpecsList3.add(specs3);
YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSkus sku3 = new YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSkus();
sku3.setSkuNo("whiteL123");
sku3.setSkuCode("white123");
sku3.setRetailPrice("100");
sku3.setStandardPrice("100");
sku3.setSpecs(youzanRetailOpenSpuCreateParamsSpecsList3);
youzanRetailOpenSpuCreateParamsSkusList.add(sku3);
//skus4数据:白色 * XL * 休闲
List<YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs> youzanRetailOpenSpuCreateParamsSpecsList4 = new ArrayList<>();
YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs specsWhiteXL = new YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs();
YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs specsXL4 = new YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs();
YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs specs4 = new YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSpecs();
specsWhiteXL.setName("颜色");
specsWhiteXL.setValue("白色");
specsXL4.setName("尺码");
specsXL4.setValue("XL");
specs4.setName("款式");
specs4.setValue("休闲");
youzanRetailOpenSpuCreateParamsSpecsList4.add(specsWhiteXL);
youzanRetailOpenSpuCreateParamsSpecsList4.add(specsXL4);
youzanRetailOpenSpuCreateParamsSpecsList4.add(specs4);
YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSkus sku4 = new YouzanRetailOpenSpuCreateParams.YouzanRetailOpenSpuCreateParamsSkus();
sku4.setSkuNo("whiteXL123");
sku4.setSkuCode("white1234");
sku4.setRetailPrice("100");
sku4.setStandardPrice("100");
sku4.setSpecs(youzanRetailOpenSpuCreateParamsSpecsList4);
youzanRetailOpenSpuCreateParamsSkusList.add(sku4);
youzanRetailOpenSpuCreateParams.setSkus(youzanRetailOpenSpuCreateParamsSkusList);
System.out.println(JSON.toJSONString(youzanRetailOpenSpuCreateParams));
youzanRetailOpenSpuCreateParams.setSpecDefineTuple("[{\"key\":{\"k\":\"颜色\",\"kId\":1},\"values\":[{\"v\":\"红色\",\"vId\":11},{\"v\":\"白色\",\"vId\":111}]},{\"key\":{\"k\":\"尺码\",\"kId\":2},\"values\":[{\"v\":\"L\",\"vId\":21},{\"v\":\"XL\",\"vId\":221}]},{\"key\":{\"k\":\"款式\",\"kId\":3},\"values\":[{\"v\":\"休闲\",\"vId\":31}]}]");
youzanRetailOpenSpuCreate.setAPIParams(youzanRetailOpenSpuCreateParams);
YouzanRetailOpenSpuCreateResult result = yzClient.invoke(youzanRetailOpenSpuCreate, token, YouzanRetailOpenSpuCreateResult.class);
System.out.println(JSON.toJSONString(result));
}
5) 完整 JSON 参数示例:
{
"category_id":1810202,
"name":"艾斯测试商品",
"retail_price":"100",
"retail_source":"YZTESTZYL",
"skus":[
{
"retail_price":"100",
"sku_code":"TESTRedXL123",
"sku_no":"RedXL123",
"specs":[
{
"name":"颜色",
"value":"红色"
},
{
"name":"尺码",
"value":"L"
},
{
"name":"款式",
"value":"休闲"
}
],
"standard_price":"100"
},
{
"retail_price":"100",
"specs":[
{
"name":"颜色",
"value":"红色"
},
{
"name":"尺码",
"value":"XL"
},
{
"name":"款式",
"value":"休闲"
}
],
"standard_price":"100"
},
{
"retail_price":"100",
"sku_code":"white123",
"sku_no":"whiteL123",
"specs":[
{
"name":"颜色",
"value":"白色"
},
{
"name":"尺码",
"value":"L"
},
{
"name":"款式",
"value":"休闲"
}
],
"standard_price":"100"
},
{
"retail_price":"100",
"sku_code":"white1234",
"sku_no":"whiteXL123",
"specs":[
{
"name":"颜色",
"value":"白色"
},
{
"name":"尺码",
"value":"XL"
},
{
"name":"款式",
"value":"休闲"
}
],
"standard_price":"100"
}
],
"spec_define_tuple":"[{"key":{"k":"颜色","kId":1},"values":[{"v":"红色","vId":11},{"v":"白色","vId":111}]},{"key":{"k":"尺码","kId":2},"values":[{"v":"L","vId":21},{"v":"XL","vId":221}]},{"key":{"k":"款式","kId":3},"values":[{"v":"休闲","vId":31}]}]",
"unit":"件"
}
注:
上述 JSON 报文中转译字符无法显示,因此需要注意下 spec_define_tuple 字段组装的报文需要做一层转译。如图所示:
5)零售商城生成的商品示例: