Google can help you here!
https://developers.google.com/maps/documentation/geocoding/
The zip code is actually called Google Postal_code.
"long_name": "94043", "short_name": "94043", "types": postal_code
For example, let's say you want to get a 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 do not receive a postal code with this first call, you will have to make a second call to the same web service using the coordinates from the first call. Still very simple - a call to Stevens Point WI would be as follows:
http://maps.googleapis.com/maps/api/geocode/json?latlng=44.52357920000001,-89.5745630&sensor=true
You can capture lat / lng values from "location". Hope this helps!