有赞云开放接口多网点场景对接说明

一、场景说明

       多网点是微商城中比较有特色的一个功能,当客户有很多线下门店,但是希望在一个统一的线上店铺中进行管理时,就可以选择微商城的多网点功能。本文档主要说明如何使用有赞云的多网点相关接口对网点和网点商品进行管理,如何区分订单的归属网点等;主要包括网点的创建、更新、网点信息的获取、网点列表的拉取、更新网点商品配送方式、更新网点商品 SKU、获取网点所有可配送商品的配送方式、获取网点商品 SKU 等接口。因此线下连锁零售企业提供的线上门店管理工具,也能够基于有赞云开放的多网点接口,第三方合作伙伴可以实现线上线下门店订单、商品、库存同步。
        网点创建场景说明:商家需要创建、维护的网点数量较多时,可以通过 API 接口来创建、维护;商家需要创建、维护的网点数量较少时,可直接在店铺后台进行配置,本文档后面会做具体操作说明。

二、多网点介绍

1、基本概念

店铺:有赞微商城店铺。
网点:线下门店和自提点的统称。
总店:一个特殊的网点,当无法获取买家位置时,系统会推荐买家到总店。
商品:有赞微商城店铺的商品。
SKU:商品的规格,是商品库存的最小单位。
 

2、多网点模型

image.png

3、业务操作流程及规则

image.png

 

三、涉及 API 接口及调用说明

1、网点创建、删除场景

场景说明:商家拥有多家线下门店,需要使用微商城的多网点功能,并在微商城中完成网点的创建、网点信息的更新、网点的删除等基础操作。
——商家在微商城后台手动添加网点信息,微商城后台 - 营销 - 配套工具 - 多网点,点击“新增网点”,填写网点基本信息,如果勾选了同城配送,需要设置同城配送相关信息,见下图;信息配置完成后点击保存,即可完成网点的添加; 
image.png
image.png

——通过哪个接口可以快捷的完成网点的创建?
(1) 创建网点:youzan.multistore.offline.create.3.0.0
(2)链接地址:https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/126
(3)重要字段说明:
》》address:详细地址,网点的详细地址,建议精确到 XX 路 XX 号;有非法字符限制;
》》area:区名,比如杭州的西湖区、滨江区、余杭区等;
》》business_hours_advanced:营业时间,可按天设置;格式示例如下:

