Files
2026-03-11 11:18:25 -05:00

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