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;
}
}