1. API 对比

MWS操作SP-API操作简短说明
CreateInboundShipmentPlan

createInboundShipmentPlan

返回创建 入库货件所需的信息。
CreateInboundShipment

createInboundShipment

创建入库货件。
UpdateInboundShipment

updateInboundShipment

更新现有入库货件。
PutTransportContent

putTransportDetails

向亚马逊发送入库货件的运输信息。
EstimateTransportRequest

estimateTransport

请求入库货件的预计运费。
GetTransportContent

getTransportDetails

返回入库货件的当前运输信息。
ConfirmTransportRequest

confirmTransport

确认您接受亚马逊合作承运人的预计运费,并请求亚马逊合作承运人配送您的入库货件。
VoidTransportRequest

voidTransport

取消之前确认的使用亚马逊合作承运人配送入库货件的请求。
GetPackageLabels

getLabels

返回用于打印入库货件包裹标签的 PDF 文档数据。
GetBillOfLading

getBillOfLading

返回用于打印入库货件提单的 PDF 文档数据。
ListInboundShipments

getShipments

根据您指定的条件返回入库货件列表
ListInboundShipmentsByNextToken使用 NextToken 参数返回下一页入库货件。
ListInboundShipmentItems

getShipmentItems

getShipmentItemsByShipmentId

返回指定入库货件的商品列表或在指定时间段内更新的商品列表。
ListInboundShipmentItemsByNextToken使用 NextToken 参数返回下一页入库货件商品。
GetServiceStatus返回 “配送入库货件 API”部分 的运行状态。
getInboundGuidance
getPreorderInfo
confirmPreorder
getPrepInstructions

2. MWS 流程

  1. 步骤 1 - 创建商品信息
  2. 步骤 2 - 创建一个入库货件计划
  3. 步骤 3 - 准备商品以进行运输
  4. 步骤 4 - 创建一个入库货件
  5. 步骤 5 - 使用亚马逊合作承运人配送入库货件(可选)
  6. 步骤 6 - 向亚马逊发送货件追踪编码
  7. 步骤 7 - 为您的货件包装和贴标
  8. 步骤 8 - 将您的货件发送至亚马逊配送网络
  9. 步骤 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秒后会失效) 

Logo

亚马逊云科技开发者 Build On 是由亚马逊团队策划、开发者社区联合打造的动手实操系列活动。

更多推荐