57 lines
1.8 KiB
C#
57 lines
1.8 KiB
C#
using Landmark.OLA.Models.Addresses;
|
|
using System.Text;
|
|
using System.Web;
|
|
using System.Xml;
|
|
using USPS.Configuration;
|
|
|
|
namespace USPS.ApiCalls
|
|
{
|
|
public class AddressValidationRequestBuilder : IRequestBuildable
|
|
{
|
|
private readonly UspsSettings _settings;
|
|
private readonly Address _address;
|
|
|
|
public AddressValidationRequestBuilder(UspsSettings settings, Address address)
|
|
{
|
|
_settings = settings;
|
|
_address = address;
|
|
}
|
|
|
|
public virtual string BuildAddressXML()
|
|
{
|
|
var sb = new StringBuilder();
|
|
var sw = new StringWriter(sb);
|
|
var xml = new XmlTextWriter(sw);
|
|
|
|
xml.WriteStartElement("AddressValidateRequest");
|
|
xml.WriteAttributeString("USERID", _settings.Username);
|
|
xml.WriteStartElement("Address");
|
|
// USPS considers unit numbers (ex: APT 204) to be Address1. Our app's models would consider these to be Address2. DO NOT CHANGE
|
|
xml.WriteElementString("Address1", _address.Address2);
|
|
xml.WriteElementString("Address2", _address.Address1);
|
|
xml.WriteElementString("City", _address.City);
|
|
xml.WriteElementString("State", _address.State.ToString());
|
|
xml.WriteElementString("Zip5", _address.PostalCode);
|
|
xml.WriteElementString("Zip4", "");
|
|
xml.WriteEndElement();
|
|
xml.WriteEndElement();
|
|
xml.Close();
|
|
|
|
var query = HttpUtility.ParseQueryString(string.Empty);
|
|
query["API"] = "Verify";
|
|
query["XML"] = sb.ToString();
|
|
|
|
return query.ToString();
|
|
}
|
|
|
|
public string BuildGET()
|
|
{
|
|
var xml = BuildAddressXML();
|
|
|
|
var message = _settings.EndpointUrl + xml;
|
|
|
|
return message;
|
|
}
|
|
}
|
|
}
|