Пример #1
0
 /// <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));
 }
Пример #2
0
        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
            });
        }