[{
“open_time”:"00:10",
“close_time":"16:00",
“weekdays”:[“周一","周二","周三","周四","周五"]
},
{
“open_time":"00:10",
“close_time":"20:00",
“weekdays":["周六","周日"]
}]

》》city:市名,比如杭州市、南京市等;
》》county_id:行政区划代码,标准参考高德城市编码表 http://lbs.amap.com/api/webservice/download 
》》image:图片地址,逗号分隔,可通过接口 youzan.materials.storage.platform.img.upload
上传图片获得图片 URL 地址和图片 ID;也可以使用任何可以正常访问的图片 URL 地址;
示例值:https://img.yzcdn.cn/public_files/2017/05/19/68863f28f4852607aa797cbcd741563d.png
》》lat 和 lng:经度和纬度,百度坐标系标准,多网点定位需要用到经纬度,因此参数属性为必传;
》》local_delivery_scope_type:开启同城配送时,同城配送范围的划定方式;1 表示半径,2 表示多边形;
》》local_delivery_polygon:同城配送多边形范围, 只有当 local_delivery_scope_type=2 时生效。格式如:点 1 经度, 点 1 纬度 | 点 2 经度, 点 2 纬度 | 点 3 经度,点 3 纬度 | 点 4 经度,点 4 纬度…(百度坐标系)
》》name:网点名称,有违禁词限制;
》》phone1 和 phone2:前者为区号,如 0571;后者为电话号码或手机号,如 15088886668;
》》province:省名,如浙江省、江西省等;
》》tag_ids:标签 ID 列表,多个网点可以添加到同一个标签下,多用于网点较多时,将具有相似特征的网点添加到同一个标签下的场景;
(4)调用格式,通过(2)中链接访问后:
image.png 
(5)HTTP 调用示例:

curl -X POST "https://open.youzanyun.com/api/youzan.multistore.offline.create/3.0.0?access_token=c3220121ae0fc6c4e11123370e0d1b03" -H 'content-type: application/json' -d '{"address":"杭州市西湖区288号黄龙国际","city":"杭州市","area":"西湖区","business_hours_advanced
":[{"open_time":"00:10","close_time":"16:00","weekdays":["周一","周二","周三","周四","周五"]},{"open_time":"00:10","close_time":"20:00","weekdays":["周六","周日"]}],"province":"浙江省","phone2":"18250667676","phone1":"0571","description":"测试网点1","county_id":"330101","image":"https://img.yzcdn.cn/public_files/2017/05/19/68863f28f4852607aa797cbcd741563d.png","is_store":"1","lng":"120.132657","lat":"30.281374","is_self_fetch":"1","name":"test"}'

(6)JAVA 调用示例:

        Token token = new Token("3f2532a2da35c1da0109e80f8668b795");
        DefaultYZClient yzClient = new DefaultYZClient();
        YouzanMultistoreOfflineCreate youzanMultistoreOfflineCreate = new YouzanMultistoreOfflineCreate();
        //创建参数对象,并设置参数
        YouzanMultistoreOfflineCreateParams youzanMultistoreOfflineCreateParams = new YouzanMultistoreOfflineCreateParams();
        youzanMultistoreOfflineCreateParams.setAddress("王塘路188号黄龙国际");
        youzanMultistoreOfflineCreateParams.setProvince("浙江省");
        youzanMultistoreOfflineCreateParams.setArea("西湖区");
        youzanMultistoreOfflineCreateParams.setCity("杭州市");
        youzanMultistoreOfflineCreateParams.setCountyId("310101");
        youzanMultistoreOfflineCreateParams.setDescription("这是一个测试网点");
        youzanMultistoreOfflineCreateParams.setBusinessHoursAdvanced("[{\"open_time\":\"00:00\",\"close_time\":\"01:00\",\"weekdays\":[\"\\u5468\\u4e00\"]}]");
        youzanMultistoreOfflineCreateParams.setImage("https://img.yzcdn.cn/public_files/2017/05/19/68863f28f4852607aa797cbcd741563d.png");
        youzanMultistoreOfflineCreateParams.setPhone1("0571");
        youzanMultistoreOfflineCreateParams.setPhone2("2887887");
        youzanMultistoreOfflineCreateParams.setIsStore(1);
        youzanMultistoreOfflineCreateParams.setLat("30.2813743");
        youzanMultistoreOfflineCreateParams.setLng("120.132657");
        youzanMultistoreOfflineCreateParams.setName("winnie");
        youzanMultistoreOfflineCreate.setAPIParams(youzanMultistoreOfflineCreateParams);
        try {
        YouzanMultistoreOfflineCreateResult result = yzClient.invoke(youzanMultistoreOfflineCreate, token, YouzanMultistoreOfflineCreateResult.class);
            System.out.println(JSON.toJSON(result));
        } catch (SDKException n) {
            n.printStackTrace();
        }
    }
} 

——当某个网点失效或取消时,在网点管理中的更多选项中,选择删除可以将该网点从微商城后台删除掉; 
image.png
——通过哪个接口可以快速的删除不需要的网点?
(1)删除网点:youzan.multistore.offline.delete.3.0.0
(2)链接地址:https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/124 
(3)重要字段说明:
》》id:网点 id,需要删除的网点 id
(4)调用格式,通过(2)中链接访问后:
image.png 
(5)HTTP 请求示例:

curl -X POST "https://open.youzanyun.com/api/youzan.multistore.offline.delete/3.0.0?access_token=c3220121ae0fc6c4e11123370e0d1b03" -H 'content-type: application/json' -d '{ "id":"345676"}'

