Ebay api 易趣GetOrders:如何区分合并订单和原始交易

Ebay api 易趣GetOrders:如何区分合并订单和原始交易,ebay-api,Ebay Api,经过数月的正常工作,我的eBay集成刚刚中断,我不确定这是否是一个bug 我的买家对两种不同的商品进行了两次交易,然后将它们合并以节省运费。这一切发生在几分钟之内 结果如下: 创建了新的销售记录(顺便说一句,它没有显示在SellerManager中) 为组合订单创建新的OrderId。包含两个事务(如预期的那样)。此OrderId已分配给原始的2个订单和组合的一个订单(不应如此!) 调用GetOrders返回三个订单。它们都具有相同的OrderId值 返回的每个OrderType上的Creat

经过数月的正常工作,我的eBay集成刚刚中断,我不确定这是否是一个bug

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

结果如下:

  • 创建了新的销售记录(顺便说一句,它没有显示在SellerManager中)
  • 为组合订单创建新的
    OrderId
    。包含两个事务(如预期的那样)。此
    OrderId
    已分配给原始的2个订单和组合的一个订单(不应如此!)
  • 调用
    GetOrders
    返回三个订单。它们都具有相同的
    OrderId
  • 返回的每个
    OrderType
    上的
    CreatedTime
    对于每个具有最新时间(如预期)的最新订单是不同的
我想弄明白的是,我怎么知道不发所有3份订单。如果我的代码没有试图将这些订单放入字典,那么我甚至不知道返回了重复的
OrderId

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

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

这是我的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();

它不能保证最新的订单是具有组合订单节点的订单。根据我的经验,后一个订单只是前一个订单的假设行项目。我们曾无数次向易趣的技术支持部门报告过这件事,他们只是说他们很快就会解决


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

wierd-我悬赏了这件事,它得到了3张赞成票,但没有回答你有这个问题的最新消息吗?@SH没有-我只是看了看时间,选择了最新的:-/我每个月才有一次。我不确定我的买家到底是怎么引发这种行为的。我猜你看到了类似的东西?[添加我的代码作为答案]我刚刚遇到同样的错误,我想知道如何处理它!ID不应该是唯一的吗?对我来说,这是ebay的另一个奇怪之处:(看起来他们在一月底解决了这个问题,从今天起就再也没有出错了。)