Beispiel #1
0
        public static DataSet ListAmazonOrderHeaderByNextToken(string accountName, string nextToken, string merchantId, string marketplaceId, string accessKeyId, string secretAccessKey)
        {
            DataSet      amazonOrderHeaderListDs = new DataSet();
            const string applicationName         = "<Your Application Name>";
            const string applicationVersion      = "<Your Application Version>";
            ListOrdersByNextTokenRequest request = new ListOrdersByNextTokenRequest();
            string sellerId = merchantId;

            request.SellerId  = sellerId;
            request.NextToken = nextToken;
            MarketplaceWebServiceOrdersConfig config = new MarketplaceWebServiceOrdersConfig();

            config.ServiceURL = "https://mws.amazonservices.com";
            MarketplaceWebServiceOrdersClient client = new MarketplaceWebServiceOrdersClient(accessKeyId, secretAccessKey, applicationName, applicationVersion, config);

            try
            {
                IMWSResponse response = null;
                response = client.ListOrdersByNextToken(request);
                ResponseHeaderMetadata rhmd = response.ResponseHeaderMetadata;
                Console.WriteLine("RequestId: " + rhmd.RequestId);
                Console.WriteLine("Timestamp: " + rhmd.Timestamp);
                string responseXml = response.ToXML();
                System.IO.File.WriteAllText(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\AmazonOrderHeaderListNextToken.xml", responseXml);
                amazonOrderHeaderListDs.ReadXml(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\AmazonOrderHeaderListNextToken.xml", XmlReadMode.InferSchema);
                return(amazonOrderHeaderListDs);
            }
            catch (MarketplaceWebServiceOrdersException ex)
            {
                // Exception properties are important for diagnostics.
                ResponseHeaderMetadata rhmd = ex.ResponseHeaderMetadata;
                Console.WriteLine("Service Exception:");
                if (rhmd != null)
                {
                    Console.WriteLine("RequestId: " + rhmd.RequestId);
                    Console.WriteLine("Timestamp: " + rhmd.Timestamp);
                }
                Console.WriteLine("Message: " + ex.Message);
                Console.WriteLine("StatusCode: " + ex.StatusCode);
                Console.WriteLine("ErrorCode: " + ex.ErrorCode);
                Console.WriteLine("ErrorType: " + ex.ErrorType);
                throw ex;
            }
        }
Beispiel #2
0
        public void LeerPedidos(DateTime FechInicial, string cuenta, string OrderStatus)
        {
            int pagina = 1;

            this.Cuenta = cuenta;
            ListOrdersRequest request = new ListOrdersRequest();

            request.SellerId = MERCHANT_ID;

            string      format       = "MMM d, yyyy h:mm:ss tt PDT";
            CultureInfo provider     = CultureInfo.InvariantCulture;
            DateTime    now          = DateTime.Now.Add(new TimeSpan(0, -10, 0));
            DateTime    createdAfter = DateTime.ParseExact("Aug 10, 2017 2:42:18 PM PDT", format, provider);

            request.CreatedAfter  = createdAfter;
            request.CreatedBefore = now;


            List <string> orderStatus = new List <string>();

            orderStatus.Add(OrderStatus);
            request.OrderStatus = orderStatus;


            List <string> marketplaceId = new List <string>();

            marketplaceId.Add(MARKETPLACE_ID);
            request.MarketplaceId = marketplaceId;

            //List<string> fulfillmentChannel = new List<string>();
            //request.FulfillmentChannel = fulfillmentChannel;
            //List<string> paymentMethod = new List<string>();
            //request.PaymentMethod = paymentMethod;
            //string buyerEmail = "example";
            //request.BuyerEmail = buyerEmail;
            //string sellerOrderId = "example";
            //request.SellerOrderId = sellerOrderId;
            //decimal maxResultsPerPage = 1;
            //request.MaxResultsPerPage = maxResultsPerPage;
            //List<string> tfmShipmentStatus = new List<string>();
            //request.TFMShipmentStatus = tfmShipmentStatus;
            MarketplaceWebServiceOrdersConfig config = new MarketplaceWebServiceOrdersConfig
            {
                ServiceURL = "https://mws.amazonservices.es/Orders/2013-09-01"
            };
            MarketplaceWebServiceOrdersClient client = new MarketplaceWebServiceOrdersClient(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, "AppName", "0.0", config);
            ListOrdersResponse a = new ListOrdersResponse();
            bool retryRequest    = true;

            while (retryRequest == true)
            {
                retryRequest = false;
                try
                {
                    eventAntesPagina(new EventosAmazon {
                        pagina = pagina, linea = 0, retardo = 0
                    });
                    a = client.ListOrders(request);
                    eventDespuesPagina(new EventosAmazon {
                        pagina = pagina, linea = 0, retardo = 0
                    });
                }
                catch (MarketplaceWebServiceOrdersException ex)
                {
                    if (ex.ErrorCode.Contains("RequestThrottled"))
                    {
                        int retardo = 60000;
                        retryRequest = true;
                        eventAntesRetardoTroleo(new EventosAmazon {
                            pagina = pagina, linea = 0, retardo = retardo
                        });
                        System.Threading.Thread.Sleep(retardo);
                        eventDespuesRetardoTroleo?.Invoke(new EventosAmazon {
                            pagina = pagina, linea = 0, retardo = retardo
                        });
                    }
                    else
                    {
                        eventError?.Invoke(new EventosAmazon {
                            pagina = pagina, linea = 0, retardo = 0, error = ex.Detail
                        });
                    }
                }
            }


            //            foreach (Order order in a.ListOrdersResult.Orders)
            //                GrabarOrder(order, cuenta);
            Task t = new Task(
                () =>
            {
                Parallel.ForEach(a.ListOrdersResult.Orders, new ParallelOptions {
                    MaxDegreeOfParallelism = 2
                },
                                 order =>
                {
                    int numero = a.ListOrdersResult.Orders.IndexOf(order);
                    LeerLineasPedido(order, pagina, numero);
                    GrabarOrder(order, cuenta);
                });
            });

            t.Start();
            while (!t.IsCompleted)
            {
                Application.DoEvents();
            }
            string NextToken = a.ListOrdersResult.NextToken;

//            return;
            while (!string.IsNullOrEmpty(NextToken))
            {
                pagina++;
                ListOrdersByNextTokenRequest nextRequest = new ListOrdersByNextTokenRequest();
                nextRequest.NextToken = NextToken;
                nextRequest.SellerId  = request.SellerId;
                retryRequest          = true;
                ListOrdersByNextTokenResponse b = new ListOrdersByNextTokenResponse();
                while (retryRequest == true)
                {
                    retryRequest = false;
                    try
                    {
                        eventAntesPagina(new EventosAmazon {
                            pagina = pagina, linea = 0, retardo = 0
                        });
                        b = client.ListOrdersByNextToken(nextRequest);
                        eventDespuesPagina(new EventosAmazon {
                            pagina = pagina, linea = 0, retardo = 0
                        });
                        Task tn = new Task(
                            () =>
                        {
                            Parallel.ForEach(b.ListOrdersByNextTokenResult.Orders, new ParallelOptions {
                                MaxDegreeOfParallelism = 2
                            }, order =>
                            {
                                int numero = b.ListOrdersByNextTokenResult.Orders.IndexOf(order);
                                LeerLineasPedido(order, pagina, numero);
                                GrabarOrder(order, cuenta);
                            });
                        });
                        tn.Start();
                        while (!tn.IsCompleted)
                        {
                            Application.DoEvents();
                        }
                    }
                    catch (MarketplaceWebServiceOrdersException ex)
                    {
                        //The ListOrders and ListOrdersByNextToken operations together share a maximum request quota of six and a restore rate of one request every minute.
                        //                  Request quota
                        //                          The number of requests that you can submit at one time without throttling.The request quota decreases with every request you submit.The request quota increases at the restore rate.
                        //                  Restore rate
                        //                          The rate at which your request quota increases over time, up to the maximum request quota.
                        //                  Maximum request quota
                        //                          The maximum size that the request quota can reach.
                        if (ex.ErrorCode.Contains("RequestThrottled"))
                        {
                            int retardo = 60000;
                            retryRequest = true;
                            eventAntesRetardoTroleo(new EventosAmazon {
                                pagina = pagina, linea = 0, retardo = retardo
                            });
                            System.Threading.Thread.Sleep(retardo);
                            eventDespuesRetardoTroleo?.Invoke(new EventosAmazon {
                                pagina = pagina, linea = 0, retardo = retardo
                            });
                        }
                    }
                    if (b.IsSetListOrdersByNextTokenResult())
                    {
                        NextToken = b.ListOrdersByNextTokenResult.NextToken;
                    }
                    else
                    {
                        break;
                    }
                }
            }
        }
Beispiel #3
0
        public IEnumerable <MarketplaceOrder> GetMarketplaceOrders(DateTime createdAfter)
        {
            var marketplaceOrders = new List <MarketplaceOrder>();

            try
            {
                // init the Amazon web service
                var config = new MarketplaceWebServiceOrdersConfig {
                    ServiceURL = "https://mws.amazonservices.com"
                };
                config.SetUserAgent(_ApplicationName, _Version);
                _ordersClient = new MarketplaceWebServiceOrdersClient(_credential.AccessKeyId, _credential.SecretKey, config);

                Console.WriteLine("{0} fetching orders for {1}...", ChannelName, createdAfter);

                // create ListOrdersRequest object
                var listOrdersRequest = new ListOrdersRequest
                {
                    SellerId      = _credential.MerchantId,
                    MarketplaceId = new List <string> {
                        { _credential.MarketplaceId }
                    },
                    LastUpdatedAfter = createdAfter.Date
                };
                var listOrdersResponse = _ordersClient.ListOrders(listOrdersRequest);
                var ordersResult       = listOrdersResponse.ListOrdersResult.Orders;
                var nextToken          = listOrdersResponse.ListOrdersResult.NextToken;
                ListOrdersByNextTokenResponse nextOrderResponse = null;

                Console.WriteLine("{0} retrieved {1} orders and {2} next results page.", ChannelName, listOrdersResponse.ListOrdersResult.Orders.Count, !string.IsNullOrWhiteSpace(nextToken) ? "HAS" : "NO");

                do
                {
                    if (nextOrderResponse != null)
                    {
                        ordersResult = nextOrderResponse.ListOrdersByNextTokenResult.Orders;
                        nextToken    = nextOrderResponse.ListOrdersByNextTokenResult.NextToken;
                        Console.WriteLine("{0} retrieved {1} next orders and {2} next results page.", ChannelName, ordersResult.Count, !string.IsNullOrWhiteSpace(nextToken) ? "HAS" : "NO");
                    }

                    // Convert the orders to the marketplace contracts and get the items.
                    for (int i = 0; i < ordersResult.Count; ++i)
                    {
                        // The maximum request quota for ListOrderItems is 30 after that it restores at 2 per second.
                        // So if the order's that are being pulled exceed 30, then sleep for 2 seconds each one.
                        if (i > 30)
                        {
                            Thread.Sleep(2000);
                        }

                        marketplaceOrders.Add(convertOrderResponseToMarketplaceOrder(ordersResult[i]));
                    }

                    // do a rquest for the next page result of orders if next token is not null
                    if (!string.IsNullOrWhiteSpace(nextToken))
                    {
                        // pause at least 1 minute, this is the restore rate for ListOrdersByNextToken for every 6 quota
                        Thread.Sleep(61000);

                        var nextTokenRequest = new ListOrdersByNextTokenRequest {
                            SellerId = _credential.MerchantId, NextToken = nextToken
                        };
                        nextOrderResponse = _ordersClient.ListOrdersByNextToken(nextTokenRequest);
                    }
                } while (!string.IsNullOrWhiteSpace(nextToken));

                Console.WriteLine("{0} done fetching orders: {1} items", ChannelName, marketplaceOrders.Count);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error in getting orders for {0}! Error message: {1}", ChannelName, ex.Message);
                _logger.LogError(LogEntryType.AmazonOrdersProvider,
                                 string.Format("Error in retrieving orders for Amazon. Error message: {0}", ex.Message),
                                 ex.StackTrace);

                _emailService.SendEmailAdminException(subject: "Amazon - Get Marketplace Orders Error",
                                                      exParam: ex,
                                                      useDefaultTemplate: true,
                                                      url: "GetMarketplaceOrders Method",
                                                      userName: "******");
            }

            return(marketplaceOrders);
        }
        public void Insert_NextToken(string token = null)
        {
            Amazon_Juchuu_NextToken = D_AmazonJuchuu();
            Base_BL   bbl     = new Base_BL();
            DataTable strbuff = new DataTable();

            strbuff.Columns.Add("StoreCD");
            strbuff.Columns.Add("APIKey");
            strbuff.Columns.Add("SEQ");
            strbuff.Columns.Add("OrderId");
            MarketplaceWebServiceOrdersConfig config = new MarketplaceWebServiceOrdersConfig();

            config.ServiceURL = CommonValue.strServiceURL;
            MarketplaceWebServiceOrders.MarketplaceWebServiceOrders client = new MarketplaceWebServiceOrdersClient(
                AccessKeyId,
                SecretKeyId,
                ApplicationName,
                ApplicationVersion,
                config);

            if (token != null)
            {
                ListOrdersByNextTokenRequest request1 = new ListOrdersByNextTokenRequest();
                ListOrdersByNextTokenResult  listOrdersByNextResult = new ListOrdersByNextTokenResult();
                request1.SellerId     = SellerId;
                request1.MWSAuthToken = MWSAuthToken;
                request1.NextToken    = token;
                ListOrdersByNextTokenResponse response1 = client.ListOrdersByNextToken(request1);
                if (response1.IsSetListOrdersByNextTokenResult())
                {
                    listOrdersByNextResult = response1.ListOrdersByNextTokenResult;
                    if (listOrdersByNextResult.IsSetOrders())
                    {
                        List <Order> orders = listOrdersByNextResult.Orders;
                        int          i      = 0;
                        foreach (Order o in orders)
                        {
                            i++;
                            strbuff.Rows.Add(StoreCD, APIKey, i, o.AmazonOrderId);
                            GetListOrderdata(o, i, false);
                        }
                    }
                }
                Amazon__Entity ameDetails = new Amazon__Entity();
                ameDetails.StoreCD           = StoreCD;
                ameDetails.APIKey            = APIKey;
                ameDetails.LastUpdatedAfter  = UpdatedTimeBefore.ToString();
                ameDetails.LastUpdatedBefore = listOrdersByNextResult.LastUpdatedBefore.ToString();
                ameDetails.Xmldetails        = bbl.DataTableToXml(Amazon_Juchuu_NextToken);
                ameDetails.XmlOrder          = bbl.DataTableToXml(strbuff);

                TokenNo = TokenNo + 1;
                if (aml.AmazonAPI_Insert_NextToken(ameDetails))
                {
                    Console.WriteLine("Successfully Inserted Token " + (TokenNo).ToString() + "Times");
                }
                else
                {
                    Console.WriteLine("Unfortunately Inserted Failed Token " + (TokenNo).ToString() + "Times");
                }
                Insert_NextToken(listOrdersByNextResult.NextToken);
            }
            else/// To be Continued. . . Insert
            {
                Console.Write("Order inserted Successfully!!!");
                Console.Read();
            }
        }
Beispiel #5
0
        public static void GetOrderList()
        {
            dt = new DataTable();
            dt.Columns.Add("OrderId");
            MarketplaceWebServiceOrdersConfig config = new MarketplaceWebServiceOrdersConfig();
            string SellerId           = "A3U1G59YKB47LS";
            string MarketplaceId      = "A1VC38T7YXB528";
            string AccessKeyId        = "AKIAJFRPIMOTC4CJGHLQ";
            string SecretKeyId        = "4KI9yuXr7Ni64iFpdjnW1dw3LNdNXIn4rgOnNrZQ";
            string ApplicationVersion = "1.0";
            string ApplicationName    = "ラスタスポーツ";
            string MWSAuthToken       = "amzn.mws.fea748c0-bfe0-4039-0cc0-88b6ce5c0058";
            string serviceURL         = "https://mws.amazonservices.jp";
            string strbuff            = string.Empty;

            config.ServiceURL = serviceURL;
            MarketplaceWebServiceOrders.MarketplaceWebServiceOrders client = new MarketplaceWebServiceOrdersClient(
                AccessKeyId,
                SecretKeyId,
                ApplicationName,
                ApplicationVersion,
                config);


            //ListOrder
            try
            {
                ListOrdersRequest request = new ListOrdersRequest();
                request.SellerId     = SellerId;
                request.CreatedAfter = DateTime.Now.AddDays(-1);
                List <string> lstMarketplace = new List <string>();
                lstMarketplace.Add(MarketplaceId);
                request.MarketplaceId = lstMarketplace;
                request.MWSAuthToken  = MWSAuthToken;
                ListOrdersResponse response = client.ListOrders(request);
                if (response.IsSetListOrdersResult())
                {
                    ListOrdersResult listOrdersResult = response.ListOrdersResult;
                    if (listOrdersResult.IsSetOrders())
                    {
                        List <Order> orders = listOrdersResult.Orders;
                        foreach (Order order in orders)
                        {
                            dt.Rows.Add(order.AmazonOrderId);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                var msge = ex.Message;
            }
            //// ListOrderByNextToken
            try
            {
                ListOrdersRequest request = new ListOrdersRequest();
                request.SellerId     = SellerId;
                request.CreatedAfter = DateTime.Now.AddDays(-1);
                List <string> lstMarketplace = new List <string>();
                lstMarketplace.Add(MarketplaceId);
                request.MarketplaceId     = lstMarketplace;
                request.MaxResultsPerPage = 14;
                request.MWSAuthToken      = MWSAuthToken;
                ListOrdersResponse response = client.ListOrders(request);
                if (response.IsSetListOrdersResult())
                {
                    ListOrdersResult listOrdersResult = response.ListOrdersResult;
                    if (listOrdersResult.IsSetOrders())
                    {
                        if (listOrdersResult.NextToken != null)
                        {
                            ListOrdersByNextTokenRequest request1 = new ListOrdersByNextTokenRequest();

                            request1.SellerId     = SellerId;
                            request1.MWSAuthToken = MWSAuthToken;
                            request1.NextToken    = listOrdersResult.NextToken;
                            ListOrdersByNextTokenResponse response1 = client.ListOrdersByNextToken(request1);
                            if (response1.IsSetListOrdersByNextTokenResult())
                            {
                                ListOrdersByNextTokenResult listOrdersByNextResult = response1.ListOrdersByNextTokenResult;
                                if (listOrdersByNextResult.IsSetOrders())
                                {
                                    List <Order> orders = listOrdersByNextResult.Orders;
                                    foreach (Order order in orders)
                                    {
                                        dt.Rows.Add(order.AmazonOrderId);
                                        //   strbuff += order.AmazonOrderId + System.Environment.NewLine;
                                    }
                                }
                            }
                        }
                    }
                    var val = strbuff;
                }
                Environment.Exit(0);
            }
            catch (Exception ex)
            {
            }

            // //List Order Item
            //try
            //{
            //    foreach (DataRow dr in dt.Rows)
            //    {
            //        ListOrderItemsRequest request = new ListOrderItemsRequest();
            //        request.SellerId = SellerId;
            //        request.AmazonOrderId = dr["OrderId"].ToString();
            //        request.MWSAuthToken = MWSAuthToken;
            //        ListOrderItemsResponse response = client.ListOrderItems(request);
            //        if (response.IsSetListOrderItemsResult())
            //        {
            //            ListOrderItemsResult listOrderItemsResult = response.ListOrderItemsResult;
            //            if (listOrderItemsResult.IsSetOrderItems())
            //            {
            //                List<OrderItem> orderItems = listOrderItemsResult.OrderItems;
            //                foreach (OrderItem orderItem in orderItems)
            //                {
            //                    strbuff += "商品名:" + orderItem.Title + System.Environment.NewLine;
            //                }
            //            }
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{

            //}
            //// ListOrderItem_byNextToken
            try
            {
                foreach (DataRow dr in dt.Rows)
                {
                    ListOrderItemsRequest request = new ListOrderItemsRequest();
                    request.SellerId      = SellerId;
                    request.AmazonOrderId = dr["OrderId"].ToString();
                    request.MWSAuthToken  = MWSAuthToken;

                    ListOrderItemsResponse response = client.ListOrderItems(request);
                    if (response.IsSetListOrderItemsResult())
                    {
                        ListOrderItemsResult listOrderItemsResult = response.ListOrderItemsResult;
                        if (listOrderItemsResult.NextToken != null)
                        {
                            ListOrderItemsByNextTokenRequest request1 = new ListOrderItemsByNextTokenRequest();
                            request1.SellerId     = SellerId;
                            request1.MWSAuthToken = MWSAuthToken;
                            request1.NextToken    = listOrderItemsResult.NextToken;

                            ListOrderItemsByNextTokenResponse response1 = client.ListOrderItemsByNextToken(request1);
                            if (response1.IsSetListOrderItemsByNextTokenResult())
                            {
                                ListOrderItemsByNextTokenResult listOrderByNextItemsResult = response1.ListOrderItemsByNextTokenResult;
                                if (listOrderByNextItemsResult.IsSetOrderItems())
                                {
                                    List <OrderItem> orderItems = listOrderItemsResult.OrderItems;
                                    foreach (OrderItem orderItem in orderItems)
                                    {
                                        if (orderItem.IsSetOrderItemId())
                                        {
                                            strbuff += "商品名:" + orderItem.Title + System.Environment.NewLine;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }

            //// GetOrder
            //try
            //{
            //    foreach (DataRow dr in dt.Rows)
            //    {
            //        GetOrderRequest request = new GetOrderRequest();
            //        request.SellerId = SellerId;
            //        request.MWSAuthToken = MWSAuthToken;
            //        List<string> amazonorderId = new List<string>();
            //        amazonorderId.Add(dr["OrderId"].ToString());
            //        request.AmazonOrderId = amazonorderId;

            //        GetOrderResponse response = client.GetOrder(request);
            //        if (response.IsSetGetOrderResult())
            //        {
            //            List<Order> orders = response.GetOrderResult.Orders;
            //            foreach (Order order in orders)
            //            {
            //                strbuff += "購入者:" + order.AmazonOrderId + ","+ order.OrderStatus + System.Environment.NewLine;
            //            }
            //        }
            //    }
            //}

            //catch (Exception ex)
            //{

            //}

            //// GetService Status
            //try
            //{
            //    MarketplaceWebServiceOrdersConfig config1 = new MarketplaceWebServiceOrdersConfig();
            //    config1.ServiceURL = serviceURL;
            //    MarketplaceWebServiceOrders.MarketplaceWebServiceOrders client1 = new MarketplaceWebServiceOrdersClient(
            //                                                                            AccessKeyId,
            //                                                                            SecretKeyId,
            //                                                                            ApplicationName,
            //                                                                            ApplicationVersion,
            //                                                                            config1);
            //    MarketplaceWebServiceOrders.Model.GetServiceStatusRequest  request = new MarketplaceWebServiceOrders.Model.GetServiceStatusRequest();
            //    request.SellerId = SellerId;
            //    request.MWSAuthToken = MWSAuthToken;
            //    // MarketplaceWebServiceOrders.Model.GetServiceStatusRequest
            //    var response = client1.GetServiceStatus(request);
            //    if (response.IsSetGetServiceStatusResult())
            //    {
            //        strbuff = "処理状況:" + response.GetServiceStatusResult.Status;
            //    }
            //}
            //catch (Exception ex)
            //{

            //}
        }