【问题标题】:eBay GetOrders : how to distinguish combined orders from original transactionseBay GetOrders:如何区分合并订单和原始交易
【发布时间】:2012-08-30 05:55:46
【问题描述】:

我的 eBay 集成在正常工作数月后刚刚中断,我不确定这是否是他们的错误。

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

结果如下:

  • 已创建新的销售记录(顺便说一句,它不会显示在卖家管理器中)
  • 为合并订单创建了新的OrderId。包含两个事务(如预期的那样)。这个OrderId 被分配给最初的 2 个订单和合并的一个(不是预期的!)
  • 三个订单返回到GetOrders。都具有相同的OrderId
  • 返回的每个 OrderType 上的 CreatedTime 各不相同,最近的订单具有最晚的时间(如预期的那样)。

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

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

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

【问题讨论】:

  • wierd - 我为此付出了赏金,它得到了 3 个赞,但没有答案
  • 你有任何关于这个问题的更新吗?
  • @SH 不 - 我最终只是查看时间并选择最新的:-/我几个月才吃过一次。我不确定我的买家究竟做了什么触发了这种行为。我假设你看到类似的东西? [添加我的代码作为答案]
  • 我遇到了同样的错误,我想知道如何处理它! ID不应该是唯一的吗?对我来说,这是另一个易趣的怪事:(
  • 看起来他们在 1 月下旬解决了这个问题,从这个日期开始就不再出错了

标签: ebay-api


【解决方案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();

【讨论】:

    【解决方案2】:

    不保证最新的订单是合并订单节点的订单。根据我的经验,后来的订单只是前一个订单的假设行项目。我们无数次向 ebay 的支持报告了这个问题,他们只说他们会尽快修复它。

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

    【讨论】:

      【解决方案3】:

      看起来 eBay 订单是在买家承诺购买(例如赢得拍卖)时创建的。因此,当他们即将付款时,他们可以将这些订单组合在一起,并通过交易创建另一个订单。我也有同样的问题,只是想如果我们传递订单状态只是为了检索完整的订单呢?

      eBay 关于 API https://youtu.be/n4UDGrO6H_g?t=1111 的精彩介绍

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-15
        • 2014-11-21
        • 1970-01-01
        相关资源
        最近更新 更多