一、引言
本篇主要介绍订单的同步和订单的发货,订单同步主要是方便我们管理订单,比如根据订单采购、操作订单发货等
二、思路
订单的同步计较简单,直接调用订单的接口,查询我们需要的订单。发货的思路和上传产品的流程是一样的,先创建FeedType一个类型为 POST_ORDER_FULFILLMENT_DATA 的 SubmitFeed,获取到一个 FeedSubmissionId,然后稍候通过另外一个接口传 FeedSubmissionId 查询发货结果
三、实现
1、同步订单
先调用listOrder接口获取订单的一些基本信息,然后调用listOrderItems获取订单的商品基本信息(这里可以通过订单商品的ASIN或者SKU获取具体商品详细信息,比如图片标题等)
列举一些listOrder接口的常用参数:
参数 | 描述 |
---|---|
CreatedAfter | 指定某一格式为 ISO 8601 的日期,用以选择在该日期之后(或当天)创建的订单。 |
OrderStatus | OrderStatus 值的列表。用来选择当前状态与您所指定的某个状态值相符的订单。 |
OrderStatus 值:
PendingAvailability
只有预订订单才有此状态。订单已生成,但是付款未授权且商品的发售日期是将来的某一天。订单尚不能进行发货。请注意:仅在日本 (JP),Preorder 才可能是一个 OrderType 值。
Pending
订单已生成,但是付款未授权。订单尚不能进行发货。请注意:对于 OrderType = Standard 的订单,初始的订单状态是 Pending。对于 OrderType = Preorder 的订单(仅适用于 JP),初始的订单状态是 PendingAvailability,当进入付款授权流程时,订单状态将变为 Pending。
Unshipped
付款已经过授权,订单已准备好进行发货,但订单中商品尚未发运。
PartiallyShipped
订单中的一个或多个(但并非全部)商品已经发货。
Shipped
订单中的所有商品均已发货。
InvoiceUnconfirmed
订单中的所有商品均已发货。但是卖家还没有向亚马逊确认已经向买家寄出发票。请注意:此参数仅适用于中国地区。
Canceled
订单已取消。
Unfulfillable
订单无法进行配送。该状态仅适用于通过亚马逊零售网站之外的渠道下达但由亚马逊进行配送的订单。
public List<Order> listOrders(Date searchDate) {
ListOrdersRequest request = new ListOrdersRequest();
request.setSellerId(sellerId);
request.setMWSAuthToken(awsAuthToken);
XMLGregorianCalendar createdAfter = MwsUtl.getDTF().newXMLGregorianCalendar();
//指定某一格式为 ISO 8601 的日期,用以选择在该日期之后(或当天)创建的订单
createdAfter.setYear(new BigInteger(year));
createdAfter.setMonth(Integer.valueOf(mon));
createdAfter.setDay(Integer.valueOf(day));
request.setCreatedAfter(createdAfter);
request.setMarketplaceId(MarketplaceId);
//想获取订单的状态PendingAvailability、Unshipped
request.setOrderStatus("Unshipped");
ListOrdersResponse response = getClient(awsAccount).listOrders(request);
if(response.isSetListOrdersResult()){
ListOrdersResult listOrdersResult = response.getListOrdersResult();
boolean hasNext = listOrdersResult.isSetNextToken();
String nextToken = listOrdersResult.getNextToken();
List<Order> orders = listOrdersResult.getOrders();
//此处可以循环处理是否有下一页的订单
return orders;
}
return null;
}
返回结果,这里只列举订单和订单商品示例结果。
订单返回示例:
<?xml version="1.0" encoding="utf-8"?>
<ListOrdersResponse
xmlns="https://mws.amazonservices.com/
Orders/2013-09-01">
<ListOrdersResult>
<NextToken>2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=</NextToken>
<LastUpdatedBefore>2013-09-25T18%3A10%3A21.687Z</LastUpdatedBefore>
<Orders>
<!-- 订单基本信息-->
<Order>
<AmazonOrderId>058-1233752-8214740</AmazonOrderId>
<PurchaseDate>2013-09-05T00%3A06%3A07.000Z</PurchaseDate>
<LastUpdateDate>2013-09-07T12%3A43%3A16.000Z</LastUpdateDate>
<OrderStatus>Unshipped</OrderStatus>
<OrderType>StandardOrder</OrderType>
<ShipServiceLevel>Std JP Kanto8</ShipServiceLevel>
<FulfillmentChannel>MFN</FulfillmentChannel>
<OrderTotal>
<CurrencyCode>JPY</CurrencyCode>
<Amount>1507.00</Amount>
</OrderTotal>
<!-- 订单买家地址,发货要用到-->
<ShippingAddress>
<Name>Jane Smith</Name>
<AddressLine1>1-2-10 Akasaka</AddressLine1>
<City>Tokyo</City>
<PostalCode>107-0053</PostalCode>
<Country>JP</Country>
</ShippingAddress>
<NumberOfItemsShipped>0</NumberOfItemsShipped>
<NumberOfItemsUnshipped>1</NumberOfItemsUnshipped>
<PaymentExecutionDetail>
<PaymentExecutionDetailItem>
<Payment>
<Amount>10.00</Amount>
<CurrencyCode>JPY</CurrencyCode>
</Payment>
<PaymentMethod>PointsAccount</PaymentMethod>
</PaymentExecutionDetailItem>
<PaymentExecutionDetailItem>
<Payment>
<Amount>317.00</Amount>
<CurrencyCode>JPY</CurrencyCode>
</Payment>
<PaymentMethod>GC</PaymentMethod>
</PaymentExecutionDetailItem>
<PaymentExecutionDetailItem>
<Payment>
<Amount>1180.00</Amount>
<CurrencyCode>JPY</CurrencyCode>
</Payment>
<PaymentMethod>COD</PaymentMethod>
</PaymentExecutionDetailItem>
</PaymentExecutionDetail>
<PaymentMethod>COD</PaymentMethod>
<MarketplaceId>ATVPDKIKX0DER</MarketplaceId>
<BuyerName>Jane Smith</BuyerName>
<BuyerEmail>[email protected]</BuyerEmail>
<ShipmentServiceLevelCategory>Standard
</ShipmentServiceLevelCategory>
</Order>
</Orders>
</ListOrdersResult>
<ResponseMetadata>
<RequestId>88faca76-b600-46d2-b53c-0c8c4533e43a</RequestId>
</ResponseMetadata>
</ListOrdersResponse>
订单商品返回示例:
<?xml version="1.0" encoding="utf-8"?>
<ListOrderItemsResponse
xmlns="https://mws.amazonservices.com
/Orders/2013-09-01">
<ListOrderItemsResult>
<NextToken>MRgZW55IGNhcm5hbCBwbGVhc3VyZS6=</NextToken>
<AmazonOrderId>058-1233752-8214740</AmazonOrderId>
<OrderItems>
<OrderItem>
<ASIN>BT0093TELA</ASIN>
<OrderItemId>68828574383266</OrderItemId>
<SellerSKU>CBA_OTF_1</SellerSKU>
<Title>Example item name</Title>
<QuantityOrdered>1</QuantityOrdered>
<QuantityShipped>1</QuantityShipped>
<ItemPrice>
<CurrencyCode>USD</CurrencyCode>
<Amount>25.99</Amount>
</ItemPrice>
<ShippingPrice>
<CurrencyCode>USD</CurrencyCode>
<Amount>1.26</Amount>
</ShippingPrice>
<ScheduledDeliveryEndDate>2013-09-09T01:30:00.000-06:00
</ScheduledDeliveryEndDate>
<ScheduledDeliveryStartDate>2013-09-071T02:00:00.000-06:00
</ScheduledDeliveryStartDate>
<CODFee>
<CurrencyCode>USD</CurrencyCode>
<Amount>10.00</Amount>
</CODFee>
<CODFeeDiscount>
<CurrencyCode>USD</CurrencyCode>
<Amount>1.00</Amount>
</CODFeeDiscount>
<GiftMessageText>For you!</GiftMessageText>
<GiftWrapPrice>
<CurrencyCode>USD</CurrencyCode>
<Amount>1.99</Amount>
</GiftWrapPrice>
<GiftWrapLevel>Classic</GiftWrapLevel>
</OrderItem>
<OrderItem>
<ASIN>BCTU1104UEFB</ASIN>
<OrderItemId>79039765272157</OrderItemId>
<SellerSKU>CBA_OTF_5</SellerSKU>
<Title>Example item name</Title>
<QuantityOrdered>2</QuantityOrdered>
<ItemPrice>
<CurrencyCode>USD</CurrencyCode>
<Amount>17.95</Amount>
</ItemPrice>
<PromotionIds>
<PromotionId>FREESHIP</PromotionId>
</PromotionIds>
<ConditionId>Used</ConditionId>
<ConditionSubtypeId>Mint</ConditionSubtypeId>
<ConditionNote>Example ConditionNote</ConditionNote>
</OrderItem>
</OrderItems>
</ListOrderItemsResult>
<ResponseMetadata>
<RequestId>88faca76-b600-46d2-b53c-0c8c4533e43a</RequestId>
</ResponseMetadata>
</ListOrderItemsResponse>
2、订单的发货
发货主要用到AmazonOrderId(亚马逊所定义的订单编码,格式为 3-7-7)和OrderItemId(亚马逊定义的订单商品识别号),一个订单可以发多次货,每次发货必须指定订单的商品,上传发货数据后还可以继续上传,也就是修改
直接看发货的xml参数:
<?xml version="1.0" encoding="UTF-8"?>
<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
<Header>
<DocumentVersion>1.01</DocumentVersion>
<MerchantIdentifier>ANYYVQX2F06ZA</MerchantIdentifier>
</Header>
<MessageType>OrderFulfillment</MessageType>
<Message>
<MessageID>1</MessageID>
<OperationType>Update</OperationType>
<OrderFulfillment>
<!-- 亚马逊订单号和发货时间-->
<AmazonOrderID>123-1234567-1234567</AmazonOrderID>
<FulfillmentDate>2020-12-26T08:42:24.562+08:00</FulfillmentDate>
<!-- 物流方式-->
<FulfillmentData>
<CarrierName>other</CarrierName>
<ShippingMethod>Standard</ShippingMethod>
<ShipperTrackingNumber>1234567</ShipperTrackingNumber>
</FulfillmentData>
<!-- 发货的商品识别号-->
<Item>
<AmazonOrderItemCode>68828574383266</AmazonOrderItemCode>
<Quantity>1</Quantity>
</Item>
</OrderFulfillment>
</Message>
</AmazonEnvelope>
四、总结
1、订单收件人涉及到亚马逊的PII权限,如果开发者帐号没有该权限,会导致订单的收件人信息不完整
2、订单商品的信息不能直接通过订单接口获取,需要通过ASIN或者SKU调用商品API的GetMatchingProductForId接口
3、订单接口返回的商品图片是75*75像素的,如http://ecx.images-amazon.com/images/I/51EEz05N2HL.SL75.jpg,如果想获取大图可以直接把地址的._SL75_去掉即可
总的来说,订单的处理相对来说比较简单,直接调用api接口就行,没有其他特殊处理。下一篇文章主要介绍亚马逊邮件拉取