2012-08-30 4 views
7

Mi integración de eBay acaba de romperse después de meses de funcionar correctamente y no estoy seguro de si es un error o no de su parte.eBay GetOrders: cómo distinguir las órdenes combinadas de las transacciones originales

Mi comprador realizó 2 transacciones de dos artículos diferentes y luego los combinó para guardar el envío. Todo esto sucedió en cuestión de minutos.

Esto tuvo el siguiente resultado:

  • nuevo récord de ventas creado (que por cierto no aparece en el administrador de este vendedor)
  • Nueva OrderId creada con el fin combinado. Contiene las dos transacciones (como se esperaba). Este OrderId se asignó a los 2 pedidos originales y el combinado (no esperado)
  • Tres pedidos devueltos en llamada al GetOrders. Todos tienen el mismo valor OrderId
  • El CreatedTime en cada OrderType devuelto es diferente para cada uno con el pedido más reciente teniendo la última hora (como se esperaba).

Lo que estoy tratando de averiguar es cómo se supone que debo saber para no enviar los 3 pedidos. Si mi código no hubiera intentado colocar estos pedidos en un diccionario, ni siquiera hubiera sabido que había valores duplicados OrderId.

Espero que haya una propiedad en alguna parte que indique que el registro de la orden se combinó en otro orden, pero no puedo encontrarlo.

¿Se supone que debo mirar la hora del pedido y elegir la más reciente? ¿O hay una manera de excluir las transacciones que se combinaron posteriormente de los resultados de búsqueda?

+0

wierd - Puse una recompensa por esto y obtuvo 3 votos positivos pero ninguna respuesta –

+0

¿Tiene alguna actualización de este problema? –

+0

@SH no - Terminé mirando la hora y escogiendo lo último: -/Solo he tenido esto una vez en meses. No estoy seguro de lo que hizo mi comprador que desencadenó este comportamiento. Supongo que estás viendo algo similar?[agregué mi código como respuesta] –

Respuesta

1

Este es mi código C# para comprobar si hay estafadores de esta naturaleza y devolver solo el último pedido. Hay una gran cantidad de comprobación de aserción aquí, pero no se ha bloqueado aún - una vez más, no sé si el código de ruta donde o.Count() != 1 ha sido golpeado alguna vez.

 // 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

No garantiza que la última orden sea la que tiene los nodos de pedido combinados. Según mi experiencia, sucedió que el pedido posterior es solo un elemento de línea de suposición del orden anterior. Informamos en innumerables ocasiones al soporte de eBay sobre esto y solo dicen que lo arreglarán pronto.

Mi solución por ahora se compara con la transacción de PayPal de la orden utilizando la API GetTransactionDetails. Supuse que la transacción de PayPal debería tener los registros de pedidos combinados. Lo que hice fue crear un mapa de líneas de pedido de eBay ({ItemID: Quantity}) y crear un mapa de líneas de pedido de transacción de PayPal ({Number: Quantity}) y luego comparar los dos con el mapa de transacciones de PayPal como referencia. Si un nodo de orden de eBay no coincide con la transacción de PayPal, ignórelo y proceda al nodo de orden siguiente hasta que se encuentre el que tiene el orden combinado. A veces, el que tiene registros combinados de pedidos viene primero de los nodos de pedido de GetOrdersResponse, así que simplemente ignore los siguientes cuando se detecte. Espero que haya ayudado.

Cuestiones relacionadas