Search code examples
c#ups

UPS Address Street Level Validation


This may be a very generalized question but had anyone has much luck with utilizing the UPS Street-level validation API? I have studied portions of this: http://www.codeproject.com/KB/aspnet/Benz_CPE.aspx?msg=3658759&display=Mobile

And this: https://www.ups.com/upsdeveloperkit/downloadresource?loc=en_US

UPS has not been very helpful with their own sample code. Even after obtaining an access key, their sample insists sample data (even with the test-environment-acceptable states) that the state provided is invalid. Looking for more leads.


Solution

  • UPS informed me that the C# sample is configured for "Urbanization" which is only appropriate in Puerto Rico. I modified the code as follows:

    class XAVWSClient
    {
        static void Main()
        {
            try
            {
            XAVService xavSvc = new XAVService();
            XAVRequest xavRequest = new XAVRequest();
            UPSSecurity upss = new UPSSecurity();
    UPSSecurityServiceAccessToken upssSvcAccessToken = new UPSSecurityServiceAccessToken();
            upssSvcAccessToken.AccessLicenseNumber = ;
            upss.ServiceAccessToken = upssSvcAccessToken;
            UPSSecurityUsernameToken upssUsrNameToken = new UPSSecurityUsernameToken();
            upssUsrNameToken.Username = ;
            upssUsrNameToken.Password = ;
            upss.UsernameToken = upssUsrNameToken;
            xavSvc.UPSSecurityValue = upss;
            RequestType request = new RequestType();
    
            //Below code contains dummy data for reference. Please update as required.
            String[] requestOption = { "1" };
            request.RequestOption = requestOption;
            xavRequest.Request = request;
            AddressKeyFormatType addressKeyFormat = new AddressKeyFormatType();
            String[] addressLine = { "3930 KRISTI COURT" };
            addressKeyFormat.AddressLine = addressLine;
            addressKeyFormat.PoliticalDivision2 = "SACRAMENTO";
            addressKeyFormat.PoliticalDivision1 = "CA";
            addressKeyFormat.PostcodePrimaryLow = "95827";
            addressKeyFormat.ConsigneeName = "Some Consignee";
            addressKeyFormat.CountryCode = "US";
            xavRequest.AddressKeyFormat = addressKeyFormat;
      System.Net.ServicePointManager.CertificatePolicy = new    TrustAllCertificatePolicy();
    
            //serialize object (Debugging)
      System.Xml.Serialization.XmlSerializer x = new     System.Xml.Serialization.XmlSerializer(xavRequest.GetType());
            Stream stream = File.Open("SerializedXAVRequest.xml", FileMode.Create);
            x.Serialize(stream, xavRequest);
    
            XAVResponse xavResponse = xavSvc.ProcessXAV(xavRequest);
    
     Console.WriteLine("Response Status Code " +  xavResponse.Response.ResponseStatus.Code);
     Console.WriteLine("Response Status Description " + xavResponse.Response.ResponseStatus.Description);
            Console.ReadLine();
    

    Although I can now validate my credentials, I cannot produce multiple results and I'm not sure it's doing any validation at all considering how even if I put in a bogus address, I receive the following:

    Response Status Code 1 Response Status Description Success

    When I get to that point in my problem, I'll post another question. Until then, this question is answered.