Click here to Skip to main content
Click here to Skip to main content

United States Postal Service (USPS) Web Tools Wrapper

By , 9 May 2008
 

Introduction

UPDATE: I am working on a FedEx, UPS and DHL version of this tool. The DHL version should be the next one I release. I will post them here on The Code Project when I am finished, but you can check this Web site until then for updates and to contact me directly.

I was in need of a library that would integrate the USPS Web Tools into my Windows form application. (This library will work in ASP.NET Web applications also.) The USPS Web tools are fairly easy to integrate, but I wanted to create a reusable component that I could use in future projects. Please keep in mind that this is my first CodeProject article, so go easy! :)

USPS Web Tools

Before you can use this library, you will need to get a USPS Web Tools ID. You can do this by filling out this form. Note: If you are using the USPS Test servers, then the data in the examples below are the only data that will work. If you change the address or anything else, you will get an error. Once you have tested your application, you can request your profile to be updated by USPS to access the production environment, where you can use any appropriate data.

Validate an Address

///Create a new instance of the USPS Manager class
///The constructor takes 2 arguments, the first is
///your USPS Web Tools User ID and the second is 
///true if you want to use the USPS Test Servers.
USPSManager m = new USPSManager("YOUR_USER_ID", true);
Address a = new Address();
a.Address2 = "6406 Ivy Lane";
a.City = "Greenbelt";
a.State = "MD";

///By calling ValidateAddress on the USPSManager object,
///you get an Address object that has been validated by the
///USPS servers
Address validatedAddress = m.ValidateAddress(a);

Get Zipcode

///Create a new instance of the USPS Manager class
///The constructor takes 2 arguments, the first is
///your USPS Web Tools User ID and the second is 
///true if you want to use the USPS Test Servers.
USPSManager m = new USPSManager("YOUR_USER_ID", true);
Address a = new Address();
a.Address2 = "6406 Ivy Lane";
a.City = "Greenbelt";
a.State = "MD";
Address addressWithZip = m.GetZipcode(a);
string zip = addressWithZip.Zip;

Get City State from Zip

///Create a new instance of the USPS Manager class
///The constructor takes 2 arguments, the first is
///your USPS Web Tools User ID and the second is 
///true if you want to use the USPS Test Servers.
USPSManager m = new USPSManager("YOUR_USER_ID", true);
Address a = m.GetCityState("90210");
string city = a.City;
string state = a.State;

Track a Package

///Create a new instance of the USPS Manager class
///The constructor takes 2 arguments, the first is
///your USPS Web Tools User ID and the second is 
///true if you want to use the USPS Test Servers.
USPSManager m = new USPSManager("YOUR_USER_ID", true);
TrackingInfo t = m.GetTrackingInfo("EJ958083578US");

Get Shipping Labels

///Create a new instance of the USPS Manager class
///The constructor takes 2 arguments, the first is
///your USPS Web Tools User ID and the second is 
///true if you want to use the USPS Test Servers.
USPSManager m = new USPSManager("YOUR_USER_ID", true);
Package p = new Package();
p.FromAddress.Contact = "John Smith";
p.FromAddress.Address2 = "475 L'Enfant Plaza, SW";
p.FromAddress.City = "Washington";
p.FromAddress.State = "DC";
p.FromAddress.Zip = "20260";
p.ToAddress.Contact = "Tom Customer";
p.ToAddress.Address1 = "STE 201";
p.ToAddress.Address2 = "6060 PRIMACY PKWY";
p.ToAddress.City = "Memphis";
p.ToAddress.State = "TN";
p.WeightInOunces = 2;
p.ServiceType = ServiceType.Priority;
p.SeparateReceiptPage = false;
p.LabelImageType = LabelImageType.TIF;
p.PackageSize = PackageSize.Regular;
p.PackageType = PackageType.Flat_Rate_Box;
p = m.GetDeliveryConfirmationLabel(p);

