淘宝同步订单是指卖家在淘宝平台上购买了第三方营销管理软件,该软件具备订单管理功能,可以实现与淘宝订单数据的同步。
订单同步包括两个主要步骤,即初始化和增量获取。
同步回来的是在过去三个月内的所有在线订单,这一过程需要相当长的时间。
通常情况下,增量获取是将淘宝上发生了变化的订单同步回来,这个过程通常需要较短的时间。
卖家的核心数据是订单,很多日常工作都是围绕订单展开的,基本功能就是要确保订单能够实时、完整地展示在卖家面前。
因为API请求受网络环境影响,可能会面临网络不稳定和同步时间长的情况,所以应用必须将淘宝订单数据同步到本地。
我应该如何处理异常情况呢?
通常情况下,同步订单会采用多线程处理。由于API请求对APP有频率限制,所以在设置线程池大小时,需要根据TOP允许的API调用频率来进行设定,以避免限流导致应用长时间无法调用API。
应用线程在遇到API返回的ISP类型错误或网络连接错误时,应当在短暂休眠后进行自动重试。而当API返回ISV类型的错误时,应用程序需记录日志以备将来排查问题,并且不应进行重试操作。
问题出在性能上。
获取卖家已售订单的三个月记录,可使用taobao.trades.sold.get接口。
使用参数use_has_next=true进行分页查询可以避免每次API请求对淘宝数据库执行count(*)操作,从而显著提高速度和稳定性。
(b) 通常情况下,这个问题是非常复杂的,需要进行深入的研究和分析,才能找到解决方案。
由于订单接口是按照创建时间进行过滤的,而创建时间是不可更改的,因此即使向后翻页也不会漏掉任何订单。因此可以省略第一步的count(*),而直接使用参数use_has_next=true来进行分页获取,直到返回结果中has_next=false时停止翻页。
把这个问题放在后面,我们先讨论其他重要的事情。
建议如果接口返回的字段不符合应用的要求,强烈建议仅获取字段tid,并随后通过taobao.trade.fullinfo.get接口获取订单详情。
建议由于卖家三个月订单量较大,可将三个月的订单按天进行切分获取,以减少单次请求对淘宝数据库记录的扫描量,从而提高效率。
获取增量订单的API接口为taobao.trades.sold.increment.get。
使用参数use_has_next=true的分页方式能够避免每次API请求时对淘宝数据库产生的count(*),从而大幅提高速度和稳定性。
b) 为了避免漏单,需要按照修改时间从后往前翻页获取增量订单接口,因为修改时间是可变的,并且接口是用修改时间过滤的。
在首次API请求中,必须采用use_has_next=false的方式来计算订单总数并得出总页数,然后再将use_has_next=true设置为终止订单统计,这样才能从后往前翻页。因为要进行后往前翻页,所以必须知道最后一页。
对于问题c),我们需要对现有的流程进行彻底的重构。
建议如果接口返回的字段不符合应用的需求,强烈建议只请求获取fields=tid这一个字段,然后再利用taobao.trade.fullinfo.get接口获取订单详情。
建议在使用taobao.trades.sold.get/taobao.trades.sold.increment.get接口只获取tid字段时,将page_size设置为最大值,以减少API请求次数并提升效率。而在获取多个字段时,可以根据自身的网络情况将page_size设置为50左右。