document.write("
<MvFUNCTION NAME = "Module_Description" PARAMETERS = "module var" STANDARDOUTPUTLEVEL = ""> <MvASSIGN NAME = "l.module:code" VALUE = "address_validation"> <MvASSIGN NAME = "l.module:name" VALUE = "Address Validation Example"> <MvASSIGN NAME = "l.module:provider" VALUE = "Miva Merchant"> <MvASSIGN NAME = "l.module:version" VALUE = "1.0000"> <MvASSIGN NAME = "l.module:api_ver" VALUE = "5.72"> <MvASSIGN NAME = "l.module:description" VALUE = "Simple Address Validation Example"> <MvASSIGN NAME = "l.module:features" VALUE = "addrval"> </MvFUNCTION> <MvCOMMENT> | | Required Function for Address Validation Feature (addrval) | </MvCOMMENT> <MvFUNCTION NAME = "AddressValidationModule_Validate_Address" PARAMETERS = "module var, address var, verified_addresses var" STANDARDOUTPUTLEVEL = ""> <MvCOMMENT> | Make API Request to Address Validation Service. Address custromer entered during checkout | is available in the l.address structure. <MvIF EXPR = "{ NOT AddressValidation_BuildRequest( l.address, l.request_json ) }"> <MvFUNCTIONRETURN VALUE = 0> </MvIF> <MvCOMMENT> | Make API Request to Address Validation Service </MvCOMMENT> <MvIF EXPR = "{ NOT AddressValidation_API_Call( l.request_json, l.response ) }"> <MvFUNCTIONRETURN VALUE = 0> </MvIF> <MvCOMMENT> | Generate Verified Address Array. Here you would have a function to parse the JSON response and add each address the l.verified_addresses array | Function should return the number of verified addresses </MvCOMMENT> <MvFUNCTIONRETURN VALUE = "{ AddressValidation_Build_VerifiedAddresses( l.address, l.response, l.verified_addresses ) }"> </MvFUNCTION> <MvFUNCTION NAME = "AddressValidation_BuildRequest" PARAMETERS = "address var, request_json var" STANDARDOUTPUTLEVEL = ""> <MvCAPTURE VARIABLE = "l.request_json"> [ { "address_line1": "<MvEVAL EXPR = "{ [ g.Module_JSON ].JSON_Encode( l.address:addr1 $ l.address:addr2 ) }">", "city_locality": "<MvEVAL EXPR = "{ [ g.Module_JSON ].JSON_Encode( l.address:city ) }">", "state_province": "<MvEVAL EXPR = "{ [ g.Module_JSON ].JSON_Encode( l.address:state ) }">", "postal_code": "<MvEVAL EXPR = "{ [ g.Module_JSON ].JSON_Encode( l.address:zip ) }">", "country_code": "<MvEVAL EXPR = "{ [ g.Module_JSON ].JSON_Encode( l.address:cntry ) }">" } </MvCAPTURE> <MvFUNCTIONRETURN VALUE = 1> </MvFUNCTION> <MvFUNCTION NAME = "AddressValidation_API_Call" PARAMETERS = "request_json var, response var" STANDARDOUTPUTLEVEL = ""> <MvASSIGN NAME = "l.url" VALUE = "https://api.shipengine.com//v1/addresses/validate"> <MvASSIGN NAME = "l.api_key" VALUE = "__YOUR_API_KEY_HERE__"> <MvCAPTURE VARIABLE = "l.response:raw"> <MIVA MvCALL_Error = "nonfatal, nodisplay"> <MvCALL METHOD = "POST" ACTION = "{ l.url }" CONTENT-TYPE = "application/json" HEADERS = "{ 'API-Key: ' $ l.api_key $ asciichar( 13 ) $ asciichar( 10 ) }" FIELDS = "l.request_json" FLAGS = "noparse"> <MvEVAL EXPR = "{ s.callvalue }"> </MvCALL> <MIVA MvCALL_Error = "fatal, display"> </MvCAPTURE> <MvIF EXPR = "{ NOT ISNULL g.MvCALL_Error }"> <MvFUNCTIONRETURN VALUE = "{ [ g.Module_Library_Utilities ].Error( 'ERROR_CODE', g.MvCALL_Error ) }"> </MvIF> <MvCOMMENT>Convert JSON to a Miva Variable</MvCOMMENT> <MvIF EXPR = "{ NOT miva_json_decode( l.response:raw, l.response:data ) }"> <MvFUNCTIONRETURN VALUE = "{ [ g.Module_Library_Utilities ].Error( 'ERROE_CODE', miva_json_decode_last_error() ) }"> </MvIF> <MvFUNCTIONRETURN VALUE = 1> <MvFUNCTION> <MvFUNCTION NAME = "AddressValidation_Build_VerifiedAddresses" PARAMETERS = "original_address var, response var, verified_addresses var" STANDARDOUTPUTLEVEL = ""> <MvASSIGN NAME = "l.verified_addresses" VALUE = ""> <MvASSIGN NAME = "l.verified_address_count" VALUE = 0> <MvFOREACH ITERATOR = "l.address" ARRAY = "l.response:data:Address"> <MvASSIGN NAME = "l.verified_address" VALUE = ""> <MvASSIGN NAME = "l.verified_address:addr1" VALUE = "{ trim( l.address:Address1 ) }"> <MvASSIGN NAME = "l.verified_address:addr2" VALUE = "{ trim( l.address:Address2 ) }"> <MvASSIGN NAME = "l.verified_address:comp" VALUE = "{ trim( l.original_address:comp ) }"> <MvASSIGN NAME = "l.verified_address:city" VALUE = "{ trim( l.address:City ) }"> <MvASSIGN NAME = "l.verified_address:state" VALUE = "{ trim( l.address:State ) }"> <MvASSIGN NAME = "l.verified_address:country" VALUE = "{ trim( l.address:country ) }"> <MvASSIGN NAME = "l.verified_address:zip" VALUE = "{ trim( l.address:zip ) }"> <MvCOMMENT>Residential Address Flag</MvCOMMENT> <MvASSIGN NAME = "l.verified_address:resdntl" VALUE = "{ [ g.Module_Admin ].Trim_Boolean( l.original_address:resdntl ) }"> <MvASSIGN NAME = "l.verified_address_count" VALUE = "{ miva_array_insert( l.verified_addresses, l.verified_address, -1 ) }"> </MvFOREACH> <MvFUNCTIONRETURN VALUE = "{ l.verified_address_count }"> </MvFUNCTION>