2012-08-30 14 views
7

Moja integracja z eBay właśnie zepsuła się po miesiącach prawidłowej pracy i nie jestem pewien, czy jest to błąd, czy nie po ich zakończeniu.eBay GetOrders: jak odróżnić połączone zamówienia od oryginalnych transakcji

Mój kupujący dokonał 2 transakcji dwóch różnych przedmiotów, a następnie połączył je, aby zaoszczędzić na wysyłce. Wszystko to wydarzyło się w ciągu kilku minut.

ta miała następujący wynik:

  • Nowy rekord sprzedaży utworzony (która nawiasem mówiąc nie pojawi się w menedżerze sprzedającego)
  • New OrderId stworzony dla porządku kombinowanym. Zawiera dwie transakcje (zgodnie z oczekiwaniami). Ten OrderId został przypisany do oryginalnych 2 zamówień, a połączony (nieoczekiwany!)
  • Trzy zamówienia zwrócone podczas połączenia z numerem GetOrders. Wszystkie mają tę samą wartość OrderId
  • Zwrócona wartość każdego z nich jest inna dla każdego z ostatnich zamówień o najnowszym czasie (zgodnie z oczekiwaniami).

Próbuję zrozumieć, jak powinienem wiedzieć, aby nie wysyłać wszystkich 3 zamówień. Gdyby mój kod nie próbował umieścić tych poleceń w słowniku, nie wiedziałbym nawet, że zwracane są powielone wartości OrderId.

Mam nadzieję, że istnieje jakaś właściwość, która wskazuje, że rekord zamówienia został połączony w innym zamówieniu - ale nie mogę go znaleźć.

Czy powinienem sprawdzić czas zamówienia i wybrać najnowszy? Czy istnieje sposób, aby wykluczyć transakcje, które zostały następnie połączone z wyników wyszukiwania.

+0

wierd - postawiłem nagrodę za to i otrzymałem 3 przegrane, ale bez odpowiedzi –

+0

Czy masz jakieś aktualizacje tego problemu? –

+0

@SH nie - skończyło się na tym, że patrzyłem na czas i wybierałem najnowsze: -/Zawsze miałem to tylko raz na kilka miesięcy. Nie jestem pewien, co dokładnie zrobił mój kupujący, który spowodował takie zachowanie. Zakładam, że widzisz coś podobnego?[dodał mój kod jako odpowiedź] –

Odpowiedz

1

To jest mój kod C# do sprawdzenia duplików tego rodzaju i zwraca tylko najnowsze zamówienie. Jest tu wiele sprawdzeń sprawdzających, ale jeszcze się nie zawiesił - znowu nie wiem, czy kiedykolwiek trafiono na ścieżkę kodową, gdzie 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

To nie gwarantuje, że najnowsza zamówienie jest jednym z połączonych węzłów rzędu. Z mojego doświadczenia wynika, że ​​późniejsze zamówienie jest tylko elementem zamówienia z poprzedniego zamówienia. Zgłosiliśmy niezliczoną ilość razy, aby udzielać wsparcia w tej sprawie, a oni mówią, że wkrótce to naprawią.

Moje rozwiązanie na razie to porównanie z transakcją PayPal zamówienia za pomocą API GetTransactionDetails. Zakładałem, że transakcja PayPal powinna mieć połączone rekordy zamówień. To, co zrobiłem, stworzyłem mapę elementów linii w serwisie eBay ({ItemID: Ilość}) i utworzyłem mapę elementów transakcji PayPal ({Number: Quantity}), a następnie porównałem te dwa z mapą transakcji PayPal jako odniesieniem. Jeśli węzeł zamówienia eBay nie pasuje do transakcji PayPal, zignoruj ​​go i przejdź do następnego rzędu, dopóki nie zostanie spełniony ten z połączonym zamówieniem. Czasami ten z połączonymi rekordami zamówień jest pierwszym z węzłów zamówienia GetOrdersResponse, więc po ich wykryciu zignoruj ​​kolejne. Mam nadzieję, że pomogłem.

Powiązane problemy