(6)JAVA 调用示例:

        Token token = new Token("3f2532a2da35c1da0109e80f8668b795");
        DefaultYZClient yzClient = new DefaultYZClient();
        YouzanMultistoreOfflineDelete youzanMultistoreOfflineDelete = new YouzanMultistoreOfflineDelete();
        //创建参数对象,并设置参数
        YouzanMultistoreOfflineDeleteParams youzanMultistoreOfflineDeleteParams = new YouzanMultistoreOfflineDeleteParams();
        youzanMultistoreOfflineDeleteParams.setId(356754L);
        youzanMultistoreOfflineDelete.setAPIParams(youzanMultistoreOfflineDeleteParams);
        try {
        YouzanMultistoreOfflineDeleteResult result = yzClient.invoke(youzanMultistoreOfflineDelete, token, YouzanMultistoreOfflineDeleteResult.class);
            System.out.println(JSON.toJSON(result));
        } catch (SDKException n) {
            n.printStackTrace();
        }
    }
}  

2、网点信息更新维护场景

场景描述:网点的信息并不是一成不变的,商家需要根据实际的变化对网点营业时间、支持的配送方式等信息进行更新;除了能够掌握网点的详细信息之外,还需要对信息进行维护。
——商家在微商城后台 - 营销 - 配套工具 - 多网点模块中,可以看到已经创建好的网点信息,在网点右侧的按钮中可以对网点进行相应的操作; 
image.png
——通过哪个接口可以获取微商城后台已经创建好的网点的信息列表?
(1)获取网点列表:youzan.multistore.offline.search.3.0.0
(2)链接地址:https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/183 
(3)重要字段说明:
》》keyword:搜索关键字,如果此处入参的话只返回网点名称包含此关键字的网点信息;
》》page_no:当前页码,需要显示哪一页的数据;通常在网点数量不多的时候设置为 1 即可,如果网点数量较多可以根据“每页条数”做判断显示;
》》page_size:每页显示条数,设置为 10 条比较合适;
》》type:网点类型,自提点:self_fetch 或线下门店:store;
(4)调用格式,通过(2)中链接访问后: 
image.png
(5)HTTP 调用示例:

curl -X POST "https://open.youzanyun.com/api/youzan.multistore.offline.search/3.0.0?access_token=c3220121ae0fc6c4e11123370e0d1b03" -H 'content-type: application/json' -d '{"page_no":"1","page_size":"20"}'

(6)JAVA 调用示例:

        Token token = new Token("3f2532a2da35c1da0109e80f8668b795");
        DefaultYZClient yzClient = new DefaultYZClient();
        YouzanMultistoreOfflineSearch youzanMultistoreOfflineSearch = new YouzanMultistoreOfflineSearch();
        //创建参数对象,并设置参数
        YouzanMultistoreOfflineSearchParams youzanMultistoreOfflineSearchParams = new YouzanMultistoreOfflineSearchParams();
        youzanMultistoreOfflineSearchParams.setPageNo(1);
        youzanMultistoreOfflineSearchParams.setPageSize(20);
        youzanMultistoreOfflineSearch.setAPIParams(youzanMultistoreOfflineSearchParams);
        try {
        YouzanMultistoreOfflineSearchResult result = yzClient.invoke(youzanMultistoreOfflineSearch, token, YouzanMultistoreOfflineSearchResult.class);
            System.out.println(JSON.toJSON(result));
        } catch (SDKException n) {
            n.printStackTrace();
        }
    }
}

——通过哪个接口可以查看指定网点的详细信息?
(1)获取网点详情:youzan.multistore.offline.get.3.0.0
(2)链接地址:https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/185
(3)重要字段说明:
》》id:网点 ID,网点唯一标识,可通过接口https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/183 获取;
(4)调用格式,通过(2)中链接访问后:
image.png 
(5)HTTP 调用示例:

curl -X POST "https://open.youzanyun.com/api/youzan.multistore.offline.get/3.0.0?access_token=c3220121ae0fc6c4e11123370e0d1b03" -H 'content-type: application/json' -d '{"id":"453456"}'

(6)JAVA 调用示例:
     

       Token token = new Token("3f2532a2da35c1da0109e80f8668b795");
       DefaultYZClient yzClient = new DefaultYZClient();
       YouzanMultistoreOfflineGet youzanMultistoreOfflineGet = new YouzanMultistoreOfflineGet();
       //创建参数对象,并设置参数
        YouzanMultistoreOfflineGetParams youzanMultistoreOfflineGetParams = new YouzanMultistoreOfflineGetParams();
        youzanMultistoreOfflineGetParams.setId(299932);
        youzanMultistoreOfflineGet.setAPIParams(youzanMultistoreOfflineGetParams);
        try {
        YouzanMultistoreOfflineGetResult result = yzClient.invoke(youzanMultistoreOfflineGet, token, YouzanMultistoreOfflineGetResult.class);
            System.out.println(JSON.toJSON(result));
        } catch (SDKException n) {
            n.printStackTrace();
        }
    }
}

——商家除了在后台通过编辑修改网点信息之外,通过哪个接口可以实现网点信息的更新?
(1)更新网点:youzan.multistore.offline.update.3.0.0
(2)链接地址:https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/127 
(3)重要字段说明:
》》id:网点 ID,网点唯一标识,可通过接口:https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/183 获取;
》》其他参数请参照创建网点接口模块的参数说明;
(4)调用格式,通过(2)中链接访问后: 
image.png
(5)JAVA 调用示例:

        Token token = new Token("3f2532a2da35c1da0109e80f8668b795");
        DefaultYZClient yzClient = new DefaultYZClient();
        YouzanMultistoreOfflineUpdate youzanMultistoreOfflineUpdate = new YouzanMultistoreOfflineUpdate();
        //创建参数对象,并设置参数
        YouzanMultistoreOfflineUpdateParams youzanMultistoreOfflineUpdateParams = new YouzanMultistoreOfflineUpdateParams();
        youzanMultistoreOfflineUpdateParams.setCity("上海市");
        youzanMultistoreOfflineUpdateParams.setProvince("上海市");
        youzanMultistoreOfflineUpdateParams.setPhone1("0572");
        youzanMultistoreOfflineUpdateParams.setPhone2("20948893");
        youzanMultistoreOfflineUpdateParams.setAddress("淮海路3345号");
        youzanMultistoreOfflineUpdateParams.setArea("黄浦区");
        youzanMultistoreOfflineUpdateParams.setDescription("淮海路1号店");
        youzanMultistoreOfflineUpdateParams.setIsSelfFetch(1);
        youzanMultistoreOfflineUpdateParams.setIsStore(1);
        youzanMultistoreOfflineUpdateParams.setLat("208:1092");
        youzanMultistoreOfflineUpdateParams.setLng("20:2984");
        youzanMultistoreOfflineUpdateParams.setImage("https://c-ssl.duitang.com/uploads/item/201409/08/20140908155026_RdUwH.thumb.1200_0.jpeg");
        youzanMultistoreOfflineUpdateParams.setCountyId("20090");
        youzanMultistoreOfflineUpdateParams.setId(456763);
        youzanMultistoreOfflineUpdate.setAPIParams(youzanMultistoreOfflineUpdateParams);
        try {
        YouzanMultistoreOfflineUpdateResult result = yzClient.invoke(youzanMultistoreOfflineUpdate, token, YouzanMultistoreOfflineUpdateResult.class);
            System.out.println(JSON.toJSON(result));
        } catch (SDKException n) {
            n.printStackTrace();
        }
    }
}

3、商品关联网点场景

场景描述:商家在微商城添加商品之后,需要将商品分配到对应的网点出售,如何在微商城给各个网点分配商品?
——在给网点分配商品之前,首先需要开启多网点功能;微商城后台 - 营销 - 配套工具 - 多网点模块,将多网点插件功能开启即可; 
image.png
——开启多网点插件后,在对应网点的右侧,点击“商品管理”即可将对应商品分配给这个网点,也可以理解为该网点支持这个商品的某种配送方式后,即可在该网点出售该商品;  
image.png
——通过哪个接口可以快速的完成上述操作,完成商品和网点的关联?
(1)更新网点商品配送方式:youzan.multistore.goods.delivery.update.3.0.0
(2)链接地址:https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/121
(3)重要字段说明:
》》offline_id:网点 ID,可以通过接口https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/183 获取;
》》settings:商品配送方式,json 字符串,传参格式如下:

{
“335438058":{
“express":1,
“local_delivery":0,
“self_fetch":0
}}

