all_settings = get_option('wf_address_autocomplete_validation_settings'); add_action( 'wp_footer', array( $this,'wf_address_validation_scripts' )); } //validation function using EasyPost API public function wf_address_validation_easypost(){ // create address $address_params = array( "verify" => array("delivery"), "street1" => $_POST["street1_post"], "street2" => $_POST["street2_post"], "city" => $_POST["city_post"], "state" => $_POST["state_post"], "zip" => $_POST["zip_post"], "country" => $_POST["country_post"], ); $record=isset($this->all_settings['wf_address_autocomplete_validation_record_log']) ? $this->all_settings['wf_address_autocomplete_validation_record_log'] : ''; if($record == 'yes') Address_Validation_Log::log_update($address_params,'Easypost Request'); //get option values $easypost_api_key = $this->all_settings[ 'wf_address_autocomplete_validation_easypost_api_key' ]; try{ \EasyPost\EasyPost::setApiKey($easypost_api_key); $address = \EasyPost\Address::create_and_verify($address_params,$easypost_api_key); //for successful validation cases if($record == 'yes') { Address_Validation_Log::log_update(trim($address),'Easypost Response'); } if($address->verifications->delivery->success) { $vali_address_params = array( "status" => 'success', "street1" => $address->street1, "street2" => $address->street2, "city" => $address->city, "state" => $address->state, "zip" => $address->zip, "country" => $address->country, "rdi" => $address->residential, ); die(json_encode($vali_address_params)); } } catch(Exception $e) //for restricted API access { $add = $e->getTrace(); $custom['Error'] = $add['0']['args']; $custom['Custom_msg'] = 'EasyPost address validation got failed so checkout has been processed on user given address.'; $error=array("status"=>'failure','error'=>$e->getMessage(),"map"=>"undefined"); if($this->all_settings['wf_address_autocomplete_validation_validated_address_only'] == 'yes') { $custom['Custom_msg'] = 'Checkout has been stopped as given address could not be verified.'; if(isset($add['0']['args']['2']['error']['code']) && $add['0']['args']['2']['error']['code'] == 'ADDRESS.VERIFY.FAILURE') { wc_add_notice( __( 'Unable to verify address :' ), 'error' ); if(isset($add['0']['args']['2']['error']['errors']['0']['code'])) foreach ($add['0']['args']['2']['error']['errors'] as $ttemp) { if($ttemp['code'] == 'E.ADDRESS.NOT_FOUND') wc_add_notice( __( '- Address not found.' ), 'error' ); if($ttemp['code'] == 'E.HOUSE_NUMBER.INVALID') wc_add_notice( __( '- House number is invalid.' ), 'error' ); if($ttemp['code'] == 'E.HOUSE_NUMBER.MISSING') wc_add_notice( __( '- House number is missing.' ), 'error' ); if($ttemp['code'] == 'E.STREET.INVALID') wc_add_notice( __( '- Street is invalid.' ), 'error' ); if($ttemp['code'] == 'E.STATE.INVALID') wc_add_notice( __( '- Invalid state.' ), 'error' ); if($ttemp['code'] == 'E.CITY_STATE.INVALID') wc_add_notice( __( '- Unverifiable city/state.' ), 'error' ); if($ttemp['code'] == 'E.ADDRESS.INSUFFICIENT') wc_add_notice( __( '- Insufficient/incorrect address data.' ), 'error' ); if($ttemp['code'] == 'E.ZIP.INVALID') wc_add_notice( __( '- Invalid zip.' ), 'error' ); if($ttemp['code'] == 'E.ADDRESS.INVALID') wc_add_notice( __( '- Invalid city/state/zip.' ), 'error' ); if($ttemp['code'] == 'E.STREET.MISSING') wc_add_notice( __( '- Street is missing.' ), 'error' ); if($ttemp['code'] == 'E.INPUT.INVALID') wc_add_notice( __( '- Street1 is required.' ), 'error' ); } } } Address_Validation_Log::log_update($custom,'Easypost Response'); die(json_encode($error)); } } public function wf_address_validation_scripts() { if(is_checkout()&&!is_order_received_page()) { wp_enqueue_script( 'wf-address-validate-script', plugins_url( '../assests/js/address_validate-easypost.js', __FILE__ ), array( 'jquery' ) ); wp_enqueue_style( 'wf-modal-style-manadatory', plugins_url( '../assests/css/address-verification-popup-manadatory.css', __FILE__ ) ); wp_enqueue_style( 'wf-modal-style', plugins_url( '../assests/css/address-verification-popup-current.css', __FILE__ ) ); //for address suggestion popup $address_validation_popup = $this->all_settings['wf_address_autocomplete_validation_enable_address_popup']; if($address_validation_popup != null && $address_validation_popup == 'yes') { if( isset($this->all_settings['wf_address_autocomplete_validation_validated_address_only']) && $this->all_settings['wf_address_autocomplete_validation_validated_address_only'] == 'yes' ) $xa_address_popup=array( //To avoid warning in console log 'enable' => 'yes', 'validation_fail_checkout' => 'no' ); else { $xa_address_popup=array( //To avoid warning in console log 'enable' => 'yes', 'validation_fail_checkout' => 'yes' ); } wp_localize_script('wf-address-validate-script', 'wf_address_autocomplete_validation_enable_address_popup_obj', $xa_address_popup); echo "
×
Original Address
"; } else { if( isset($this->all_settings['wf_address_autocomplete_validation_validated_address_only']) && $this->all_settings['wf_address_autocomplete_validation_validated_address_only'] == 'yes' ) $xa_address_popup=array( 'enable' => 'no', 'validation_fail_checkout' => 'no' ); else $xa_address_popup=array( 'enable' => 'no', 'validation_fail_checkout' => 'yes' ); wp_localize_script('wf-address-validate-script', 'wf_address_autocomplete_validation_enable_address_popup_obj', $xa_address_popup); } } } } $obj= new Wf_Address_Validation(); add_action('wp_ajax_wf_address_validation',array($obj, 'wf_address_validation_easypost')); add_action('wp_ajax_nopriv_wf_address_validation',array($obj, 'wf_address_validation_easypost'));