对接亚马逊 SP-API(Amazon Selling Partner API) 第六章:Fulfillment Inbound 模块
API 对比MWS 流程SP-API 流程
1. API 对比
MWS操作 | SP-API操作 | 简短说明 |
---|---|---|
CreateInboundShipmentPlan | 返回创建 入库货件所需的信息。 | |
CreateInboundShipment | 创建入库货件。 | |
UpdateInboundShipment | 更新现有入库货件。 | |
PutTransportContent | 向亚马逊发送入库货件的运输信息。 | |
EstimateTransportRequest | 请求入库货件的预计运费。 | |
GetTransportContent | 返回入库货件的当前运输信息。 | |
ConfirmTransportRequest | 确认您接受亚马逊合作承运人的预计运费,并请求亚马逊合作承运人配送您的入库货件。 | |
VoidTransportRequest | 取消之前确认的使用亚马逊合作承运人配送入库货件的请求。 | |
GetPackageLabels | 返回用于打印入库货件包裹标签的 PDF 文档数据。 | |
GetBillOfLading | 返回用于打印入库货件提单的 PDF 文档数据。 | |
ListInboundShipments | 根据您指定的条件返回入库货件列表 | |
ListInboundShipmentsByNextToken | 使用 NextToken 参数返回下一页入库货件。 | |
ListInboundShipmentItems | 返回指定入库货件的商品列表或在指定时间段内更新的商品列表。 | |
ListInboundShipmentItemsByNextToken | 使用 NextToken 参数返回下一页入库货件商品。 | |
GetServiceStatus | 返回 “配送入库货件 API”部分 的运行状态。 | |
getInboundGuidance getPreorderInfo confirmPreorder getPrepInstructions |
2. MWS 流程
- 步骤 1 - 创建商品信息
- 步骤 2 - 创建一个入库货件计划
- 步骤 3 - 准备商品以进行运输
- 步骤 4 - 创建一个入库货件
- 步骤 5 - 使用亚马逊合作承运人配送入库货件(可选)
- 步骤 6 - 向亚马逊发送货件追踪编码
- 步骤 7 - 为您的货件包装和贴标
- 步骤 8 - 将您的货件发送至亚马逊配送网络
- 步骤 9 - 将您的货件标记为已发货
3. SP-API 流程
3.1. 创建货件计划:createInboundShipmentPlan
参照 MWS 流程 步骤 2 - 创建一个入库货件计划
备注:只创建货件计划是无法在亚马逊后台查询的,确认了货件计划才可以查得到。
public void createInboundShipmentPlanTest() throws ApiException {
CreateInboundShipmentPlanRequest body = new CreateInboundShipmentPlanRequest();
// Address
Address address = new Address();
address.setName("XXX");
address.setAddressLine1("XXX");
address.setCity("XXX");
address.setStateOrProvinceCode("XXX");
address.setCountryCode("CA");
address.setPostalCode("000000");
body.setShipFromAddress(address);
/*
* LabelPrepPreference 是您在 CreateInboundShipmentPlan 操作使用的一个关键参数。此参数指明了您将要发送至亚马逊物流的商品的标签准备首选项。
* 以下是 LabelPrepPreference 的有效值:
* SELLER_LABEL - 指明您将自行为每个需要商品标签的商品(不是无需贴标签的混杂库存中的商品)贴标。
* AMAZON_LABEL_ONLY - 亚马逊将为入库货件中需要标签的商品贴标。如果亚马逊确定没有成功对商品贴标所需的信息,入库货件计划不会包含该商品。
* AMAZON_LABEL_PREFERRED - 亚马逊将为入库货件中需要标签的商品贴标。如果亚马逊确定没有对商品成功贴标所需的信息, 入库货件计划会包含该商品,且卖家必须为其贴标。
* 注: 除非您注册了“亚马逊物流贴标服务”,否则 SELLER_LABEL 即为 LabelPrepPreference 的唯一有效值。“亚马逊物流贴标服务”不适用于印度 (IN)。
* */
body.setLabelPrepPreference(LabelPrepPreference.SELLER_LABEL);
// InboundShipmentPlanRequestItems
InboundShipmentPlanRequestItemList inboundShipmentPlanRequestItems = new InboundShipmentPlanRequestItemList();
InboundShipmentPlanRequestItem inboundShipmentPlanRequestItem = new InboundShipmentPlanRequestItem();
inboundShipmentPlanRequestItem.setSellerSKU("XXX");
inboundShipmentPlanRequestItem.setQuantity(1000);
inboundShipmentPlanRequestItems.add(inboundShipmentPlanRequestItem);
body.setInboundShipmentPlanRequestItems(inboundShipmentPlanRequestItems);
CreateInboundShipmentPlanResponse response = api.createInboundShipmentPlan(body);
}
题外: 分仓 --> 合仓
只创建了一个SKU的计划,却有两个 DestinationFulfillmentCenterId。
解决:(感谢阿科大佬)
备注:需要将账号默认库存配置设置成合仓。合仓的费用会非常贵!(运营立马掐灭了我修改配置想法..)
路径:Account Setting --> Fulfillment by Amazon --> Inbound Setting --> Inventory Placement Option --> Inventory Placement Service
配置完后先测试一下,如果解决了就没问题了。我修改完配置已经变成一个了。
不行的话,再执行下列操作(多个SKU的情况下需要用到)。
调用 getPrepInstructions 获取 PrepInstruction。(没有则为"NONE")
在 Item 中添加查询出来的参数。
// 避免分仓
PrepDetailsList prepDetails = new PrepDetailsList();
PrepDetails prepDetail = new PrepDetails();
prepDetail.setPrepInstruction(PrepInstruction.LABELING);
prepDetail.setPrepOwner(PrepOwner.SELLER);
prepDetails.add(prepDetail);
inboundShipmentPlanRequestItem.setPrepDetailsList(prepDetails);
BUG 1: Reason: XX State field must be two characters.
{
"errors": [
{
"code": "InvalidInput",
"message": " Reason: XX State field must be two characters.",
"details": ""
}
]
}
解决:
参数中 AddressLine 和 CountryCode 必须是一致的。不能 AddressLine 是CA地址,CountryCode 填US。
BUG 2: NOT_IN_PRODUCT_CATALOG
<Error>
<Type>Sender</Type>
<Code>InvalidRequestException</Code>
<Message>This operation may be partially successful, Please check the status. Reason: [Item(s) ineligible from being inbounded, with reason: NOT_IN_PRODUCT_CATALOG. Corresponding items for the error: [[FNSKU: XXX, MSKU: XXX]]].</Message>
</Error>
解决:
在亚马逊后台检查该产品是否为FBA发货
位置:后台 --> Inventory --> Manage FBA Inventory --> 相关SKU --> 配送类型更改为【所有】
3.2. 确认货件计划:createInboundShipment
参照 MWS 流程 步骤 4 - 创建一个入库货件
3.3. 上传资料(没账号测试了,等以后处理了在补充资料。如果有愿意提供账号的可以联系我!)
Feeds API 使用方式参照官方教程:Feeds API v2021-06-30 Use Case Guide
3.3.1. 上传纸箱内容
说明:上传 xml。
Feed Type: POST_FBA_INBOUND_CARTON_CONTENTS
3.3.2. 上传箱子尺寸
说明:上传 excel。
Feed Type: POST_FLAT_FILE_FROM_EXCEL_FBA_CREATE_CARTON_INFO(此类型为隐藏类型,一般人我不告诉他们的,且知且珍惜)
3.3. 发货:updateInboundShipment
参照 MWS 流程 步骤 9 - 将您的货件标记为已发货
3.4. 获取贴箱标:getLabels
备注:贴箱标是需要发给物流商的。
@Test
public void getLabelsTest() throws ApiException {
String shipmentId = "FBAAAAAAAA";
String pageType = "PackageLabel_Letter_2";
String labelType = "BARCODE_2D";
Integer numberOfPackages = null;
List<String> packageLabelsToPrint = null;
Integer numberOfPallets = null;
Integer pageSize = null;
Integer pageStartIndex = null;
GetLabelsResponse response = api.getLabels(shipmentId, pageType, labelType, numberOfPackages, packageLabelsToPrint, numberOfPallets, pageSize, pageStartIndex);
// TODO: test validations
}
然后就可以获取到一个下载的URL。(URL在15秒后会失效)
更多推荐
所有评论(0)