其中 335438058 为商品 ID, express 为快递;local_delivery 为同城送;self_fetch 为到店自提;1 为开启,0 为关闭;
(4)调用格式说明,通过(2)中链接访问后:
image.png 
(5)HTTP 调用示例:

curl -X POST "https://open.youzanyun.com/api/youzan.multistore.goods.delivery.update/3.0.0?access_token=c3220121ae0fc6c4e11123370e0d1b03" -H 'content-type: application/json' -d '{"settings":{"335438058":{"express":1,"local_delivery":0,"self_fetch":0}},"offline_id":"345432"}'

(6)JAVA 调用示例:

        Token token = new Token("3f2532a2da35c1da0109e80f8668b795");
        DefaultYZClient yzClient = new DefaultYZClient();
        YouzanMultistoreGoodsDeliveryUpdate youzanMultistoreGoodsDeliveryUpdate = new YouzanMultistoreGoodsDeliveryUpdate();
        //创建参数对象,并设置参数
        YouzanMultistoreGoodsDeliveryUpdateParams youzanMultistoreGoodsDeliveryUpdateParams = new YouzanMultistoreGoodsDeliveryUpdateParams();
        youzanMultistoreGoodsDeliveryUpdateParams.setOfflineId(5889822L);
        youzanMultistoreGoodsDeliveryUpdateParams.setSettings(“335438058\":{\"express\":1,\"local_delivery\":0,\"self_fetch\":0}}");
        youzanMultistoreGoodsDeliveryUpdate.setAPIParams(youzanMultistoreGoodsDeliveryUpdateParams);
        try {
        YouzanMultistoreGoodsDeliveryUpdateResult result = yzClient.invoke(youzanMultistoreGoodsDeliveryUpdate, token, YouzanMultistoreGoodsDeliveryUpdateResult.class);
            System.out.println(JSON.toJSON(result));
        } catch (SDKException n) {
            n.printStackTrace();
        }
    }
}

——除了微商城后台查看商品在某个网点支持的配送方式之外,通过哪个接口可以查询某个商品在某网点支持的配送方式?
(1)获取某个网点单个商品的配送方式:youzan.multistore.goods.delivery.get.3.0.0
(2)链接地址:https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/175
(3)重要字段说明:
》》num_iid:商品 ID,可通过接口:youzan.items.onsale.get.3.0.0;
链接:https://doc.youzanyun.com/doc#/content/API/1-299/detail/api/0/45批量获取;通过接口创建商品时也会返回商品 ID;
》》offline_id:网点 ID,可以通过接口:youzan.multistore.offline.search.3.0.0
链接:https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/183获取;
(4)调用格式,通过(2)中链接访问后: 
image.png
(5)HTTP 调用示例:

curl -X POST "https://open.youzanyun.com/api/youzan.multistore.goods.delivery.get/3.0.0?access_token=c3220121ae0fc6c4e11123370e0d1b03" -H 'content-type: application/json' -d '{"offline_id":"453456","num_iid":"5676564"}'

(6)JAVA 调用示例:

        Token token = new Token("3f2532a2da35c1da0109e80f8668b795");
        DefaultYZClient yzClient = new DefaultYZClient();
        YouzanMultistoreGoodsDeliveryGet youzanMultistoreGoodsDeliveryGet = new YouzanMultistoreGoodsDeliveryGet();
        //创建参数对象,并设置参数
        YouzanMultistoreGoodsDeliveryGetParams youzanMultistoreGoodsDeliveryGetParams = new YouzanMultistoreGoodsDeliveryGetParams();
        youzanMultistoreGoodsDeliveryGetParams.setOfflineId(453456);
        youzanMultistoreGoodsDeliveryGetParams.setNumIid(5676564);
        youzanMultistoreGoodsDeliveryGet.setAPIParams(youzanMultistoreGoodsDeliveryGetParams);
        try {
        YouzanMultistoreGoodsDeliveryGetResult result = yzClient.invoke(youzanMultistoreGoodsDeliveryGet, token, YouzanMultistoreGoodsDeliveryGetResult.class);
            System.out.println(JSON.toJSON(result));
        } catch (SDKException n) {
            n.printStackTrace();
        }
    }
}

