零售 - 创建商品信息

创建商品信息接口中 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 字段组装的报文需要做一层转译。如图所示:
image.png

5)零售商城生成的商品示例: