@@ -7,51 +7,92 @@ class can handle up to 100 addresses for validation.
77from example_config import CONFIG_OBJ
88from fedex .services .address_validation_service import FedexAddressValidationRequest
99
10+ # NOTE: TO USE ADDRESS VALIDATION SERVICES, YOU NEED TO REQUEST FEDEX TO ENABLE THIS SERVICE FOR YOUR ACCOUNT.
11+ # BY DEFAULT, THE SERVICE IS DISABLED AND YOU WILL RECEIVE AUTHENTICATION FAILED, 1000 RESPONSE.
12+
1013# Set this to the INFO level to see the response from Fedex printed in stdout.
1114logging .basicConfig (level = logging .INFO )
1215
1316# This is the object that will be handling our tracking request.
1417# We're using the FedexConfig object from example_config.py in this dir.
15- connection = FedexAddressValidationRequest (CONFIG_OBJ )
16-
17- # The AddressValidationOptions are created with default values of None, which
18- # will cause WSDL validation errors. To make things work, each option needs to
19- # be explicitly set or deleted.
20-
21- ## Set the flags we want to True (or a value).
22- connection .AddressValidationOptions .CheckResidentialStatus = True
23- connection .AddressValidationOptions .VerifyAddresses = True
24- connection .AddressValidationOptions .RecognizeAlternateCityNames = True
25- connection .AddressValidationOptions .MaximumNumberOfMatches = 3
26-
27- ## Delete the flags we don't want.
28- del connection .AddressValidationOptions .ConvertToUpperCase
29- del connection .AddressValidationOptions .ReturnParsedElements
30-
31- ## *Accuracy fields can be TIGHT, EXACT, MEDIUM, or LOOSE. Or deleted.
32- connection .AddressValidationOptions .StreetAccuracy = 'LOOSE'
33- del connection .AddressValidationOptions .DirectionalAccuracy
34- del connection .AddressValidationOptions .CompanyNameAccuracy
35-
36- ## Create some addresses to validate
37- address1 = connection .create_wsdl_object_of_type ('AddressToValidate' )
38- address1 .CompanyName = 'International Paper'
18+ customer_transaction_id = "*** AddressValidation Request v4 using Python ***" # Optional transaction_id
19+ # Optional locale & language client data
20+ client_language_code = 'EN'
21+ client_locale_code = 'US'
22+ avs_request = FedexAddressValidationRequest (CONFIG_OBJ , customer_transaction_id = customer_transaction_id ,
23+ client_locale_code = client_locale_code ,
24+ client_language_code = client_language_code )
25+
26+ # Create some addresses to validate
27+ address1 = avs_request .create_wsdl_object_of_type ('AddressToValidate' )
28+ address1 .ClientReferenceId = "Your ID for the Recipient"
3929address1 .Address .StreetLines = ['155 Old Greenville Hwy' , 'Suite 103' ]
4030address1 .Address .City = 'Clemson'
4131address1 .Address .StateOrProvinceCode = 'SC'
4232address1 .Address .PostalCode = 29631
4333address1 .Address .CountryCode = 'US'
4434address1 .Address .Residential = False
45- connection .add_address (address1 )
4635
47- address2 = connection .create_wsdl_object_of_type ('AddressToValidate' )
36+ address1 .Contact .PersonName = 'Recipient Name'
37+ address1 .Contact .CompanyName = 'Company Name'
38+ address1 .Contact .PhoneNumber = '999-123-5343'
39+ address1 .Contact .EMailAddress = 'example_recipient@email.com'
40+ avs_request .add_address (address1 )
41+
42+ address2 = avs_request .create_wsdl_object_of_type ('AddressToValidate' )
4843address2 .Address .StreetLines = ['320 S Cedros' , '#200' ]
4944address2 .Address .City = 'Solana Beach'
5045address2 .Address .StateOrProvinceCode = 'CA'
5146address2 .Address .PostalCode = 92075
5247address2 .Address .CountryCode = 'US'
53- connection .add_address (address2 )
48+ avs_request .add_address (address2 )
49+
50+
51+ # If you'd like to see some documentation on the ship service WSDL, un-comment
52+ # this line. (Spammy).
53+ #print avs_request.client
54+
55+ # Un-comment this to see your complete, ready-to-send request as it stands
56+ # before it is actually sent. This is useful for seeing what values you can
57+ # change.
58+ #print avs_request.AddressesToValidate
59+ #print avs_request.ClientDetail
60+ #print avs_request.TransactionDetail
61+
62+ # Fires off the request, sets the 'response' attribute on the object.
63+ avs_request .send_request ()
64+
65+ # good to un-comment to see the variables returned by the Fedex reply.
66+ print avs_request .response
67+ #print avs_request.client.last_received()
68+
69+ # See the request printed out.
70+ #print avs_request.client.last_sent()
71+
72+ # Overall end result of the query
73+ for i in range (len (avs_request .response .AddressResults )):
74+
75+ print "Details for Address" , i + 1
76+ print "The validated street is:" , avs_request .response .AddressResults [i ].EffectiveAddress .StreetLines
77+ print "The validated city is:" , avs_request .response .AddressResults [i ].EffectiveAddress .City
78+ print "The validated state code is:" , avs_request .response .AddressResults [i ].EffectiveAddress .StateOrProvinceCode
79+ print "The validated postal code is:" , avs_request .response .AddressResults [i ].EffectiveAddress .PostalCode
80+ print "The validated country code is:" , avs_request .response .AddressResults [i ].EffectiveAddress .CountryCode
81+
82+ # Can be used to determine the address classification to figure out if Residential fee should apply.
83+ # MIXED, RESIDENTIAL, UNKNOWN, BUSINESS
84+ print "The validated address is residential:" , avs_request .response .AddressResults [i ].Classification != 'BUSINESS'
5485
55- ## Send the request and print the response
56- connection .send_request ()
57- print connection .response
86+ # Getting the optional attributes if available
87+ for j in range (len (avs_request .response .AddressResults [i ].Attributes )):
88+ cur_attribute = avs_request .response .AddressResults [i ].Attributes [j ]
89+ if cur_attribute .Name == "CountrySupported" :
90+ print "Supported Country:" , cur_attribute .Value == 'true'
91+ if cur_attribute .Name == "SuiteRequiredButMissing" :
92+ print "Missing Suite:" , cur_attribute .Value == 'true'
93+ if cur_attribute .Name == "CountrySupported" :
94+ print "Invalid Suite:" , cur_attribute .Value == 'true'
95+ if cur_attribute .Name == "MultipleMatches" :
96+ print "Multiple Matches:" , cur_attribute .Value == 'true'
97+ if cur_attribute .Name == "POBox" :
98+ print "Is POBox:" , cur_attribute .Value == 'true'
0 commit comments