Note: If you want to test the other label methods, you will need to download the Guides from the USPS Web Tools site and use the sample data they provide.

It appears that USPS may have changed some of the behaviour of their Web services. I will look into this and make changes to the code accordingly.

I have updated the source code to include the XML Parser version of the FromXML method on the Address object. The code was provided by viperguynaz. Thank you.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

johnnycantcode
Software Developer (Senior) Gologic Tech LLC.
United States United States
Member
I work as an independent software architect and senior developer. I have worked on many large enterprise projects as well as small single user applications.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMilitary address validation Pinmembertbillett12 Jul '12 - 18:53 
QuestionShipping label creation Pinmemberwonder-FOOL22 Aug '11 - 7:00 
GeneralUnable to write the image Pinmemberasif m@hmood30 Apr '11 - 2:57 
i am using following code to write the image to file but it is not working.
 
using (MemoryStream ms = new MemoryStream(p.ShippingLabel, 0, p.ShippingLabel.Length))
{
//ms.Write(p.ShippingLabel, 0, p.ShippingLabel.Length);
ms.Seek(0,SeekOrigin.Begin);
Image returnImage;
returnImage = Image.FromStream(ms); //here is gives error, Paramter is not valid

returnImage.Save("label.tif");
}
 

anyone please help
GeneralCopyright Question Pinmemberthumb221 Mar '11 - 5:47 
GeneralAPI Testing Pinmemberjordanbaucke24 Aug '10 - 11:21 
GeneralFirmName Setter PinmemberMember 403999323 Apr '09 - 10:00 
GeneralFedEx, UPS, & DHL Tracking Pinmembercworkman2972915 Apr '09 - 17:22 
GeneralRe: FedEx, UPS, & DHL Tracking Pinmembermlumsden2 Aug '09 - 20:32 
GeneralHelp displaying test result PinmemberGary In SD27 Mar '09 - 5:29 
GeneralRe: Help displaying test result PinmemberJason Christian26 May '10 - 19:37 
GeneralRe: Help displaying test result [modified] Pinmemberphishbowler5 Nov '10 - 9:59 
GeneralCertified mail Pinmemberchiajhu25 Mar '09 - 17:18 
GeneralA80040b1a API Authorization failure Pinmemberrishi_narula12 Feb '09 - 22:13 
AnswerRe: A80040b1a API Authorization failure Pinmembertim119821 Mar '09 - 1:44 
GeneralRe: A80040b1a API Authorization failure PinmemberJMAWebTechnologies25 Feb '11 - 6:23 
GeneralBad GateWay Error [modified] Pinmemberanildbest11 Feb '09 - 20:24 
GeneralPlease enter a valid ZIP Code for the sender PinmemberHelixpoint13 Jan '09 - 5:03 
GeneralRe: Please enter a valid ZIP Code for the sender Pinmembertim119821 Mar '09 - 1:48 
GeneralNeed Help Tracking Packages [modified] Pinmembercworkman297292 Dec '08 - 5:55 
GeneralRe: Need Help Tracking Packages PinmemberHelixpoint13 Jan '09 - 6:08 
QuestionHow to show label Pinmembersd218728 Oct '08 - 20:48 
AnswerRe: How to show label PinmemberLuke Schoen24 Oct '10 - 11:53 
QuestionHOW TO SHOW PDF FILE FROM UTF8 BYTE ARRAY. Pinmembersd218724 Oct '08 - 23:40 
AnswerRe: HOW TO SHOW PDF FILE FROM UTF8 BYTE ARRAY. PinmemberScottieW8 Jan '09 - 16:26 
GeneralRe: HOW TO SHOW PDF FILE FROM UTF8 BYTE ARRAY. PinmemberLuke Schoen24 Oct '10 - 11:51 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web02 | 2.6.130516.1 | Last Updated 9 May 2008
Article Copyright 2006 by johnnycantcode
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid