private async Task <string> GetProduct() { var mappingSettings = _settingService.LoadSetting <ProductMappingSettings>(); var allProductMapping = _productMappingService.GetAllProductMappingBySource((int)Source.Ebay); var tokenebay = EbayExtensions.GetToken(); foreach (var item in allProductMapping) { var product = _productService.GetProductById(item.ProductId); var clientapi = new HttpClient(); clientapi.BaseAddress = new Uri("https://api.ebay.com/"); clientapi.DefaultRequestHeaders.Clear(); clientapi.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); clientapi.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenebay); clientapi.Timeout = TimeSpan.FromMinutes(60); HttpResponseMessage Res = await clientapi.GetAsync("buy/browse/v1/item/" + item.ProductSourceId); if (Res.IsSuccessStatusCode) { var EmpResponse = Res.Content.ReadAsStringAsync().Result; var result = JsonConvert.DeserializeObject <ProductModelApi>(EmpResponse); var price = Convert.ToDecimal(result.price.value); if (price != item.Price) { var currencyService = EngineContext.Current.Resolve <ICurrencyService>(); product.Price = Round(currencyService.ConvertToPrimaryStoreCurrency(price * (1 + mappingSettings.AdditionalCostPercent / 100), currencyService.GetCurrencyByCode("USD")), -3); _productService.UpdateProduct(product); item.Price = price; _productMappingService.UpdateProductMapping(item); } } else if (Res.StatusCode == System.Net.HttpStatusCode.NotFound) { product.Deleted = true; _productService.UpdateProduct(product); } } return(null); }
public async Task <ActionResult> CallApi(ConfigurationModel model) { var storeScope = this.GetActiveStoreScopeConfiguration(_storeService, _workContext); var mappingSettings = _settingService.LoadSetting <ProductMappingSettings>(storeScope); var tokenebay = EbayExtensions.GetToken(); var categoryWorldBuy = _categoryMappingRecord.Table.Where(u => u.CategoryId == model.CategoryId && u.SourceId == (int)Source.Ebay).ToList(); if (categoryWorldBuy != null) { foreach (var cateIds in categoryWorldBuy) { var clientapi1 = new HttpClient(); clientapi1.BaseAddress = new Uri("https://api.ebay.com/"); clientapi1.DefaultRequestHeaders.Clear(); clientapi1.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); clientapi1.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenebay); clientapi1.Timeout = TimeSpan.FromMinutes(60); var getCategoryId = _affiliateEbayService.Get(cateIds.CategorySourceId).EbayId.ToString(); string str = "buy/browse/v1/item_summary/search?limit=200&category_ids=" + getCategoryId; if (!string.IsNullOrEmpty(model.KeyWord)) { str = str + "&q=" + model.KeyWord; } HttpResponseMessage Res1 = await clientapi1.GetAsync(str); if (Res1.IsSuccessStatusCode) { var EmpResponse1 = Res1.Content.ReadAsStringAsync().Result; var result1 = JsonConvert.DeserializeObject <SearchOutput>(EmpResponse1); int temp = int.Parse(result1.total); int value = 0; while (temp > 0) { str = str + "&offset=" + value; HttpResponseMessage Res2 = await clientapi1.GetAsync(str); if (Res2.IsSuccessStatusCode) { var EmpResponse2 = Res2.Content.ReadAsStringAsync().Result; var result2 = JsonConvert.DeserializeObject <SearchOutput>(EmpResponse2); if (result2.itemSummaries != null) { foreach (var item in result2.itemSummaries) { var checkProduct = _affiliateEbayService.GetProductBySourceId(productSourceId: item.itemId, source: (int)Source.Ebay); if (checkProduct.Id == 0) { var clientapi = new HttpClient(); clientapi.BaseAddress = new Uri("https://api.ebay.com/"); clientapi.DefaultRequestHeaders.Clear(); clientapi.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); clientapi.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenebay); clientapi.Timeout = TimeSpan.FromMinutes(60); HttpResponseMessage Res = await clientapi.GetAsync("buy/browse/v1/item/" + item.itemId); if (Res.IsSuccessStatusCode) { var EmpResponse = Res.Content.ReadAsStringAsync().Result; var result = JsonConvert.DeserializeObject <ProductModelApi>(EmpResponse); if (result.price != null) { var price = Convert.ToDecimal(result.price.value); var product = new Product(); product.Name = result.title; var currencyService = EngineContext.Current.Resolve <ICurrencyService>(); product.Price = Round(currencyService.ConvertToPrimaryStoreCurrency(price * (1 + mappingSettings.AdditionalCostPercent / 100), currencyService.GetCurrencyByCode("USD")), -3); //if(result.marketingPrice == null) //{ // product.OldPrice = 0; //} //else //{ // if(result.marketingPrice.originalPrice == null) // product.OldPrice = 0; // else // product.OldPrice = Convert.ToDecimal(result.marketingPrice.originalPrice.value); //} product.ShortDescription = result.shortDescription; product.FullDescription = result.description; product.VisibleIndividually = true; product.AllowCustomerReviews = true; product.UnlimitedDownloads = true; product.MaxNumberOfDownloads = 10; product.RecurringCycleLength = 100; product.RecurringTotalCycles = 10; product.RentalPriceLength = 1; product.IsShipEnabled = true; product.NotifyAdminForQuantityBelow = 1; product.StockQuantity = 1000; product.OrderMaximumQuantity = 1000; product.OrderMinimumQuantity = 1; product.CreatedOnUtc = DateTime.UtcNow; product.UpdatedOnUtc = DateTime.UtcNow; _productService.InsertProduct(product); var productMapping = new ProductMapping(); productMapping.ProductSourceId = item.itemId; productMapping.ProductSourceLink = item.itemWebUrl; productMapping.SourceId = (int)Source.Ebay; productMapping.ProductId = product.Id; productMapping.Price = price; _productMappingService.InsertProduct(productMapping); // Thêm hình chính var imageMain = result.image.imageUrl.Split('?')[0]; System.Drawing.Image imageKey = EbayExtensions.DownloadImage(imageMain); if (imageKey != null) { var contentTypeMain = ""; var vendorPictureBinaryMain = EbayExtensions.ImageToByte(imageKey); var fileExtensionMain = Path.GetExtension(imageMain); if (!String.IsNullOrEmpty(fileExtensionMain)) { fileExtensionMain = fileExtensionMain.ToLowerInvariant(); } if (String.IsNullOrEmpty(contentTypeMain)) { switch (fileExtensionMain) { case ".bmp": contentTypeMain = MimeTypes.ImageBmp; break; case ".gif": contentTypeMain = MimeTypes.ImageGif; break; case ".jpeg": case ".jpg": case ".jpe": case ".jfif": case ".pjpeg": case ".pjp": contentTypeMain = MimeTypes.ImageJpeg; break; case ".png": contentTypeMain = MimeTypes.ImagePng; break; case ".tiff": case ".tif": contentTypeMain = MimeTypes.ImageTiff; break; default: break; } } var pictureMain = _pictureService.InsertPicture(vendorPictureBinaryMain, contentTypeMain, null); _productService.InsertProductPicture(new ProductPicture { PictureId = pictureMain.Id, ProductId = product.Id, DisplayOrder = 0, }); } int display = 1; if (result.additionalImages != null) { foreach (var ite in result.additionalImages) { var ima = ite.imageUrl.Split('?')[0]; System.Drawing.Image image = EbayExtensions.DownloadImage(ima); if (image != null) { var contentType = ""; var vendorPictureBinary = EbayExtensions.ImageToByte(image); var fileExtension = Path.GetExtension(ima); if (!String.IsNullOrEmpty(fileExtension)) { fileExtension = fileExtension.ToLowerInvariant(); } if (String.IsNullOrEmpty(contentType)) { switch (fileExtension) { case ".bmp": contentType = MimeTypes.ImageBmp; break; case ".gif": contentType = MimeTypes.ImageGif; break; case ".jpeg": case ".jpg": case ".jpe": case ".jfif": case ".pjpeg": case ".pjp": contentType = MimeTypes.ImageJpeg; break; case ".png": contentType = MimeTypes.ImagePng; break; case ".tiff": case ".tif": contentType = MimeTypes.ImageTiff; break; default: break; } } var picture = _pictureService.InsertPicture(vendorPictureBinary, contentType, null); _productService.InsertProductPicture(new ProductPicture { PictureId = picture.Id, ProductId = product.Id, DisplayOrder = display++, }); } } } //Product specification attributes if (result.localizedAspects != null) { foreach (var attributes in result.localizedAspects) { var getAttribute = _affiliateEbayService.GetSpecificationAttributeByName(attributes.name); var specificationAttribute = new SpecificationAttribute(); var specificationAttributeOption = new SpecificationAttributeOption(); if (getAttribute == null) { specificationAttribute.Name = attributes.name; specificationAttribute.DisplayOrder = 0; _specificationAttributeService.InsertSpecificationAttribute(specificationAttribute); specificationAttributeOption.DisplayOrder = 0; specificationAttributeOption.ColorSquaresRgb = null; specificationAttributeOption.Name = attributes.value; specificationAttributeOption.SpecificationAttributeId = specificationAttribute.Id; _specificationAttributeService.InsertSpecificationAttributeOption(specificationAttributeOption); } var productSpecificationAttribute = new ProductSpecificationAttribute(); productSpecificationAttribute.AttributeTypeId = (int)SpecificationAttributeType.CustomText; if (getAttribute == null) { productSpecificationAttribute.SpecificationAttributeOptionId = specificationAttributeOption.Id; } else { var options = _specificationAttributeService.GetSpecificationAttributeOptionsBySpecificationAttribute(getAttribute.Id); productSpecificationAttribute.SpecificationAttributeOptionId = options.FirstOrDefault().Id; } productSpecificationAttribute.ProductId = product.Id; productSpecificationAttribute.CustomValue = attributes.value; productSpecificationAttribute.AllowFiltering = false; productSpecificationAttribute.ShowOnProductPage = true; productSpecificationAttribute.DisplayOrder = 1; _specificationAttributeService.InsertProductSpecificationAttribute(productSpecificationAttribute); } } //categories SaveCategoryMappings(product, new List <int>() { model.CategoryId }); } } } } } } value = value + 200; temp = temp - 200; } } } SuccessNotification(_localizationService.GetResource("Admin.Catalog.Products.Added")); } else { ErrorNotification(_localizationService.GetResource("Plugins.AffiliateEbay.CallApi.Error")); } return(CallApi()); }