private string CreateRequest(string username, string password, ShipmentPackage shipmentPackage) { var usedMeasureWeight = MeasureManager.GetMeasureWeightBySystemKeyword(MEASUREWEIGHTSYSTEMKEYWORD); if (usedMeasureWeight == null) throw new NopException(string.Format("USPS shipping service. Could not load \"{0}\" measure weight", MEASUREWEIGHTSYSTEMKEYWORD)); var usedMeasureDimension = MeasureManager.GetMeasureDimensionBySystemKeyword(MEASUREDIMENSIONSYSTEMKEYWORD); if (usedMeasureDimension == null) throw new NopException(string.Format("USPS shipping service. Could not load \"{0}\" measure dimension", MEASUREDIMENSIONSYSTEMKEYWORD)); int length = Convert.ToInt32(Math.Ceiling(MeasureManager.ConvertDimension(shipmentPackage.GetTotalLength(), MeasureManager.BaseDimensionIn, usedMeasureDimension))); int height = Convert.ToInt32(Math.Ceiling(MeasureManager.ConvertDimension(shipmentPackage.GetTotalHeight(), MeasureManager.BaseDimensionIn, usedMeasureDimension))); int width = Convert.ToInt32(Math.Ceiling(MeasureManager.ConvertDimension(shipmentPackage.GetTotalWidth(), MeasureManager.BaseDimensionIn, usedMeasureDimension))); int weight = Convert.ToInt32(Math.Ceiling(MeasureManager.ConvertWeight(ShippingManager.GetShoppingCartTotalWeight(shipmentPackage.Items, shipmentPackage.Customer), MeasureManager.BaseWeightIn, usedMeasureWeight))); if (length < 1) length = 1; if (height < 1) height = 1; if (width < 1) width = 1; if (weight < 1) weight = 1; string zipPostalCodeFrom = shipmentPackage.ZipPostalCodeFrom; string zipPostalCodeTo = shipmentPackage.ShippingAddress.ZipPostalCode; //valid values for testing. http://testing.shippingapis.com/ShippingAPITest.dll //Zip to = "20008"; Zip from ="10022"; weight = 2; int pounds = weight; //we don't use ounce //int ounces = Convert.ToInt32((weight - pounds) * 16.0M); int ounces = 0; if (pounds < 1) pounds = 1; string requestString = string.Empty; bool isDomestic = IsDomesticRequest(shipmentPackage); if (isDomestic) { #region domestic request var sb = new StringBuilder(); sb.AppendFormat("<RateV3Request USERID=\"{0}\" PASSWORD=\"{1}\">", username, password); var xmlStrings = new USPSStrings(); // Create new instance with string array if ((!IsPackageTooHeavy(pounds)) && (!IsPackageTooLarge(length, height, width))) { var packageSize = GetPackageSize(length, height, width); // RJH get all XML strings not commented out for USPSStrings. // RJH V3 USPS Service must be Express, Express SH, Express Commercial, Express SH Commercial, First Class, Priority, Priority Commercial, Parcel, Library, BPM, Media, ALL or ONLINE; foreach (string element in xmlStrings.Elements) // Loop over elements with property { sb.Append("<Package ID=\"0\">"); // sb.AppendFormat("<Service>{0}</Service>", USPSService.All); sb.AppendFormat("<Service>{0}</Service>", element); sb.AppendFormat("<ZipOrigination>{0}</ZipOrigination>", zipPostalCodeFrom); sb.AppendFormat("<ZipDestination>{0}</ZipDestination>", zipPostalCodeTo); sb.AppendFormat("<Pounds>{0}</Pounds>", pounds); sb.AppendFormat("<Ounces>{0}</Ounces>", ounces); sb.AppendFormat("<Size>{0}</Size>", packageSize); sb.Append("<Machinable>FALSE</Machinable>"); sb.Append("</Package>"); } } else { int totalPackages = 1; int totalPackagesDims = 1; int totalPackagesWeights = 1; if (IsPackageTooHeavy(pounds)) { totalPackagesWeights = Convert.ToInt32(Math.Ceiling((decimal)pounds / (decimal)MAXPACKAGEWEIGHT)); } if (IsPackageTooLarge(length, height, width)) { totalPackagesDims = Convert.ToInt32(Math.Ceiling((decimal)TotalPackageSize(length, height, width) / (decimal)108)); } totalPackages = totalPackagesDims > totalPackagesWeights ? totalPackagesDims : totalPackagesWeights; if (totalPackages == 0) totalPackages = 1; int pounds2 = pounds / totalPackages; //we don't use ounces int ounces2 = ounces / totalPackages; int height2 = height / totalPackages; int width2 = width / totalPackages; int length2 = length / totalPackages; if (pounds2 < 1) pounds2 = 1; if (height2 < 1) height2 = 1; if (width2 < 1) width2 = 1; if (length2 < 1) length2 = 1; var packageSize = GetPackageSize(length2, height2, width2); for (int i = 0; i < totalPackages; i++) { foreach (string element in xmlStrings.Elements) { sb.AppendFormat("<Package ID=\"{0}\">", i.ToString()); // sb.AppendFormat("<Service>{0}</Service>", USPSService.All); sb.AppendFormat("<Service>{0}</Service>", element); sb.AppendFormat("<ZipOrigination>{0}</ZipOrigination>", zipPostalCodeFrom); sb.AppendFormat("<ZipDestination>{0}</ZipDestination>", zipPostalCodeTo); sb.AppendFormat("<Pounds>{0}</Pounds>", pounds2); sb.AppendFormat("<Ounces>{0}</Ounces>", ounces2); sb.AppendFormat("<Size>{0}</Size>", packageSize); sb.Append("<Machinable>FALSE</Machinable>"); sb.Append("</Package>"); } } } sb.Append("</RateV3Request>"); requestString = "API=RateV3&XML=" + sb.ToString(); #endregion } else { #region international request var sb = new StringBuilder(); sb.AppendFormat("<IntlRateRequest USERID=\"{0}\" PASSWORD=\"{1}\">", username, password); if ((!IsPackageTooHeavy(pounds)) && (!IsPackageTooLarge(length, height, width))) { //little hack here for international requests length = 12; width = 12; height = 12; string mailType = "Package"; //Package, Envelope sb.Append("<Package ID=\"0\">"); // No use of pounds in this classes sb.Append("<Pounds>0</Pounds>"); ounces = PoundsToOunces(pounds); sb.AppendFormat("<Ounces>{0}</Ounces>", ounces); sb.Append("<Machinable>FALSE</Machinable>"); sb.AppendFormat("<MailType>{0}</MailType>", mailType); sb.Append("<GXG>"); sb.AppendFormat("<Length>{0}</Length>", length); sb.AppendFormat("<Width>{0}</Width>", width); sb.AppendFormat("<Height>{0}</Height>", height); sb.Append("<POBoxFlag>N</POBoxFlag>"); sb.Append("<GiftFlag>N</GiftFlag>"); sb.Append("</GXG>"); sb.AppendFormat("<Country>{0}</Country>", shipmentPackage.ShippingAddress.Country.Name); sb.Append("</Package>"); } else { int totalPackages = 1; int totalPackagesDims = 1; int totalPackagesWeights = 1; if (IsPackageTooHeavy(pounds)) { totalPackagesWeights = Convert.ToInt32(Math.Ceiling((decimal)pounds / (decimal)MAXPACKAGEWEIGHT)); } if (IsPackageTooLarge(length, height, width)) { totalPackagesDims = Convert.ToInt32(Math.Ceiling((decimal)TotalPackageSize(length, height, width) / (decimal)108)); } totalPackages = totalPackagesDims > totalPackagesWeights ? totalPackagesDims : totalPackagesWeights; if (totalPackages == 0) totalPackages = 1; int pounds2 = pounds / totalPackages; //we don't use ounces int ounces2 = ounces / totalPackages; int height2 = height / totalPackages; int width2 = width / totalPackages; int length2 = length / totalPackages; if (pounds2 < 1) pounds2 = 1; if (height2 < 1) height2 = 1; if (width2 < 1) width2 = 1; if (length2 < 1) length2 = 1; //little hack here for international requests length2 = 12; width2 = 12; height2 = 12; for (int i = 0; i < totalPackages; i++) { string mailType = "Package"; //Package, Envelope sb.AppendFormat("<Package ID=\"{0}\">", i.ToString()); // No use of pounds in this classes sb.Append("<Pounds>0</Pounds>"); ounces2 = PoundsToOunces(pounds2); sb.AppendFormat("<Ounces>{0}</Ounces>", ounces2); sb.Append("<Machinable>FALSE</Machinable>"); sb.AppendFormat("<MailType>{0}</MailType>", mailType); sb.Append("<GXG>"); sb.AppendFormat("<Length>{0}</Length>", length2); sb.AppendFormat("<Width>{0}</Width>", width2); sb.AppendFormat("<Height>{0}</Height>", height2); sb.Append("<POBoxFlag>N</POBoxFlag>"); sb.Append("<GiftFlag>N</GiftFlag>"); sb.Append("</GXG>"); sb.AppendFormat("<Country>{0}</Country>", shipmentPackage.ShippingAddress.Country.Name); sb.Append("</Package>"); } } sb.Append("</IntlRateRequest>"); requestString = "API=IntlRate&XML=" + sb.ToString(); #endregion } return requestString; }
private string CreateRequest(string Username, string Password, ShipmentPackage ShipmentPackage) { int length = Convert.ToInt32(Math.Ceiling(ShipmentPackage.GetTotalLength())); int height = Convert.ToInt32(Math.Ceiling(ShipmentPackage.GetTotalHeight())); int width = Convert.ToInt32(Math.Ceiling(ShipmentPackage.GetTotalWidth())); decimal weight = ShippingManager.GetShoppingCartTotalWeigth(ShipmentPackage.Items); string zipPostalCodeFrom = ShipmentPackage.ZipPostalCodeFrom; string zipPostalCodeTo = ShipmentPackage.ShippingAddress.ZipPostalCode; //valid values for testing. http://testing.shippingapis.com/ShippingAPITest.dll //Zip to = "20008"; Zip from ="10022"; weight = 2; //TODO convert measure weight MeasureWeight baseWeightIn = MeasureManager.BaseWeightIn; if (baseWeightIn.SystemKeyword != "lb") throw new NopException("USPS shipping service. Base weight should be set to lb(s)"); //TODO convert measure dimension MeasureDimension baseDimensionIn = MeasureManager.BaseDimensionIn; if (baseDimensionIn.SystemKeyword != "inches") throw new NopException("USPS shipping service. Base dimension should be set to inch(es)"); int pounds = Convert.ToInt32(Math.Truncate(weight)); //int ounces = Convert.ToInt32((weight - pounds) * 16.0M); int ounces = 0; StringBuilder sb = new StringBuilder(); sb.AppendFormat("<RateV3Request USERID=\"{0}\" PASSWORD=\"{1}\">", Username, Password); USPSStrings xmlStrings = new USPSStrings(); // Create new instance with string array if ((!IsPackageTooHeavy(pounds)) && (!IsPackageTooLarge(length, height, width))) { USPSPackageSize packageSize = GetPackageSize(length, height, width); // RJH get all XML strings not commented out for USPSStrings. // RJH V3 USPS Service must be Express, Express SH, Express Commercial, Express SH Commercial, First Class, Priority, Priority Commercial, Parcel, Library, BPM, Media, ALL or ONLINE; foreach (string element in xmlStrings.Elements) // Loop over elements with property { sb.Append("<Package ID=\"0\">"); // sb.AppendFormat("<Service>{0}</Service>", USPSService.All); sb.AppendFormat("<Service>{0}</Service>", element); sb.AppendFormat("<ZipOrigination>{0}</ZipOrigination>", zipPostalCodeFrom); sb.AppendFormat("<ZipDestination>{0}</ZipDestination>", zipPostalCodeTo); sb.AppendFormat("<Pounds>{0}</Pounds>", pounds); sb.AppendFormat("<Ounces>{0}</Ounces>", ounces); sb.AppendFormat("<Size>{0}</Size>", packageSize); sb.Append("<Machinable>FALSE</Machinable>"); sb.Append("</Package>"); } } else { int totalPackages = 1; int totalPackagesDims = 1; int totalPackagesWeights = 1; if (IsPackageTooHeavy(pounds)) { totalPackagesWeights = Convert.ToInt32(Math.Ceiling((decimal)pounds / (decimal)MAXPACKAGEWEIGHT)); } if (IsPackageTooLarge(length, height, width)) { totalPackagesDims = TotalPackageSize(length, height, width)/108; } totalPackages = totalPackagesDims > totalPackagesWeights ? totalPackagesDims : totalPackagesWeights; if (totalPackages == 0) totalPackages = 1; int pounds2 = pounds / totalPackages; int ounces2 = ounces / totalPackages; int height2 = height / totalPackages; int width2 = width / totalPackages; USPSPackageSize packageSize = GetPackageSize(length, height2, width2); for (int i = 0; i < totalPackages; i++) { foreach (string element in xmlStrings.Elements) { sb.AppendFormat("<Package ID=\"{0}\">", i.ToString()); // sb.AppendFormat("<Service>{0}</Service>", USPSService.All); sb.AppendFormat("<Service>{0}</Service>", element); sb.AppendFormat("<ZipOrigination>{0}</ZipOrigination>", zipPostalCodeFrom); sb.AppendFormat("<ZipDestination>{0}</ZipDestination>", zipPostalCodeTo); sb.AppendFormat("<Pounds>{0}</Pounds>", pounds2); sb.AppendFormat("<Ounces>{0}</Ounces>", ounces2); sb.AppendFormat("<Size>{0}</Size>", packageSize); sb.Append("<Machinable>FALSE</Machinable>"); sb.Append("</Package>"); } } } sb.Append("</RateV3Request>"); string requestString = "API=RateV3&XML=" + sb.ToString(); return requestString; }
private string CreateRequest(string username, string password, ShipmentPackage shipmentPackage) { var usedMeasureWeight = IoC.Resolve <IMeasureService>().GetMeasureWeightBySystemKeyword(MEASUREWEIGHTSYSTEMKEYWORD); if (usedMeasureWeight == null) { throw new NopException(string.Format("USPS shipping service. Could not load \"{0}\" measure weight", MEASUREWEIGHTSYSTEMKEYWORD)); } var usedMeasureDimension = IoC.Resolve <IMeasureService>().GetMeasureDimensionBySystemKeyword(MEASUREDIMENSIONSYSTEMKEYWORD); if (usedMeasureDimension == null) { throw new NopException(string.Format("USPS shipping service. Could not load \"{0}\" measure dimension", MEASUREDIMENSIONSYSTEMKEYWORD)); } int length = Convert.ToInt32(Math.Ceiling(IoC.Resolve <IMeasureService>().ConvertDimension(shipmentPackage.GetTotalLength(), IoC.Resolve <IMeasureService>().BaseDimensionIn, usedMeasureDimension))); int height = Convert.ToInt32(Math.Ceiling(IoC.Resolve <IMeasureService>().ConvertDimension(shipmentPackage.GetTotalHeight(), IoC.Resolve <IMeasureService>().BaseDimensionIn, usedMeasureDimension))); int width = Convert.ToInt32(Math.Ceiling(IoC.Resolve <IMeasureService>().ConvertDimension(shipmentPackage.GetTotalWidth(), IoC.Resolve <IMeasureService>().BaseDimensionIn, usedMeasureDimension))); int weight = Convert.ToInt32(Math.Ceiling(IoC.Resolve <IMeasureService>().ConvertWeight(IoC.Resolve <IShippingService>().GetShoppingCartTotalWeight(shipmentPackage.Items, shipmentPackage.Customer), IoC.Resolve <IMeasureService>().BaseWeightIn, usedMeasureWeight))); if (length < 1) { length = 1; } if (height < 1) { height = 1; } if (width < 1) { width = 1; } if (weight < 1) { weight = 1; } string zipPostalCodeFrom = shipmentPackage.ZipPostalCodeFrom; string zipPostalCodeTo = shipmentPackage.ShippingAddress.ZipPostalCode; //valid values for testing. http://testing.shippingapis.com/ShippingAPITest.dll //Zip to = "20008"; Zip from ="10022"; weight = 2; int pounds = weight; //we don't use ounce //int ounces = Convert.ToInt32((weight - pounds) * 16.0M); int ounces = 0; if (pounds < 1) { pounds = 1; } string requestString = string.Empty; bool isDomestic = IsDomesticRequest(shipmentPackage); if (isDomestic) { #region domestic request zipPostalCodeFrom = CommonHelper.EnsureMaximumLength(CommonHelper.EnsureNumericOnly(zipPostalCodeFrom), 5); zipPostalCodeTo = CommonHelper.EnsureMaximumLength(CommonHelper.EnsureNumericOnly(zipPostalCodeTo), 5); var sb = new StringBuilder(); sb.AppendFormat("<RateV3Request USERID=\"{0}\" PASSWORD=\"{1}\">", username, password); var xmlStrings = new USPSStrings(); // Create new instance with string array if ((!IsPackageTooHeavy(pounds)) && (!IsPackageTooLarge(length, height, width))) { var packageSize = GetPackageSize(length, height, width); // RJH get all XML strings not commented out for USPSStrings. // RJH V3 USPS Service must be Express, Express SH, Express Commercial, Express SH Commercial, First Class, Priority, Priority Commercial, Parcel, Library, BPM, Media, ALL or ONLINE; foreach (string element in xmlStrings.Elements) // Loop over elements with property { sb.Append("<Package ID=\"0\">"); // sb.AppendFormat("<Service>{0}</Service>", USPSService.All); sb.AppendFormat("<Service>{0}</Service>", element); sb.AppendFormat("<ZipOrigination>{0}</ZipOrigination>", zipPostalCodeFrom); sb.AppendFormat("<ZipDestination>{0}</ZipDestination>", zipPostalCodeTo); sb.AppendFormat("<Pounds>{0}</Pounds>", pounds); sb.AppendFormat("<Ounces>{0}</Ounces>", ounces); sb.AppendFormat("<Size>{0}</Size>", packageSize); sb.Append("<Machinable>FALSE</Machinable>"); sb.Append("</Package>"); } } else { int totalPackages = 1; int totalPackagesDims = 1; int totalPackagesWeights = 1; if (IsPackageTooHeavy(pounds)) { totalPackagesWeights = Convert.ToInt32(Math.Ceiling((decimal)pounds / (decimal)MAXPACKAGEWEIGHT)); } if (IsPackageTooLarge(length, height, width)) { totalPackagesDims = Convert.ToInt32(Math.Ceiling((decimal)TotalPackageSize(length, height, width) / (decimal)108)); } totalPackages = totalPackagesDims > totalPackagesWeights ? totalPackagesDims : totalPackagesWeights; if (totalPackages == 0) { totalPackages = 1; } int pounds2 = pounds / totalPackages; //we don't use ounces int ounces2 = ounces / totalPackages; int height2 = height / totalPackages; int width2 = width / totalPackages; int length2 = length / totalPackages; if (pounds2 < 1) { pounds2 = 1; } if (height2 < 1) { height2 = 1; } if (width2 < 1) { width2 = 1; } if (length2 < 1) { length2 = 1; } var packageSize = GetPackageSize(length2, height2, width2); for (int i = 0; i < totalPackages; i++) { foreach (string element in xmlStrings.Elements) { sb.AppendFormat("<Package ID=\"{0}\">", i.ToString()); // sb.AppendFormat("<Service>{0}</Service>", USPSService.All); sb.AppendFormat("<Service>{0}</Service>", element); sb.AppendFormat("<ZipOrigination>{0}</ZipOrigination>", zipPostalCodeFrom); sb.AppendFormat("<ZipDestination>{0}</ZipDestination>", zipPostalCodeTo); sb.AppendFormat("<Pounds>{0}</Pounds>", pounds2); sb.AppendFormat("<Ounces>{0}</Ounces>", ounces2); sb.AppendFormat("<Size>{0}</Size>", packageSize); sb.Append("<Machinable>FALSE</Machinable>"); sb.Append("</Package>"); } } } sb.Append("</RateV3Request>"); requestString = "API=RateV3&XML=" + sb.ToString(); #endregion } else { #region international request var sb = new StringBuilder(); sb.AppendFormat("<IntlRateRequest USERID=\"{0}\" PASSWORD=\"{1}\">", username, password); if ((!IsPackageTooHeavy(pounds)) && (!IsPackageTooLarge(length, height, width))) { //little hack here for international requests length = 12; width = 12; height = 12; string mailType = "Package"; //Package, Envelope sb.Append("<Package ID=\"0\">"); // No use of pounds in this classes sb.Append("<Pounds>0</Pounds>"); ounces = PoundsToOunces(pounds); sb.AppendFormat("<Ounces>{0}</Ounces>", ounces); sb.Append("<Machinable>FALSE</Machinable>"); sb.AppendFormat("<MailType>{0}</MailType>", mailType); sb.Append("<GXG>"); sb.AppendFormat("<Length>{0}</Length>", length); sb.AppendFormat("<Width>{0}</Width>", width); sb.AppendFormat("<Height>{0}</Height>", height); sb.Append("<POBoxFlag>N</POBoxFlag>"); sb.Append("<GiftFlag>N</GiftFlag>"); sb.Append("</GXG>"); sb.AppendFormat("<Country>{0}</Country>", shipmentPackage.ShippingAddress.Country.Name); sb.Append("</Package>"); } else { int totalPackages = 1; int totalPackagesDims = 1; int totalPackagesWeights = 1; if (IsPackageTooHeavy(pounds)) { totalPackagesWeights = Convert.ToInt32(Math.Ceiling((decimal)pounds / (decimal)MAXPACKAGEWEIGHT)); } if (IsPackageTooLarge(length, height, width)) { totalPackagesDims = Convert.ToInt32(Math.Ceiling((decimal)TotalPackageSize(length, height, width) / (decimal)108)); } totalPackages = totalPackagesDims > totalPackagesWeights ? totalPackagesDims : totalPackagesWeights; if (totalPackages == 0) { totalPackages = 1; } int pounds2 = pounds / totalPackages; //we don't use ounces int ounces2 = ounces / totalPackages; int height2 = height / totalPackages; int width2 = width / totalPackages; int length2 = length / totalPackages; if (pounds2 < 1) { pounds2 = 1; } if (height2 < 1) { height2 = 1; } if (width2 < 1) { width2 = 1; } if (length2 < 1) { length2 = 1; } //little hack here for international requests length2 = 12; width2 = 12; height2 = 12; for (int i = 0; i < totalPackages; i++) { string mailType = "Package"; //Package, Envelope sb.AppendFormat("<Package ID=\"{0}\">", i.ToString()); // No use of pounds in this classes sb.Append("<Pounds>0</Pounds>"); ounces2 = PoundsToOunces(pounds2); sb.AppendFormat("<Ounces>{0}</Ounces>", ounces2); sb.Append("<Machinable>FALSE</Machinable>"); sb.AppendFormat("<MailType>{0}</MailType>", mailType); sb.Append("<GXG>"); sb.AppendFormat("<Length>{0}</Length>", length2); sb.AppendFormat("<Width>{0}</Width>", width2); sb.AppendFormat("<Height>{0}</Height>", height2); sb.Append("<POBoxFlag>N</POBoxFlag>"); sb.Append("<GiftFlag>N</GiftFlag>"); sb.Append("</GXG>"); sb.AppendFormat("<Country>{0}</Country>", shipmentPackage.ShippingAddress.Country.Name); sb.Append("</Package>"); } } sb.Append("</IntlRateRequest>"); requestString = "API=IntlRate&XML=" + sb.ToString(); #endregion } return(requestString); }
private string CreateRequest(string Username, string Password, ShipmentPackage ShipmentPackage) { int length = Convert.ToInt32(Math.Ceiling(ShipmentPackage.GetTotalLength())); int height = Convert.ToInt32(Math.Ceiling(ShipmentPackage.GetTotalHeight())); int width = Convert.ToInt32(Math.Ceiling(ShipmentPackage.GetTotalWidth())); decimal weight = ShippingManager.GetShoppingCartTotalWeigth(ShipmentPackage.Items); string zipPostalCodeFrom = ShipmentPackage.ZipPostalCodeFrom; string zipPostalCodeTo = ShipmentPackage.ShippingAddress.ZipPostalCode; //valid values for testing. http://testing.shippingapis.com/ShippingAPITest.dll //Zip to = "20008"; Zip from ="10022"; weight = 2; //TODO convert measure weight MeasureWeight baseWeightIn = MeasureManager.BaseWeightIn; if (baseWeightIn.SystemKeyword != "lb") { throw new NopException("USPS shipping service. Base weight should be set to lb(s)"); } //TODO convert measure dimension MeasureDimension baseDimensionIn = MeasureManager.BaseDimensionIn; if (baseDimensionIn.SystemKeyword != "inches") { throw new NopException("USPS shipping service. Base dimension should be set to inch(es)"); } int pounds = Convert.ToInt32(Math.Truncate(weight)); //int ounces = Convert.ToInt32((weight - pounds) * 16.0M); int ounces = 0; StringBuilder sb = new StringBuilder(); sb.AppendFormat("<RateV3Request USERID=\"{0}\" PASSWORD=\"{1}\">", Username, Password); USPSStrings xmlStrings = new USPSStrings(); // Create new instance with string array if ((!IsPackageTooHeavy(pounds)) && (!IsPackageTooLarge(length, height, width))) { USPSPackageSize packageSize = GetPackageSize(length, height, width); // RJH get all XML strings not commented out for USPSStrings. // RJH V3 USPS Service must be Express, Express SH, Express Commercial, Express SH Commercial, First Class, Priority, Priority Commercial, Parcel, Library, BPM, Media, ALL or ONLINE; foreach (string element in xmlStrings.Elements) // Loop over elements with property { sb.Append("<Package ID=\"0\">"); // sb.AppendFormat("<Service>{0}</Service>", USPSService.All); sb.AppendFormat("<Service>{0}</Service>", element); sb.AppendFormat("<ZipOrigination>{0}</ZipOrigination>", zipPostalCodeFrom); sb.AppendFormat("<ZipDestination>{0}</ZipDestination>", zipPostalCodeTo); sb.AppendFormat("<Pounds>{0}</Pounds>", pounds); sb.AppendFormat("<Ounces>{0}</Ounces>", ounces); sb.AppendFormat("<Size>{0}</Size>", packageSize); sb.Append("<Machinable>FALSE</Machinable>"); sb.Append("</Package>"); } } else { int totalPackages = 1; int totalPackagesDims = 1; int totalPackagesWeights = 1; if (IsPackageTooHeavy(pounds)) { totalPackagesWeights = Convert.ToInt32(Math.Ceiling((decimal)pounds / (decimal)MAXPACKAGEWEIGHT)); } if (IsPackageTooLarge(length, height, width)) { totalPackagesDims = TotalPackageSize(length, height, width) / 108; } totalPackages = totalPackagesDims > totalPackagesWeights ? totalPackagesDims : totalPackagesWeights; if (totalPackages == 0) { totalPackages = 1; } int pounds2 = pounds / totalPackages; int ounces2 = ounces / totalPackages; int height2 = height / totalPackages; int width2 = width / totalPackages; USPSPackageSize packageSize = GetPackageSize(length, height2, width2); for (int i = 0; i < totalPackages; i++) { foreach (string element in xmlStrings.Elements) { sb.AppendFormat("<Package ID=\"{0}\">", i.ToString()); // sb.AppendFormat("<Service>{0}</Service>", USPSService.All); sb.AppendFormat("<Service>{0}</Service>", element); sb.AppendFormat("<ZipOrigination>{0}</ZipOrigination>", zipPostalCodeFrom); sb.AppendFormat("<ZipDestination>{0}</ZipDestination>", zipPostalCodeTo); sb.AppendFormat("<Pounds>{0}</Pounds>", pounds2); sb.AppendFormat("<Ounces>{0}</Ounces>", ounces2); sb.AppendFormat("<Size>{0}</Size>", packageSize); sb.Append("<Machinable>FALSE</Machinable>"); sb.Append("</Package>"); } } } sb.Append("</RateV3Request>"); string requestString = "API=RateV3&XML=" + sb.ToString(); return(requestString); }