——通过哪个接口可以批量的获取到某个网点中所有支持配送的商品的配送方式?
(1)获取某个网点所有可配送商品的配送方式:youzan.multistore.goods.delivery.list.3.0.0
(2)链接地址https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/128
(3)重要字段说明:
》》offline_id:网点 ID,可以通过接口:https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/183获取;
》》其他说明:如果某个商品在该网点中没有开启任何配送方式,则接口不会返回该商品信息;
(4)调用格式,通过(2)中链接访问后: 
image.png
(5)HTTP 调用示例:

curl -X POST "https://open.youzanyun.com/api/youzan.multistore.goods.delivery.list/3.0.0?access_token=c3220121ae0fc6c4e11123370e0d1b03" -H 'content-type: application/json' -d '{"offline_id":"453456"}'

(6)JAVA 调用示例:

        Token token = new Token("3f2532a2da35c1da0109e80f8668b795");
        DefaultYZClient yzClient = new DefaultYZClient();
        YouzanMultistoreGoodsDeliveryList youzanMultistoreGoodsDeliveryList = new YouzanMultistoreGoodsDeliveryList();
        //创建参数对象,并设置参数
        YouzanMultistoreGoodsDeliveryListParams youzanMultistoreGoodsDeliveryListParams = new YouzanMultistoreGoodsDeliveryListParams();
        youzanMultistoreGoodsDeliveryListParams.setOfflineId(453456);
        youzanMultistoreGoodsDeliveryList.setAPIParams(youzanMultistoreGoodsDeliveryListParams);
        try {
            YouzanMultistoreGoodsDeliveryListResult result = yzClient.invoke(youzanMultistoreGoodsDeliveryList, token, YouzanMultistoreGoodsDeliveryListResult.class);
            System.out.println(JSON.toJSON(result));
        } catch (SDKException n) {
            n.printStackTrace();
        }
    }
}

4、网点独立库存管理场景

场景描述:商家拥有多家线下门店,在微商城使用了多网点功能,需要对每家门店的库存单独进行管理,各个门店之间的商品库存互不影响;此场景除了启用多网点插件功能之外,还需要开启独立库存功能,说明如下;
——微商城后台 - 营销 - 配套工具 - 多网点 - 功能设置中,勾选开启独立库存功能;
image.png 
——开启独立库存后,该网点中的商品的库存默认为 0,所以需要在网点的“商品管理”中配置库存,否则该商品在网点中显示为售罄,无法购买; 
image.png
image.png
image.png
——在开启了独立库存功能的前提下,通过哪个接口可以设置商品在某个网点中的独立库存数量? 
(1)更新网点商品 SKU:youzan.multistore.goods.sku.update.3.0.0 
(2)链接地址:https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/125
(3)重要字段说明:
》》num_iid:商品 ID,可通过接口https://doc.youzanyun.com/doc#/content/API/1-299/detail/api/0/45 批量获取;通过接口创建商品时也会返回商品 ID;
》》offline_id:网点 ID,可以通过接:https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/183 获取;
》》price:价格,商品的价格,如果不传,则代表不对商品的价格进行更新;
》》quantity:商品总库存,当商品没有 SKU 时此参数才有效;当商品有 SKU 的时候,无需单独设置该参数的值,总库存会自动按照所有 SKU 库存之和进行计算;
》》skus_with_json:商品 SKU 信息的 JSON 字符串,传参格式如下:

