Google can help you out here!
https://developers.google.com/maps/documentation/geocoding/
The zip is actually called "postal_code" by Google.
"long_name": "94043",
"short_name": "94043",
"types": postal_code
For example, let's say you want to get the zip for Clarkston, MI...
http://maps.googleapis.com/maps/api/geocode/json?address=Clarkston+MI&sensor=true
This returns:
{
"results" : [
{
"address_components" : [
{
"long_name" : "Clarkston",
"short_name" : "Clarkston",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Oakland",
"short_name" : "Oakland",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "Michigan",
"short_name" : "MI",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "United States",
"short_name" : "US",
"types" : [ "country", "political" ]
},
{
"long_name" : "48346",
"short_name" : "48346",
"types" : [ "postal_code" ]
}
],
"formatted_address" : "Clarkston, MI 48346, USA",
"geometry" : {
"bounds" : {
"northeast" : {
"lat" : 42.7418310,
"lng" : -83.41402409999999
},
"southwest" : {
"lat" : 42.7252370,
"lng" : -83.42880730000002
}
},
"location" : {
"lat" : 42.73511960,
"lng" : -83.41929410
},
"location_type" : "APPROXIMATE",
"viewport" : {
"northeast" : {
"lat" : 42.74331460,
"lng" : -83.40328670
},
"southwest" : {
"lat" : 42.72692350,
"lng" : -83.43530149999999
}
}
},
"types" : [ "locality", "political" ]
}
],
"status" : "OK"
}
EDIT
If you're not receiving a postal code with that first call, you'll have to make a second call to the same web service using the coordinates from the first call. Still very simple - the call for Stevens Point, WI would be as follows:
http://maps.googleapis.com/maps/api/geocode/json?latlng=44.52357920000001,-89.5745630&sensor=true
You can grab the lat/lng values from "location". Hope this helps!