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

时间:2012-08-30 05:55:46

标签: ebay getorders

我的eBay集成在经过数月的正常工作后才破裂,我不确定它们是否是一个错误。

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

这有以下结果:

  • 创建了新的销售记录(偶然不会出现在卖方经理中)
  • 为合并订单创建的新OrderId。包含两个事务(如预期的那样)。此OrderId已分配给原始的2个订单和合并的(未预期!)
  • 通过致电GetOrders返回了三个订单。所有都具有相同的OrderId
  • 每个CreatedTime返回的OrderType对于每个具有最新时间的订单(如预期的那样)都不同。

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

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

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

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

它不保证最新订单是具有组合订单节点的订单。根据我的经验,后来的订单只是前一订单的假设订单项。我们曾多次报告ebay对此的支持,他们只是说他们很快就会修复它。

我现在的解决方案是使用GetTransactionDetails API与订单的PayPal事务进行比较。我假设PayPal交易应该有合并的订单记录。我做的是,我创建了一个ebay订单项地图({ItemID:Quantity})并创建了一个paypal交易行项目地图({Number:Quantity}),然后将这两个与paypal交易地图作为参考进行比较。如果ebay订单节点与paypal交易不匹配,则忽略它并继续下一个订单节点,直到满足组合订单的订单。有时,具有组合订单记录的订单记录首先出现在GetOrdersResponse的订单节点中,因此在检测到时忽略下一个订单节点。希望我帮忙。