[{
“sku_property":{
“颜色":"白色",
“尺寸":"M"},
“sku_price":1.0,
“sku_quantity":16,
“sku_outer_id":"1702210201",
“sku_id":36149753},
{
“sku_property":{
“颜色":"白色",
“尺寸":"S"},
“sku_price":1.0,
“sku_quantity":18,
“sku_outer_id":"1702210202",
“sku_id":36149754
}]

其中 sku_property 是 k:v;k:v 组合; sku_quantity 是 sku 库存数量; sku_price 是 sku 价格; sku_outer_id 是 sku 商家编码; sku_id 是 sku 的 id; 网点商品含 sku 时,sku_id 不能为空;
(4)调用格式,通过(2)中链接访问后:
image.png 
(5)HTTP 调用示例:

curl -X POST "https://open.youzanyun.com/api/youzan.multistore.goods.sku.update/3.0.0?access_token=c3220121ae0fc6c4e11123370e0d1b03" -H 'content-type: application/json' -d '{"offline_id":"453456","num_iid":"5676564","price":"20","skus_with_json":[{"sku_property":{"颜色":"白色","尺寸":"M"},"sku_price":1.0,"sku_quantity":16,"sku_outer_id":"1702210201","sku_id":36149753},{"sku_property":{"颜色":"白色","尺寸":"S"},"sku_price":1.0,"sku_quantity":18,"sku_outer_id":"1702210202","sku_id":36149754}]}'

(6)JAVA 调用示例:

    Token token = new Token("3f2532a2da35c1da0109e80f8668b795");
    DefaultYZClient yzClient = new DefaultYZClient();
    YouzanMultistoreGoodsSkuUpdate youzanMultistoreGoodsSkuUpdate = new YouzanMultistoreGoodsSkuUpdate();
    //创建参数对象,并设置参数
    YouzanMultistoreGoodsSkuUpdateParams youzanMultistoreGoodsSkuUpdateParams = new YouzanMultistoreGoodsSkuUpdateParams();
    youzanMultistoreGoodsSkuUpdateParams.setOfflineId(453456);
    youzanMultistoreGoodsSkuUpdateParams.setNumIid(5676564);
    youzanMultistoreGoodsSkuUpdateParams.setSkusWithJson("[{\"sku_property\":{\"颜色\":\"白色\",\"尺寸\":\"M\"},\"sku_price\":1.0,\"sku_quantity\":16,\"sku_outer_id\":\"1702210201\",\"sku_id\":36149753},{\"sku_property\":{\"颜色\":\"白色\",\"尺寸\":\"S\"},\"sku_price\":1.0,\"sku_quantity\":18,\"sku_outer_id\":\"1702210202\",\"sku_id\":36149754}]");
    youzanMultistoreGoodsSkuUpdateParams.setPrice("20");
    youzanMultistoreGoodsSkuUpdate.setAPIParams(youzanMultistoreGoodsSkuUpdateParams);
    try {
    YouzanMultistoreGoodsSkuUpdateResult result = yzClient.invoke(youzanMultistoreGoodsSkuUpdate, token, YouzanMultistoreGoodsSkuUpdateResult.class);
        System.out.println(JSON.toJSON(result));
    } catch (SDKException n) {
        n.printStackTrace();
    }
}

——通过哪个接口可以查询某个网点下某个商品的 SKU 信息?
(1)获取网点商品 SKU:youzan.multistore.goods.sku.get
(2)接口链接:https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/123
(3)重要字段说明:
》》num_iid:商品 ID,可通过接https://doc.youzanyun.com/doc#/content/API/1-299/detail/api/0/45 批量获取;通过接口创建商品时也会返回商品 ID;
》》offline_id:网点 ID,可以通过接口https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/183  获取;
 
(4)调用格式,通过(2)中链接访问后:
image.png
(5)HTTP 调用示例:

curl -X POST "https://open.youzanyun.com/api/youzan.multistore.goods.sku.get/3.0.0?access_token=c3220121ae0fc6c4e11123370e0d1b03" -H 'content-type: application/json' -d '{"offline_id":"453456","num_iid":"5676564"}'

(6)JAVA 调用示例:

        Token token = new Token("3f2532a2da35c1da0109e80f8668b795");
        DefaultYZClient yzClient = new DefaultYZClient();
        YouzanMultistoreGoodsSkuGet youzanMultistoreGoodsSkuGet = new YouzanMultistoreGoodsSkuGet();
        //创建参数对象,并设置参数
        YouzanMultistoreGoodsSkuGetParams youzanMultistoreGoodsSkuGetParams = new YouzanMultistoreGoodsSkuGetParams();
        youzanMultistoreGoodsSkuGetParams.setOfflineId(453456);
        youzanMultistoreGoodsSkuGetParams.setNumIid(5676564);
        youzanMultistoreGoodsSkuGet.setAPIParams(youzanMultistoreGoodsSkuGetParams);
        try {
        YouzanMultistoreGoodsSkuGetResult result = yzClient.invoke(youzanMultistoreGoodsSkuGet, token, YouzanMultistoreGoodsSkuGetResult.class);
            System.out.println(JSON.toJSON(result));
        } catch (SDKException n) {
            n.printStackTrace();
        }
        
    }
}

