/** * Sends the AddressValidationRequest and returns the response * * @param ComplexType\AddressValidationRequest $addressValidationRequest * @return stdClass */ public function getAddressValidationReply(ComplexType\AddressValidationRequest $addressValidationRequest) { return $this->_soapClient->addressValidation($addressValidationRequest->toArray()); }
public function residential_address_validation($package) { $residential = $this->residential; // Address Validation API only available for production if ($this->production) { // Check if address is residential or commerical try { $client = new SoapClient(plugin_dir_path(dirname(__FILE__)) . 'fedex-wsdl/production/AddressValidationService_v' . $this->addressvalidationservice_version . '.wsdl', array('trace' => 1)); $request = array(); $request['WebAuthenticationDetail'] = array('UserCredential' => array('Key' => $this->api_key, 'Password' => $this->api_pass)); $request['ClientDetail'] = array('AccountNumber' => $this->account_number, 'MeterNumber' => $this->meter_number); $request['TransactionDetail'] = array('CustomerTransactionId' => ' *** Address Validation Request v2 from WooCommerce ***'); $request['Version'] = array('ServiceId' => 'aval', 'Major' => $this->addressvalidationservice_version, 'Intermediate' => '0', 'Minor' => '0'); $request['RequestTimestamp'] = date('c'); $request['Options'] = array('CheckResidentialStatus' => 1, 'MaximumNumberOfMatches' => 1, 'StreetAccuracy' => 'LOOSE', 'DirectionalAccuracy' => 'LOOSE', 'CompanyNameAccuracy' => 'LOOSE', 'ConvertToUpperCase' => 1, 'RecognizeAlternateCityNames' => 1, 'ReturnParsedElements' => 1); $request['AddressesToValidate'] = array(0 => array('AddressId' => 'WTC', 'Address' => array('StreetLines' => array($package['destination']['address'], $package['destination']['address_2']), 'PostalCode' => $package['destination']['postcode']))); $response = $client->addressValidation($request); if ($response->HighestSeverity == 'SUCCESS') { if (is_array($response->AddressResults)) { $addressResult = $response->AddressResults[0]; } else { $addressResult = $response->AddressResults; } if ($addressResult->ProposedAddressDetails->ResidentialStatus == 'BUSINESS') { $residential = false; } elseif ($addressResult->ProposedAddressDetails->ResidentialStatus == 'RESIDENTIAL') { $residential = true; } } } catch (Exception $e) { } } $this->residential = apply_filters('woocommerce_fedex_address_type', $residential, $package); if ($this->residential == false) { $this->debug(__('Business Address', 'wf-shipping-fedex')); } }
/** * get_package_requests function. * * @access private * @return void */ private function get_package_requests($package) { $requests = array(); $residential = true; // Address Validation API only available for production if ($this->production) { // Check if address is residential or commerical try { $client = new SoapClient(plugin_dir_path(dirname(__FILE__)) . 'api/production/AddressValidationService_v' . $this->addressvalidationservice_version . '.wsdl', array('trace' => 1)); $request = array(); $request['WebAuthenticationDetail'] = array('UserCredential' => array('Key' => $this->api_key, 'Password' => $this->api_pass)); $request['ClientDetail'] = array('AccountNumber' => $this->account_number, 'MeterNumber' => $this->meter_number); $request['TransactionDetail'] = array('CustomerTransactionId' => ' *** Address Validation Request v2 from WooCommerce ***'); $request['Version'] = array('ServiceId' => 'aval', 'Major' => $this->addressvalidationservice_version, 'Intermediate' => '0', 'Minor' => '0'); $request['RequestTimestamp'] = date('c'); $request['Options'] = array('CheckResidentialStatus' => 1, 'MaximumNumberOfMatches' => 1, 'StreetAccuracy' => 'LOOSE', 'DirectionalAccuracy' => 'LOOSE', 'CompanyNameAccuracy' => 'LOOSE', 'ConvertToUpperCase' => 1, 'RecognizeAlternateCityNames' => 1, 'ReturnParsedElements' => 1); $request['AddressesToValidate'] = array(0 => array('AddressId' => 'WTC', 'Address' => array('StreetLines' => array($package['destination']['address'], $package['destination']['address_2']), 'PostalCode' => $package['destination']['postcode']))); $response = $client->addressValidation($request); if ($response->HighestSeverity != 'FAILURE' && $response->HighestSeverity != 'ERROR') { foreach ($response->AddressResults as $addressResult) { if ($addressResult->ProposedAddressDetails->ResidentialStatus == 'BUSINESS') { $residential = false; } } } } catch (Exception $e) { } } $residential = apply_filters('woocommerce_fedex_address_type', $residential, $package); if ($this->debug && $residential == false) { $woocommerce->add_message(__('Business Address', 'wc_fedex')); } // All reguests for this package get this data $package_request = $this->get_request($package); $package_request['RequestedShipment']['Recipient'] = array('Address' => array('Residential' => $residential, 'PostalCode' => str_replace(' ', '', strtoupper($package['destination']['postcode'])), 'CountryCode' => $package['destination']['country'])); // Add state to US/Canadian requests if (in_array($package['destination']['country'], array('US', 'CA'))) { $package_request['RequestedShipment']['Recipient']['Address']['StateOrProvinceCode'] = $package['destination']['state']; } // Choose selected packing switch ($this->packing_method) { case 'box_packing': $parcels = $this->box_shipping($package); break; case 'per_item': default: $parcels = $this->per_item_shipping($package); break; } if ($parcels) { // Max 99 $parcel_chunks = array_chunk($parcels, 99); foreach ($parcel_chunks as $parcels) { // Make request $request = $package_request; // Store value $total_value = 0; $total_packages = 0; // Store parcels as lin items $request['RequestedShipment']['RequestedPackageLineItems'] = array(); foreach ($parcels as $key => $parcel) { $total_value += $parcel['InsuredValue']['Amount']; $total_packages += $parcel['GroupPackageCount']; if (!$this->insure_contents) { unset($parcel['InsuredValue']); } $parcel = array_merge(array('SequenceNumber' => $key + 1), $parcel); $request['RequestedShipment']['RequestedPackageLineItems'][] = $parcel; } // Add insurance if ($this->insure_contents) { $request['RequestedShipment']['TotalInsuredValue'] = array('Amount' => round($total_value), 'Currency' => get_woocommerce_currency()); } // Size $request['RequestedShipment']['PackageCount'] = $total_packages; $requests[] = $request; } } return $requests; }