/// <summary> /// Creates a shipping label. The labelData field returned in the response is a base64 encoded PDF value. Simply decode and save /// the output as a PDF file to retrieve a printable label. /// </summary> /// <param name="request">A request that specifies the parameters of the shipment label.</param> /// <returns>The shipping label matching the requested parameters.</returns> public Task <ShipmentLabel> CreateShipmentLabelAsync(ShipmentLabelRequest request) { return(PostDataAsync <ShipmentLabelRequest, ShipmentLabel>("createlabel", request)); }
internal ProcessShipmentResult GetTrackingNumberAndLabels(Order order, ShipmentPackagingStrategy packagingStrategy) { IShippingService shippingService = null; if (order.ShippingServiceProvider == ShippingProviderType.FedEx.ToString()) { shippingService = ShippingServiceFactory.Get(storeContext.CurrentStore.Id.Value, ShippingProviderType.FedEx, order.Id, order.CreatedFromCartId); } else if (order.ShippingServiceProvider == ShippingProviderType.UPS.ToString()) { shippingService = ShippingServiceFactory.Get(storeContext.CurrentStore.Id.Value, ShippingProviderType.UPS, order.Id, order.CreatedFromCartId); } else if (order.ShippingServiceProvider == ShippingProviderType.CustomShipping.ToString()) { shippingService = ShippingServiceFactory.Get(storeContext.CurrentStore.Id.Value, ShippingProviderType.CustomShipping); } if (shippingService == null) { return(new ProcessShipmentResult() { Success = false, ErrorMessages = new List <string>() { string.Format(@"{0} was not processed because '{1}' is an un-supported shipping provider.", order.OrderNumber, order.ShippingServiceProvider) } }); } var store = storeContext.CurrentStore; var shipmentLabelRequest = new ShipmentLabelRequest(); shipmentLabelRequest.SenderAddress = store.Address.ToPostalAddress(); shipmentLabelRequest.SenderContact = new Contact() { FirstName = store.Address.FirstName, LastName = store.Address.LastName, CompanyName = store.Name, Phone = store.GetSetting(StoreSettingNames.StorePhoneNumber) }; shipmentLabelRequest.RecipientAddress = new PostalAddress() { Address1 = order.ShipAddress1, Address2 = order.ShipAddress2, City = order.ShipCity, Region = order.ShipRegion, PostalCode = order.ShipPostalCode, CountryCode = order.ShipCountryCode }; shipmentLabelRequest.RecipientContact = new Contact() { FirstName = order.CustomerFirstName, LastName = order.CustomerLastName, CompanyName = order.ShipRecipientBusinessName, Phone = order.ShipTelephone }; shipmentLabelRequest.ServiceType = order.ShippingServiceType; shipmentLabelRequest.Packages = order.GetOrderItemsAsShipmentPackages(packagingStrategy); var response = shippingService.GetShipmentLabels(shipmentLabelRequest); if (response.Labels.Count > 0) { // save tracking # if (!string.IsNullOrEmpty(response.MasterTrackingNumber)) { order.ShippingServiceTrackingNumber = response.MasterTrackingNumber; } List <string> trackingNumbers = new List <string>(); List <string> labelFilenames = new List <string>(); foreach (var label in response.Labels) { // save shipping label file(s) if (label.LabelFile != null && label.LabelFile.Length > 0) { string labelDirPath = storeUrls.ShippingLabelFolderFileRoot; if (!Directory.Exists(labelDirPath)) { Directory.CreateDirectory(labelDirPath); } string fileExt = "." + label.LabelFileType.ToString().ToLower(); string filename = Guid.NewGuid().ToString(); if (label.PackageDetail != null && !string.IsNullOrEmpty(label.PackageDetail.ReferenceCode)) { filename = label.PackageDetail.ReferenceCode; } string filePath = Path.Combine(labelDirPath, filename + fileExt); if (File.Exists(filePath) && label.PackageDetail != null && !string.IsNullOrEmpty(label.PackageDetail.ReferenceCode)) { filename = label.PackageDetail.ReferenceCode + "-" + DateTime.Now.ToString("yyyyMMdd-HHmmssZ"); filePath = Path.Combine(labelDirPath, filename + fileExt); } File.WriteAllBytes(filePath, label.LabelFile); labelFilenames.Add(Path.GetFileName(filePath)); if (!string.IsNullOrEmpty(label.TrackingNumber)) { trackingNumbers.Add(label.TrackingNumber); } } } order.ShippingServiceLabelFile = string.Join(",", labelFilenames.ToArray()); if (trackingNumbers.Count > 0) { order.ShippingServiceTrackingNumber = string.Join(",", trackingNumbers.ToArray()); } order.Save(); //// update order status to 'Completed' //UpdateOrderStatus(order, OrderStatusName.Completed, order.PaymentStatus); } return(new ProcessShipmentResult() { Success = true, ErrorMessages = new List <string>(), ShippingLabels = response }); }