7

私の eBay インテグレーションは、何ヶ月も正常に動作した後、壊れてしまいました。これがバグなのか、それとも eBay 側の問題なのかはわかりません。

私の買い手は、2 つの異なる商品の取引を 2 回行い、送料を節約するためにそれらをまとめました。これはすべて、ほんの数分で起こりました。

これにより、次の結果が得られました。

  • 新しい販売記録が作成されました (ちなみに、販売者マネージャーには表示されません)
  • OrderId結合された注文用に新規作成されました。2 つのトランザクションが含まれています (予想どおり)。これOrderIdは、元の 2 つの注文と結合された注文に割り当てられました (予想外です!)。
  • へのコールで 3 つのオーダーが返されましたGetOrders。すべて同じOrderId値です
  • 返されるCreatedTimeon eachOrderTypeは、最新の注文が最新の時間を持つため、それぞれ異なります(予想どおり)。

私が理解しようとしているのは、3 つの注文すべてを出荷しないようにするにはどうすればよいかということです。私のコードがこれらの注文をディクショナリに入れようとしていなかったら、重複したOrderId値が返されていることさえ知らなかったでしょう。

注文レコードが別の注文に結合されたことを示すプロパティがどこかにあることを願っていますが、見つかりません。

注文時を見て最新のものを選ぶべきですか?または、その後結合されたトランザクションを検索結果から除外する方法はありますか。

4

3 に答える 3

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();
于 2012-09-21T04:28:30.650 に答える
1

eBay の注文は、バイヤーがオークションに勝つなどの購入を約束したときに作成されるようです。そのため、彼らが支払いをしようとしているときに、これらの注文をまとめて、トランザクションで別の注文を作成することができます。私も同じ問題を抱えています。完全な注文を取得するためだけに注文ステータスを渡すとどうなるでしょうか?

API に関する eBay による優れたプレゼンテーションhttps://youtu.be/n4UDGrO6H_g?t=1111

于 2021-08-21T09:22:09.223 に答える
1

最新の注文が結合された注文ノードを持つものであることを保証するものではありません。私の経験では、後の注文は前の注文の仮の品目に過ぎないことがありました。これについて eBay のサポートに数え切れないほど報告しましたが、彼らはすぐに修正するとしか言いません。

今のところ私の解決策は、GetTransactionDetails API を使用して注文の PayPal トランザクションと比較することです。PayPal トランザクションには、結合された注文レコードが含まれているはずだと思いました。私がしたことは、ebay の項目 ({ItemID:Quantity}) のマップを作成し、paypal トランザクションの項目 ({Number:Quantity}) のマップを作成してから、この 2 つを参照として PayPal トランザクション マップと比較しました。eBay 注文ノードがペイパル トランザクションと一致しない場合は、それを無視して、結合された注文が満たされるまで次の注文ノードに進みます。場合によっては、注文レコードが結合されたものが GetOrdersResponse の注文ノードの最初に来ることがあるので、検出された場合は次のものを無視してください。私が助けてくれることを願っています。

于 2015-03-31T01:40:47.593 に答える