eBay GetOrders:如何区分合并订单和原始交易

Sim*_*ver 7 ebay-api

经过几个月的正常工作后,我的eBay集成才刚刚破解,我不确定它是否是一个错误.

我的买家进行了两笔不同商品的两笔交易,然后将它们合并以节省运费.所有这一切都发生在几分钟之内.

这有以下结果:

  • 创建新的销售记录(偶然不会出现在卖方经理中)
  • OrderId为组合订单创建的新内容.包含两个事务(如预期的那样).这OrderId被分配到原始的2个订单和合并的一个(不是预期!)
  • 三个订单回电话GetOrders.所有都具有相同的OrderId价值
  • CreatedTime每个OrderType返回的on对于每个返回的最新订单具有最新时间(如预期的那样).

我想知道的是我应该知道不发送所有3个订单.如果我的代码没有尝试将这些命令放入字典中,那么我甚至不知道OrderId返回了重复的值.

我希望有一个属性,表明订单记录被合并到另一个订单 - 但我找不到它.

我应该查看订单的时间并选择最近的订单吗?或者有没有办法排除随后从搜索结果中合并的交易.

Sim*_*ver 1

这是我的 C# 代码,用于检查这种性质的欺骗并仅返回最新订单。这里有很多断言检查,但它还没有崩溃——话又说回来,我不知道代码路径是否o.Count() != 1已经被击中。

        // raw orders coming back from eBay
        var orderArrayRaw = getTransactions.ApiResponse.OrderArray.ToArray();

        // processed list to remove dupes
        var orderArray = orderArrayRaw.ToArray().GroupBy(x => x.OrderID).Select(o =>
        {
            // single unique order
            if (o.Count() == 1)
            {
                return o.Single();
            }
            else
            {
                // get most recent
                var mostRecent = o.OrderByDescending(x => x.CreatedTime).First();

                // get all the transaction IDs in the non-most-recent
                var allTransactions = o.Except(new[] { mostRecent }).SelectMany(x => x.TransactionArray.ToArray().Select(t => t.TransactionID)).OrderBy(x => x).ToArray();

                var combinedTransactions = mostRecent.TransactionArray.ToArray().Select(x => x.TransactionID).OrderBy(x => x).ToArray();

                if (allTransactions.SequenceEqual(combinedTransactions))
                {
                    // ok!
                    return mostRecent;
                }
                else
                {
                    var dupes = orderArrayRaw.ToArray().GroupBy(x => x.OrderID).Where(x => x.Count() > 1);
                    var dupeIds = dupes.Select(x => x.Key).ToArray();

                    throw new ApplicationException("The following orders were returned more than once in the response " + string.Join(", ", dupeIds));
                }
            }


        }).ToArray();
Run Code Online (Sandbox Code Playgroud)