zzxworld

如何对接 Amazon SP-API 卖家接口的报表功能

几个月前完成亚马逊卖家产品发布接口的功能对接以后,就基本没怎么再折腾亚马逊的接口功能。最近突然冒出个需求:需要获取 FBA 发货产品的可用库存情况。通过一番了解,发现这要用到亚马逊 SP-API 的报表接口。借这个机会,来研究下该如何使用亚马逊的报表接口。

接口介绍

亚马逊的报表接口提供了非常多类型的数据。订单,退货信息,库存,分析数据等等……。具体可以参考下面的报表类型文档:

不过亚马逊这报表接口,在处理形式上和常规流程的接口有点不太一样。通常来说,我调用什么接口,平台直接给我数据就结束了。调用亚马逊的报表数据不是这样,需要先请求创建报表数据,然后等待创建完成,最后再通过获取报表的接口得到一个访问地址,通过此地址才能拿到报表数据。可以把这个过程理解为一个异步的处理过程。

而拿到的报表数据根据报表类型,格式可能也会不太一样,有些是以制表符分割的文本数据,有些是以逗号分隔的 CSV 格式,包括 XML 格式,或是 Excel 格式等。在后续的数据处理环节需要注意。

对接流程

通过以上介绍,可以把亚马逊的报表接口对接流程分为三步:

  1. 请求创建报表。
  2. 查询报表状态并获取报表文档 ID。
  3. 获取报表文档链接并下载报表数据。

具体流程图如下:

Screenshot.png Amazon 报表处理流程图

接口操作层面,先通过 createReport 接口发起一个报表创建请求。它会返回一个名为 reportId 的报表 ID。

有了报表 ID,就可以通过调用 getReport 接口查询报表处理状态和报表文档 ID 信息。报表状态字段名为 processingStatus,它有以下几种状态值:

  • CANCELLED: 表示被取消。
  • DONE: 表示完成。
  • FATAL: 表示发生错误已中止处理。
  • IN_PROGRESS: 表示正在处理中。
  • IN_QUEUE: 表示还在处理队列中。

以上状态,只有为 DONE 时报表数据才可用。接口中会返回 reportDocumentId 字段,这是获取报表数据要用的报表文档 ID。

使用报表文档 ID 字段调用 getReportDocument 接口,返回信息中会包含一个 url 字段,这就是报表数据最终的链接地址。通过 HTTP 请求此地址就可以得到报表数据。需要注意,此地址 5 分钟后过期。

一些建议

在获取报表时,报表完成处理的时间可能会不太一样。这步可以通过轮询的方式来处理,比如通过 do...while 循环语句搭配 sleep 函数,暂停几秒后再去请求一次接口,直到报表返回 DONE。但也有可能会返回 FATAL,返回 FATAL 意味着本次的报表流程已经不再可用,可以放弃重来了。另外报表接口都有限流处理,需要注意请求频率。

另外对于一些周期性的报表获取需求(比如我每天都定时需要请求一次 FBA 库存报表),与其每次临时去请求并等待生成报表,不如调用 createReportSchedule 接口创建报表生成计划。然后配合 getReports 接口去获取已经生成好的报表列表,再通过获取报表文档数据去拿最终的报表数据。