5、网点订单对接场景

场景描述:微商城开启多网点功能之后,用户可能在任意一个网点下单;外部系统在对接这些订单信息时,需要能够区分出订单是属于哪个网点的,以便于做出更准确的数据分析。
——微商城后台查看订单时,在哪个地方能区分出该订单是归属于哪个网点的?微商城后台 - 订单 - 所有订单中,点击订单右上角的订单详情,即可在详情中查看订单归属的网点信息;
image.png  
——通过哪个接口可以查询到订单所归属的网点信息?
(1)获取单笔交易的信息:youzan.trade.get.4.0.0
(2)链接地址:https://doc.youzanyun.com/doc#/content/API/1-305/detail/api/0/120
(3)重要字段说明:
》》tid:订单号,可以从微商城后台订单列表中看到,也可以通过接口:youzan.trades.sold.get.4.0.1
链接:https://doc.youzanyun.com/doc#/content/API/1-305/detail/api/0/638批量获取;
》》在响应字段中,offline_id 即为网点的 ID,可以通过网点 ID 获取,接口:youzan.multistore.offline.search.3.0.0
链接:https://doc.youzanyun.com/doc#/content/API/1-356/detail/api/0/183查询网点详情;
(4)调用格式,通过(2)中链接访问后: 
image.png
(5)HTTP 调用示例:

curl -X POST "https://open.youzanyun.com/api/youzan.trade.get/4.0.0?access_token=c3220121ae0fc6c4e11123370e0d1b03" -H 'content-type: application/json' -d '{"tid":"E20191028214459086200027"}'

(6)JAVA 调用示例:

Token token = new Token("b49db9431dd9947ad8f4ab1a5770042");
DefaultYZClient yzClient = new DefaultYZClient();
YouzanTradeGet youzanTradeGet = new YouzanTradeGet();
//创建参数对象,并设置参数
YouzanTradeGetParams youzanTradeGetParams = new YouzanTradeGetParams();
String tid = new String("E20190921153115076000025");
youzanTradeGetParams.setTid("E20190921153115076000025");
youzanTradeGet.setAPIParams(youzanTradeGetParams);
try {
    YouzanTradeGetResult result = yzClient.invoke(youzanTradeGet, token, YouzanTradeGetResult.class);
    System.out.println(JSON.toJSON(result));
} catch (SDKException n) {
    n.printStackTrace();
}

(7)在响应字段中,从交易基础信息结构体 StructurizationTradeOrderInfo—交易基础信息 StructurizationOrderInfoDetail 中即可看到网点 ID:offline_id;
——通过接口获取订单信息虽然方便,但是实时性不太好,需要商家定时、主动的来调取接口;如何能实现有赞产生订单即可实时的由有赞方推送给商家系统?
(1)对接有赞消息推送服务,配置交易消息 V3 相关推送;消息推送介绍https://doc.youzanyun.com/doc#/content/27027/27081
(2)商家登录有赞云(https://diy.youzanyun.com/login ),进入有赞云控制台,在有赞云控制台 - 消息推送配置中,将推送服务置为打开状态,并填写接收消息推送的服务地址;
image.png
 
(3)在下面推送配置中,勾选交易消息 V3 里的交易创建 / 买家付款等消息即可实时接收订单消息; 

image.png

三、使用 API 接口调试工具排查问题

1. 使用 Postman 接口调试工具

调用有赞 API 接口出现问题时,可以使用 Postman 接口调试工具对调用参数进行检查,以此来确认是否是调用参数的问题。
测试工具调用示例:获取网点详情接口:youzan.multistore.offline.get.3.0.0
 image.png
   

注意:
有赞云的接口调用统一协议 HTTPS 进行传输,请求使用 post+json 的方式,请求 token 放 url 请求参数里,接口的请求参数放请求的 body 里。