using System; using System.Xml; using System.Data; using System.Collections.Generic; using System.Configuration; using System.Web; using System.IO; using System.Text; using System.Collections.Specialized; public class UPS : ShippingBase { private const string TestURL = "https://wwwcie.ups.com/ups.app/xml/"; private const string ProductionURL = "https://onlinetools.ups.com/ups.app/xml/"; private string postURL { get { return (Configuration.Get("Shipping.UPS.TestMode")).Equals("On") ? TestURL : ProductionURL; } } internal class AccessRequest { private string _AccessKey; private string _UserID; private string _Password; public string AccessKey { get { return _AccessKey; } set { _AccessKey = value; } } public string UserID { get { return _UserID; } set { _UserID = value; } } public string Password { get { return _Password; } set { _Password = value; } } private bool EnsureRequiredFields() { return (_AccessKey != null && _AccessKey != string.Empty && _UserID != null && _UserID != string.Empty && _Password != null && _Password != string.Empty); } public void Render(XmlTextWriter writer) { // begin the object writer.WriteProcessingInstruction("xml", "version=\"1.0\""); writer.WriteStartElement("AccessRequest"); // writer.WriteAttributeString("xml:lang", "en-US"); writer.WriteElementString("AccessLicenseNumber", _AccessKey); writer.WriteElementString("UserId", _UserID); writer.WriteElementString("Password", _Password); writer.WriteEndElement(); // } } protected class ShipmentAcceptRequest { internal RequestClass Request; public string ShipmentDigest; public ShipmentAcceptRequest() { Request = new RequestClass(); Request.RequestAction = "ShipAccept"; } public void Render(XmlTextWriter writer) { writer.WriteProcessingInstruction("xml", "version=\"1.0\""); writer.WriteStartElement("ShipmentAcceptRequest"); // if (Request != null) { writer.WriteStartElement("Request"); Request.Render(writer); writer.WriteEndElement(); } if (ShipmentDigest != null && ShipmentDigest != string.Empty) writer.WriteElementString("ShipmentDigest", ShipmentDigest); writer.WriteEndElement(); // } } protected class ShipmentConfirmRequest { internal RequestClass Request; internal ShipmentClass Shipment; internal LabelSpecificationClass LabelSpecification; public ShipmentConfirmRequest() { Request = new RequestClass(); LabelSpecification = new LabelSpecificationClass(); Shipment = new ShipmentClass(); } public void Render(XmlTextWriter writer) { writer.WriteProcessingInstruction("xml", "version=\"1.0\""); writer.WriteStartElement("ShipmentConfirmRequest"); // if (Request != null) { writer.WriteStartElement("Request"); Request.RequestAction = "ShipConfirm"; Request.Render(writer); writer.WriteEndElement(); } if (Shipment != null) { writer.WriteStartElement("Shipment"); Shipment.Render(writer); writer.WriteEndElement(); } if (LabelSpecification != null) { writer.WriteStartElement("LabelSpecification"); LabelSpecification.Render(writer); writer.WriteEndElement(); } writer.WriteEndElement(); // } } protected class VoidShipmentRequest { internal RequestClass Request; public string ShipmentIdentificationNumber; public VoidShipmentRequest(string TrackingNumber) { Request = new RequestClass(); Request.RequestAction = "1"; ShipmentIdentificationNumber = TrackingNumber; } public void Render(XmlTextWriter writer) { writer.WriteProcessingInstruction("xml", "version=\"1.0\""); writer.WriteStartElement("VoidShipmentRequest"); // if (Request != null) { writer.WriteStartElement("Request"); Request.Render(writer); writer.WriteEndElement(); } if (ShipmentIdentificationNumber != null && ShipmentIdentificationNumber != string.Empty) writer.WriteElementString("ShipmentIdentificationNumber", ShipmentIdentificationNumber); writer.WriteEndElement(); // } } protected class RatingServiceSelectionRequest { internal RequestClass Request; internal ShipmentClass Shipment; public RatingServiceSelectionRequest() { Request = new RequestClass(); Shipment = new ShipmentClass(); } public void Render(XmlTextWriter writer) { writer.WriteProcessingInstruction("xml", "version=\"1.0\""); writer.WriteStartElement("RatingServiceSelectionRequest"); // if (Request != null) { writer.WriteStartElement("Request"); Request.Render(writer); writer.WriteEndElement(); } if (Shipment != null) { writer.WriteStartElement("Shipment"); Shipment.Render(writer); writer.WriteEndElement(); } writer.WriteEndElement(); // } } protected class LabelSpecificationClass { public LabelPrintMethodClass LabelPrintMethod; public LabelImageFormatClass LabelImageFormat; public LabelSpecificationClass() { LabelPrintMethod = new LabelPrintMethodClass(); LabelImageFormat = new LabelImageFormatClass(); } public void Render(XmlTextWriter writer) { if (LabelPrintMethod != null) { writer.WriteStartElement("LabelPrintMethod"); LabelPrintMethod.Render(writer); writer.WriteEndElement(); } if (LabelImageFormat != null) { writer.WriteStartElement("LabelImageFormat"); LabelImageFormat.Render(writer); writer.WriteEndElement(); } } }; protected class LabelImageFormatClass { public string Code = null; public string Description = null; public LabelImageFormatClass() { Code = "GIF"; } public void Render(XmlTextWriter writer) { if (Code != null && Code != string.Empty) writer.WriteElementString("Code", Code); if (Description != null && Description != string.Empty) writer.WriteElementString("Description", Description); } }; protected class LabelPrintMethodClass { public string Code = null; public string Description = null; public LabelPrintMethodClass() { Code = "GIF"; } public void Render(XmlTextWriter writer) { if (Code != null && Code != string.Empty) writer.WriteElementString("Code", Code); if (Description != null && Description != string.Empty) writer.WriteElementString("Description", Description); } }; protected class RequestClass { public string RequestAction; public string RequestOption; public TransactionReferenceClass TransactionReference; public void Render(XmlTextWriter writer) { writer.WriteElementString("RequestAction", RequestAction); writer.WriteElementString("RequestOption", RequestOption); } }; protected class TransactionReferenceClass { public string CustomerContext = null; public string XpciVersion = null; public TransactionReferenceClass TransactionReference; public void Render(XmlTextWriter writer) { if (CustomerContext != null && CustomerContext != string.Empty) writer.WriteElementString("CustomerContext", CustomerContext); if (XpciVersion != null && XpciVersion != string.Empty) writer.WriteElementString("XpciVersion", XpciVersion); } }; protected class ShipmentClass { public string Description = null; public ShipperClass Shipper; public ShipToClass ShipTo; public ShipFromClass ShipFrom; public ShipmentWeightClass ShipmentWeight = null; public ServiceClass Service; public string DocumentsOnly = null; public List Packages; public ShipmentServiceOptionsClass ShipmentServiceOptions = null; public RateInformationClass RateInformation = null; public PaymentInformationClass PaymentInformation = null; public bool printPaymentInformation = true; public ShipmentClass() { Shipper = new ShipperClass(); ShipTo = new ShipToClass(); ShipFrom = new ShipFromClass(); Packages = new List(); PaymentInformation = new PaymentInformationClass(); Service = new ServiceClass(); } public void Render(XmlTextWriter writer) { if (Description != null && Description != string.Empty) writer.WriteElementString("Description", Description); if (Shipper != null) { writer.WriteStartElement("Shipper"); Shipper.Render(writer); writer.WriteEndElement(); } if (ShipTo != null) { writer.WriteStartElement("ShipTo"); ShipTo.Render(writer); writer.WriteEndElement(); } if (PaymentInformation != null && printPaymentInformation) { writer.WriteStartElement("PaymentInformation"); PaymentInformation.Render(writer); writer.WriteEndElement(); } if (ShipFrom != null) { writer.WriteStartElement("ShipFrom"); ShipFrom.Render(writer); writer.WriteEndElement(); } if (ShipmentWeight != null) { writer.WriteStartElement("ShipmentWeight"); ShipmentWeight.Render(writer); writer.WriteEndElement(); } if (Service != null) { writer.WriteStartElement("Service"); Service.Render(writer); writer.WriteEndElement(); } if (DocumentsOnly != null && DocumentsOnly != string.Empty) writer.WriteElementString("DocumentsOnly", DocumentsOnly); if (Packages != null) { foreach (PackageClass Package in Packages) { writer.WriteStartElement("Package"); Package.Render(writer); writer.WriteEndElement(); } } if (ShipmentServiceOptions != null) { writer.WriteStartElement("ShipmentServiceOptions"); ShipmentServiceOptions.Render(writer); writer.WriteEndElement(); } if (RateInformation != null) { writer.WriteStartElement("RateInformation"); RateInformation.Render(writer); writer.WriteEndElement(); } } }; protected class ShipperClass { public string Name = null; public string AttentionName = null; public string ShipperNumber = null; public string TaxIdentificationNumber = null; public string PhoneNumber = null; public string FaxNumber = null; public string EMailAddress = null; public ShipperAddressClass Address; public ShipperClass() { Address = new ShipperAddressClass(); } public void Render(XmlTextWriter writer) { if (Name != null && Name != string.Empty) writer.WriteElementString("Name", Name); if (AttentionName != null && AttentionName != string.Empty) writer.WriteElementString("AttentionName", AttentionName); if (ShipperNumber != null && ShipperNumber != string.Empty) writer.WriteElementString("ShipperNumber", ShipperNumber); if (TaxIdentificationNumber != null && TaxIdentificationNumber != string.Empty) writer.WriteElementString("TaxIdentificationNumber", TaxIdentificationNumber); if (PhoneNumber != null && PhoneNumber != string.Empty) writer.WriteElementString("PhoneNumber", PhoneNumber); if (FaxNumber != null && FaxNumber != string.Empty) writer.WriteElementString("FaxNumber", FaxNumber); if (EMailAddress != null && EMailAddress != string.Empty) writer.WriteElementString("EMailAddress", EMailAddress); if (Address != null) { writer.WriteStartElement("Address"); Address.Render(writer); writer.WriteEndElement(); } } }; protected class ShipperAddressClass { public string AddressLine1 = null; public string AddressLine2 = null; public string AddressLine3 = null; public string City = null; public string StateProvinceCode = null; public string PostalCode = null; public string CountryCode = null; public ShipperAddressClass() { CountryCode = "US"; } public void Render(XmlTextWriter writer) { if (AddressLine1 != null && AddressLine1 != string.Empty) writer.WriteElementString("AddressLine1", AddressLine1); if (AddressLine2 != null && AddressLine2 != string.Empty) writer.WriteElementString("AddressLine2", AddressLine2); if (AddressLine3 != null && AddressLine3 != string.Empty) writer.WriteElementString("AddressLine3", AddressLine3); if (City != null && City != string.Empty) writer.WriteElementString("City", City); if (StateProvinceCode != null && StateProvinceCode != string.Empty) writer.WriteElementString("StateProvinceCode", StateProvinceCode); if (PostalCode != null && PostalCode != string.Empty) writer.WriteElementString("PostalCode", PostalCode); if (CountryCode != null && CountryCode != string.Empty) writer.WriteElementString("CountryCode", CountryCode); } }; protected class PrepaidClass { public BillShipperClass BillShipper; public PrepaidClass() { BillShipper = new BillShipperClass(); } public void Render(XmlTextWriter writer) { if (BillShipper != null) { writer.WriteStartElement("BillShipper"); BillShipper.Render(writer); writer.WriteEndElement(); } } }; protected class BillShipperClass { public string AccountNumber; public BillShipperClass() { } public void Render(XmlTextWriter writer) { if (AccountNumber != null && AccountNumber != string.Empty) writer.WriteElementString("AccountNumber", AccountNumber); } }; protected class PaymentInformationClass { public PrepaidClass PrepaidClass; public ShipToOrFromAddressClass Address; public string ShipperAssignedIdentificationNumber = null; public string CompanyName = null; public string AttentionName = null; public string PhoneNumber = null; public string TaxIdentificationNumber = null; public string FaxNumber = null; public string EMailAddress = null; public PaymentInformationClass() { PrepaidClass = new PrepaidClass(); Address = new ShipToOrFromAddressClass(); } public void Render(XmlTextWriter writer) { if (ShipperAssignedIdentificationNumber != null && ShipperAssignedIdentificationNumber != string.Empty) writer.WriteElementString("ShipperAssignedIdentificationNumber", ShipperAssignedIdentificationNumber); if (CompanyName != null && CompanyName != string.Empty) writer.WriteElementString("CompanyName", CompanyName); if (AttentionName != null && AttentionName != string.Empty) writer.WriteElementString("AttentionName", AttentionName); if (PhoneNumber != null && PhoneNumber != string.Empty) writer.WriteElementString("PhoneNumber", PhoneNumber); if (TaxIdentificationNumber != null && TaxIdentificationNumber != string.Empty) writer.WriteElementString("TaxIdentificationNumber", TaxIdentificationNumber); if (FaxNumber != null && FaxNumber != string.Empty) writer.WriteElementString("FaxNumber", FaxNumber); if (Address != null) { writer.WriteStartElement("Address"); Address.Render(writer); writer.WriteEndElement(); } if (PrepaidClass != null) { writer.WriteStartElement("Prepaid"); PrepaidClass.Render(writer); writer.WriteEndElement(); } } }; protected class ShipToClass { public string ShipperAssignedIdentificationNumber; public string CompanyName; public string AttentionName; public string PhoneNumber; public string TaxIdentificationNumber; public string FaxNumber; public string EMailAddress; public ShipToOrFromAddressClass Address; public ShipToClass() { Address = new ShipToOrFromAddressClass(); } public void Render(XmlTextWriter writer) { if (ShipperAssignedIdentificationNumber != null && ShipperAssignedIdentificationNumber != string.Empty) writer.WriteElementString("ShipperAssignedIdentificationNumber", ShipperAssignedIdentificationNumber); if (CompanyName != null && CompanyName != string.Empty) writer.WriteElementString("CompanyName", CompanyName); if (AttentionName != null && AttentionName != string.Empty) writer.WriteElementString("AttentionName", AttentionName); if (PhoneNumber != null && PhoneNumber != string.Empty) writer.WriteElementString("PhoneNumber", PhoneNumber); if (TaxIdentificationNumber != null && TaxIdentificationNumber != string.Empty) writer.WriteElementString("TaxIdentificationNumber", TaxIdentificationNumber); if (FaxNumber != null && FaxNumber != string.Empty) writer.WriteElementString("FaxNumber", FaxNumber); if (Address != null) { writer.WriteStartElement("Address"); Address.Render(writer); writer.WriteEndElement(); } } }; protected class ShipToOrFromAddressClass { public string AddressLine1; public string AddressLine2; public string AddressLine3; public string City; public string StateProvinceCode; public string PostalCode; public string CountryCode; public string ResidentialAddressIndicator; public string LocationID; public ShipToOrFromAddressClass() { } public void Render(XmlTextWriter writer) { if (AddressLine1 != null && AddressLine1 != string.Empty) writer.WriteElementString("AddressLine1", AddressLine1); if (AddressLine2 != null && AddressLine2 != string.Empty) writer.WriteElementString("AddressLine2", AddressLine2); if (AddressLine3 != null && AddressLine3 != string.Empty) writer.WriteElementString("AddressLine3", AddressLine3); if (City != null && City != string.Empty) writer.WriteElementString("City", City); if (StateProvinceCode != null && StateProvinceCode != string.Empty) writer.WriteElementString("StateProvinceCode", StateProvinceCode); if (PostalCode != null && PostalCode != string.Empty) writer.WriteElementString("PostalCode", PostalCode); if (CountryCode != null && CountryCode != string.Empty) writer.WriteElementString("CountryCode", CountryCode); if (ResidentialAddressIndicator != null && ResidentialAddressIndicator != string.Empty) writer.WriteElementString("ResidentialAddressIndicator", ResidentialAddressIndicator); if (LocationID != null && LocationID != string.Empty) writer.WriteElementString("LocationID", LocationID); } }; protected class ShipFromClass { public string TaxIdentificationNumber = null; public string CompanyName = null; public string AttentionName = null; public string PhoneNumber = null; public string FaxNumber = null; public ShipToOrFromAddressClass Address; public ShipFromClass() { Address = new ShipToOrFromAddressClass(); } public void Render(XmlTextWriter writer) { if (TaxIdentificationNumber != null && TaxIdentificationNumber != string.Empty) writer.WriteElementString("TaxIdentificationNumber", TaxIdentificationNumber); if (CompanyName != null && CompanyName != string.Empty) writer.WriteElementString("CompanyName", CompanyName); if (AttentionName != null && AttentionName != string.Empty) writer.WriteElementString("AttentionName", AttentionName); if (PhoneNumber != null && PhoneNumber != string.Empty) writer.WriteElementString("PhoneNumber", PhoneNumber); if (FaxNumber != null && FaxNumber != string.Empty) writer.WriteElementString("FaxNumber", FaxNumber); if (Address != null) { writer.WriteStartElement("Address"); Address.Render(writer); writer.WriteEndElement(); } } }; protected class ShipmentWeightClass { public WeightUnitOfMeasurementClass UnitOfMeasurement = null; public double? Weight = null; public void Render(XmlTextWriter writer) { if (UnitOfMeasurement != null) { writer.WriteStartElement("UnitOfMeasurement"); UnitOfMeasurement.Render(writer); writer.WriteEndElement(); } if (Weight != null && Weight > 0) writer.WriteElementString("Weight", String.Format("{0:0.0}", Weight.Value)); } }; public class WeightUnitOfMeasurementClass { public string Code; public string Description = null; public WeightUnitOfMeasurementClass() { Code = "LBS"; } public void Render(XmlTextWriter writer) { if (Code != null && Code != string.Empty) writer.WriteElementString("Code", Code); if (Description != null && Description != string.Empty) writer.WriteElementString("Description", Description); } }; protected class ServiceClass { public string Code; public string Description; public void Render(XmlTextWriter writer) { if (Code != null && Code != string.Empty) writer.WriteElementString("Code", Code); if (Description != null && Description != string.Empty) writer.WriteElementString("Description", Description); } }; public class PackageClass { public PackagingTypeClass PackagingType; public string Description = null; public DimensionsClass Dimensions = null; public DimensionalWeightClass DimensionalWeight = null; public PackageWeightClass PackageWeight = null; public string LargePackageIndicator = null; public string AdditionalHandling = null; public PackageServiceOptionsClass PackageServiceOptions = null; public PackageClass() { PackagingType = new PackagingTypeClass(); PackageWeight = new PackageWeightClass(); PackageServiceOptions = new PackageServiceOptionsClass(); } public void Render(XmlTextWriter writer) { if (PackagingType != null) { writer.WriteStartElement("PackagingType"); PackagingType.Render(writer); writer.WriteEndElement(); } if (Description != null && Description != string.Empty) writer.WriteElementString("Description", Description); if (Dimensions != null) { writer.WriteStartElement("Dimensions"); Dimensions.Render(writer); writer.WriteEndElement(); } if (DimensionalWeight != null) { writer.WriteStartElement("DimensionalWeight"); DimensionalWeight.Render(writer); writer.WriteEndElement(); } if (PackageWeight != null) { writer.WriteStartElement("PackageWeight"); PackageWeight.Render(writer); writer.WriteEndElement(); } if (AdditionalHandling != null && AdditionalHandling != string.Empty) writer.WriteElementString("AdditionalHandling", AdditionalHandling); if (LargePackageIndicator != null && LargePackageIndicator != string.Empty) writer.WriteElementString("LargePackageIndicator", LargePackageIndicator); if (PackageServiceOptions != null) { writer.WriteStartElement("PackageServiceOptions"); PackageServiceOptions.Render(writer); writer.WriteEndElement(); } } }; public class PackagingTypeClass { public string Code; public string Description = null; public void Render(XmlTextWriter writer) { if (Code != null && Code != string.Empty) writer.WriteElementString("Code", Code); if (Description != null && Description != string.Empty) writer.WriteElementString("Description", Description); } }; public class DimensionsClass { public SizeUnitOfMeasurementClass UnitOfMeasurement = null; public double? Length = null; public double? Width = null; public double? Height = null; public DimensionsClass() { UnitOfMeasurement = new SizeUnitOfMeasurementClass(); } public void Render(XmlTextWriter writer) { if (UnitOfMeasurement != null) { writer.WriteStartElement("UnitOfMeasurement"); UnitOfMeasurement.Render(writer); writer.WriteEndElement(); } if (Length != null && Length >= 0) writer.WriteElementString("Length", String.Format("{0:0.00}", Length.Value)); if (Width != null && Width >= 0) writer.WriteElementString("Width", String.Format("{0:0.00}", Width.Value)); if (Height != null && Height >= 0) writer.WriteElementString("Height", String.Format("{0:0.00}", Height.Value)); } }; public class DimensionalWeightClass { public WeightUnitOfMeasurementClass UnitOfMeasurement = null; public double? Weight = null; public DimensionalWeightClass() { UnitOfMeasurement = new WeightUnitOfMeasurementClass(); } public void Render(XmlTextWriter writer) { if (UnitOfMeasurement != null) { writer.WriteStartElement("UnitOfMeasurement"); UnitOfMeasurement.Render(writer); writer.WriteEndElement(); } if (Weight != null && Weight >= 0) writer.WriteElementString("Weight", String.Format("{0:0.0}", Weight.Value)); } }; public class PackageWeightClass { public WeightUnitOfMeasurementClass UnitOfMeasurement = null; public double? Weight; public PackageWeightClass() { UnitOfMeasurement = new WeightUnitOfMeasurementClass(); } public void Render(XmlTextWriter writer) { if (UnitOfMeasurement != null) { writer.WriteStartElement("UnitOfMeasurement"); UnitOfMeasurement.Render(writer); writer.WriteEndElement(); } if (Weight != null && Weight >= 0) writer.WriteElementString("Weight", String.Format("{0:0.0}", Weight.Value)); } }; public class SizeUnitOfMeasurementClass { public string Code; public string Description = null; public SizeUnitOfMeasurementClass() { Code = "IN"; } public void Render(XmlTextWriter writer) { if (Code != null && Code != string.Empty) writer.WriteElementString("Code", Code); if (Description != null && Description != string.Empty) writer.WriteElementString("Description", Description); } }; public class PackageServiceOptionsClass { public InsuredValueClass InsuredValue = null; public PackageServiceOptionsClass() { InsuredValue = new InsuredValueClass(); } public void Render(XmlTextWriter writer) { if (InsuredValue != null && InsuredValue.MonetaryValue != null) { writer.WriteStartElement("InsuredValue"); InsuredValue.Render(writer); writer.WriteEndElement(); } } } public class InsuredValueClass { public string MonetaryValue; public InsuredValueClass() { } public void Render(XmlTextWriter writer) { if (MonetaryValue != null && MonetaryValue != string.Empty) writer.WriteElementString("MonetaryValue", MonetaryValue); } } protected class ShipmentServiceOptionsClass { // not implemented public void Render(XmlTextWriter writer) { } }; protected class RateInformationClass { // not implemented public void Render(XmlTextWriter writer) { } }; public static StringDictionary ServiceCodeMapping; public static StringDictionary CodeServiceMapping; public UPS() : base() { // initialize the "services" hashtable if (ServiceCodeMapping == null) { ServiceCodeMapping = new StringDictionary(); ServiceCodeMapping["01"] = "UPS Next Day Air®"; ServiceCodeMapping["02"] = "UPS Second Day Air®"; ServiceCodeMapping["03"] = "UPS Ground"; ServiceCodeMapping["12"] = "UPS Three-Day Select®"; ServiceCodeMapping["13"] = "UPS Next Day Air Saver®"; ServiceCodeMapping["14"] = "UPS Next Day Air® Early A.M."; ServiceCodeMapping["59"] = "UPS Second Day Air A.M.®"; ServiceCodeMapping["65"] = "UPS Saver"; } // we also need reverse mapping to get the code based on service name since we don't store the code if (CodeServiceMapping == null) { CodeServiceMapping = new StringDictionary(); CodeServiceMapping["UPS Next Day Air®"] = "01"; CodeServiceMapping["UPS Second Day Air®"] = "02"; CodeServiceMapping["UPS Ground"] = "03"; CodeServiceMapping["UPS Three-Day Select®"] = "12"; CodeServiceMapping["UPS Next Day Air Saver®"] = "13"; CodeServiceMapping["UPS Next Day Air® Early A.M."] = "14"; CodeServiceMapping["UPS Second Day Air A.M.®"] = "59"; CodeServiceMapping["UPS Saver"] = "65"; } } public override List GetShippingMethods(string startzip, string endzip) { // grab supported services from configuration string[] ServicesSupported = Configuration.Get("Shipping.UPS.ServicesSupported").Split(','); string postData = GetPostDataRatingServiceSelection(startzip, endzip); XmlNode baseNode = GetXmlResponse_Post(postURL + "Rate", postData); //((XmlDocument)baseNode).Save("C:\\RatingServiceSelectionResponse.xml"); // parse output XML XmlNodeList ratedShipments = baseNode.SelectNodes("/RatingServiceSelectionResponse/RatedShipment"); List ret = new List(); foreach(XmlNode ratedShipment in ratedShipments) { string ServiceCode = ratedShipment.SelectSingleNode("Service/Code").InnerText; foreach (string s in ServicesSupported) { if (ServiceCode == s) { // get the "friendly name" for the service code string ServiceName = ServiceCodeMapping[ServiceCode]; string TotalCharges = ratedShipment.SelectSingleNode("TotalCharges/MonetaryValue").InnerText; ShippingMethod sm = new ShippingMethod(ServiceName, Decimal.Parse(TotalCharges)); ret.Add(sm); } } } XmlDocument doc = new XmlDocument(); doc.LoadXml(postData.Remove(0, 188)); // take out access request //doc.Save("C:\\RatingServiceSelectionRequest.xml"); return ret; } private string GetPostDataRatingServiceSelection(string startzip, string endzip) { ShoppingCart ShoppingCart = ShoppingCart.Current; // grab all of our configuration variables string AccessKey = Configuration.Get("Shipping.UPS.XMLAccessKey"); string UserID = Configuration.Get("Shipping.UPS.UserID"); string Password = Configuration.Get("Shipping.UPS.Password"); // instantiate our xml output string StringBuilder sbOut = new StringBuilder(); StringWriter sr = new StringWriter(sbOut); XmlTextWriter xmlWriter = new XmlTextWriter(sr); // render in the access request AccessRequest accessReq = new AccessRequest(); accessReq.AccessKey = AccessKey; accessReq.UserID = UserID; accessReq.Password = Password; accessReq.Render(xmlWriter); // render in the ratingservicerequest RatingServiceSelectionRequest ratingReq = new RatingServiceSelectionRequest(); ratingReq.Shipment.ShipFrom.Address.PostalCode = startzip; ratingReq.Shipment.ShipFrom.Address.CountryCode = "US"; ratingReq.Shipment.ShipTo.Address.PostalCode = endzip; ratingReq.Shipment.ShipTo.Address.CountryCode = "US"; ratingReq.Shipment.printPaymentInformation = false; ratingReq.Shipment.Service.Code = "03"; ratingReq.Request.RequestAction = "Rate"; ratingReq.Request.RequestOption = "Shop"; double weight = ShoppingCart.TotalWeight; while (weight >= 150) { PackageClass package = new PackageClass(); package.PackagingType.Code = "02"; package.PackageWeight.Weight = 150; ratingReq.Shipment.Packages.Add(package); weight -= 150; } if (weight > 0) { PackageClass package = new PackageClass(); package.PackagingType.Code = "02"; package.PackageWeight.Weight = weight; ratingReq.Shipment.Packages.Add(package); } ratingReq.Render(xmlWriter); // clean up streams xmlWriter.Flush(); xmlWriter.Close(); sr.Flush(); sr.Close(); return sbOut.ToString(); } private string GetPostDataVoidShipmentRequest(string TrackingNumber) { ShoppingCart ShoppingCart = ShoppingCart.Current; // grab all of our configuration variables string AccessKey = Configuration.Get("Shipping.UPS.XMLAccessKey"); string UserID = Configuration.Get("Shipping.UPS.UserID"); string Password = Configuration.Get("Shipping.UPS.Password"); string AccountNumber = Configuration.Get("Shipping.UPS.AccountNumber"); // instantiate our xml output string StringBuilder sbOut = new StringBuilder(); StringWriter sr = new StringWriter(sbOut); XmlTextWriter xmlWriter = new XmlTextWriter(sr); // render in the access request AccessRequest accessReq = new AccessRequest(); accessReq.AccessKey = AccessKey; accessReq.UserID = UserID; accessReq.Password = Password; accessReq.Render(xmlWriter); // render in the ShipmentVoidRequest VoidShipmentRequest voidReq = new VoidShipmentRequest(TrackingNumber); voidReq.Render(xmlWriter); // clean up streams xmlWriter.Flush(); xmlWriter.Close(); sr.Flush(); sr.Close(); return sbOut.ToString(); } public XmlDocument VoidShipment(string TrackingNumber) { string postData = GetPostDataVoidShipmentRequest(TrackingNumber); XmlNode baseNode = GetXmlResponse_Post(postURL + "Void", postData); XmlDocument doc = new XmlDocument(); doc.LoadXml(postData.Remove(0, 188)); // take out access request //doc.Save("C:\\VoidShipmentRequest.xml"); return (XmlDocument)baseNode; } private string GetPostDataShipmentConfirmRequest(int OrderID, List packages, string shippingCode) { ShoppingCart ShoppingCart = ShoppingCart.Current; // grab all of our configuration variables string AccessKey = Configuration.Get("Shipping.UPS.XMLAccessKey"); string UserID = Configuration.Get("Shipping.UPS.UserID"); string Password = Configuration.Get("Shipping.UPS.Password"); string AccountNumber = Configuration.Get("Shipping.UPS.AccountNumber"); // instantiate our xml output string StringBuilder sbOut = new StringBuilder(); StringWriter sr = new StringWriter(sbOut); XmlTextWriter xmlWriter = new XmlTextWriter(sr); // render in the access request AccessRequest accessReq = new AccessRequest(); accessReq.AccessKey = AccessKey; accessReq.UserID = UserID; accessReq.Password = Password; accessReq.Render(xmlWriter); // render in the ShipmentConfirmRequest ShipmentConfirmRequest shipReq = new ShipmentConfirmRequest(); shipReq.Request.RequestOption = "nonvalidate"; //shipReq.Shipment.Shipper.Name = "Beauty Bundles"; //shipReq.Shipment.Shipper.ShipperNumber = "44E104"; //shipReq.Shipment.Shipper.Address.AddressLine1 = "3763 Torrey Hill Lane"; //shipReq.Shipment.Shipper.Address.City = "San Diego"; //shipReq.Shipment.Shipper.Address.PostalCode = "92130"; //shipReq.Shipment.Shipper.Address.StateProvinceCode = "CA"; shipReq.Shipment.Shipper.Name = Configuration.Get("Shipping.UPS.Name"); shipReq.Shipment.Shipper.ShipperNumber = AccountNumber; shipReq.Shipment.Shipper.Address.AddressLine1 = Configuration.Get("Shipping.UPS.Address.AddressLine1"); shipReq.Shipment.Shipper.Address.City = Configuration.Get("Shipping.UPS.Address.City"); shipReq.Shipment.Shipper.Address.PostalCode = Configuration.Get("Shipping.UPS.Address.PostalCode"); shipReq.Shipment.Shipper.Address.StateProvinceCode = Configuration.Get("Shipping.UPS.Address.StateProvinceCode"); shipReq.Shipment.Shipper.Address.CountryCode = "US"; DataRow drOrder = DatabaseClass.Current.Orders_GetOrderAndBillingAddress(OrderID); int ShippingAddressID = (int)drOrder["ShippingAddressID"]; DataRow drShipping = DatabaseClass.Current.OrderAddresses_GetByOrderAddressID(ShippingAddressID); shipReq.Shipment.ShipTo.CompanyName = (string)drShipping["FirstName"] + " " + (string)drShipping["LastName"]; shipReq.Shipment.ShipTo.Address.AddressLine1 = drShipping["Address"].ToString(); shipReq.Shipment.ShipTo.Address.City = drShipping["City"].ToString(); shipReq.Shipment.ShipTo.Address.StateProvinceCode = drShipping["State"].ToString(); shipReq.Shipment.ShipTo.Address.PostalCode = drShipping["ZipCode"].ToString(); shipReq.Shipment.ShipTo.Address.CountryCode = "US"; shipReq.Shipment.PaymentInformation.PrepaidClass.BillShipper.AccountNumber = AccountNumber; shipReq.Shipment.ShipFrom.CompanyName = Configuration.Get("Shipping.UPS.CompanyName"); shipReq.Shipment.ShipFrom.Address.AddressLine1 = Configuration.Get("Shipping.UPS.Address.AddressLine1"); shipReq.Shipment.ShipFrom.Address.City = Configuration.Get("Shipping.UPS.Address.City"); shipReq.Shipment.ShipFrom.Address.PostalCode = Configuration.Get("Shipping.UPS.Address.PostalCode"); shipReq.Shipment.ShipFrom.Address.StateProvinceCode = Configuration.Get("Shipping.UPS.Address.StateProvinceCode"); shipReq.Shipment.ShipFrom.Address.CountryCode = "US"; shipReq.Shipment.Service.Code = shippingCode; shipReq.Shipment.Service.Description = drOrder["ShippingMethod"].ToString(); shipReq.Shipment.Packages = packages; shipReq.LabelSpecification.LabelPrintMethod.Code = "GIF"; shipReq.LabelSpecification.LabelImageFormat.Code = "GIF"; shipReq.Render(xmlWriter); // clean up streams xmlWriter.Flush(); xmlWriter.Close(); sr.Flush(); sr.Close(); return sbOut.ToString(); } public XmlDocument ConfirmShipment(int OrderID, List packages, string shippingCode) { string postData = GetPostDataShipmentConfirmRequest(OrderID, packages, shippingCode); XmlNode baseNode = GetXmlResponse_Post(postURL + "ShipConfirm", postData); XmlDocument doc = new XmlDocument(); doc.LoadXml(postData.Remove(0,188)); // take out access request //doc.Save("C:\\ShipmentConfirmRequest.xml"); return (XmlDocument)baseNode; } private string GetPostDataShipmentAcceptRequest(string ShipmentDigest) { // instantiate our xml output string StringBuilder sbOut = new StringBuilder(); StringWriter sr = new StringWriter(sbOut); XmlTextWriter xmlWriter = new XmlTextWriter(sr); // grab all of our configuration variables string AccessKey = Configuration.Get("Shipping.UPS.XMLAccessKey"); string UserID = Configuration.Get("Shipping.UPS.UserID"); string Password = Configuration.Get("Shipping.UPS.Password"); string AccountNumber = Configuration.Get("Shipping.UPS.AccountNumber"); // render in the access request AccessRequest accessReq = new AccessRequest(); accessReq.AccessKey = AccessKey; accessReq.UserID = UserID; accessReq.Password = Password; accessReq.Render(xmlWriter); // render in the ShipmentAcceptRequest ShipmentAcceptRequest shipAccept = new ShipmentAcceptRequest(); shipAccept.ShipmentDigest = ShipmentDigest; shipAccept.Render(xmlWriter); // clean up streams xmlWriter.Flush(); xmlWriter.Close(); sr.Flush(); sr.Close(); return sbOut.ToString(); } public XmlDocument AcceptShipment(string ShipmentDigest) { string postData = GetPostDataShipmentAcceptRequest(ShipmentDigest); XmlNode baseNode = GetXmlResponse_Post(postURL + "ShipAccept", postData); XmlDocument doc = new XmlDocument(); doc.LoadXml(postData.Remove(0, 188)); // take out access request //doc.Save("C:\\ShipmentAcceptRequest.xml"); return (XmlDocument)baseNode; } }