Файловый менеджер - Редактировать - /home/lmsyaran/public_html/j3/plugins/hikashopshipping/usps/usps.php
Назад
<?php /** * @package HikaShop for Joomla! * @version 4.4.1 * @author hikashop.com * @copyright (C) 2010-2021 HIKARI SOFTWARE. All rights reserved. * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html */ defined('_JEXEC') or die('Restricted access'); ?><?php class plgHikashopshippingUSPS extends hikashopShippingPlugin { var $multiple = true; var $name = 'usps'; var $doc_form = 'usps'; var $pluginConfig = array( 'usps_user_id' => array('USPS WebTools User ID', 'input'), 'post_code' => array('POST_CODE', 'input'), 'services' => array('SHIPPING_SERVICES', 'checkbox',array( 'PRIORITY' => 'Priority Mail', 'MEDIA' => 'Media Mail', 'EXPRESS' => 'Express Mail', 'EXPRESSINT' => 'Priority Mail Express International (International)', 'EXPRESSINTBOX' => 'Priority Mail Express International Flat Rate Boxes (International)', 'FIRST CLASS' => 'First Class Mail', 'FIRSTCLASSINT' => 'First Class Mail (International)', 'INTERNATIONAL' => 'Priority Mail International (International)', 'PRIORITYINTSMALL' => 'Priority Mail International Small Flat Rate Box (International)', 'PRIORITYINTDVD' => 'Priority Mail International DVD Flat Rate priced box (International)', 'PRIORITYINTLARGEVIDEO' => 'Priority Mail International Large Video Flat Rate priced box (International)', 'PRIORITYINTMEDIUM' => 'Priority Mail International Medium Flat Rate Box (International)', 'PRIORITYINTLARGE' => 'Priority Mail International Large Flat Rate Box (International)', 'ENVELOPE' => 'USPS GXG Envelopes (International)', 'RETAIL GROUND' => 'Retail Ground', )), 'weight_approximation' => array('Weight approximation (%)', 'input'), 'dim_approximation' => array('Dimension approximation (%)', 'input'), 'machinableCheck' => array( 'Machinable Shipments', 'checkbox', array( 'MACHINABLE' => 'Are most of your packages <a href="http://pe.usps.com/text/dmm300/101.htm">machinable</a>?', ) ), 'sort_by_price' => array('Sort by shipping price', 'list',array( 'NO' => 'No', 'ASC' => 'Ascending', 'DESC' => 'Descending', )), 'with_dimension' => array('Use product dimension', 'boolean'), 'firstclass_mail_type' => array('First class mail type', 'list',array( 'PARCEL' => 'Parcel', 'LETTER' => 'Letter', 'FLAT' => 'Flat', 'POSTCARD' => 'Postcard', 'PACKAGE SERVICE' => 'Package service', )), 'container' => array('Container', 'list',array( 'VARIABLE' => 'Variable', 'FLAT RATE ENVELOPE' => 'Flat rate envelope', 'PADDED FLAT RATE ENVELOPE' => 'Padded flat rate envelope', 'LEGAL FLAT RATE ENVELOPE' => 'Legal flat rate envelope', 'SM FLAT RATE ENVELOPE' => 'Small flat rate envelope', 'WINDOW FLAT RATE ENVELOPE' => 'Window flat rate envelope', 'GIFT CARD FLAT RATE ENVELOPE' => 'Gift cart flat rate envelope', 'FLAT RATE BOX' => 'Flat rate box', 'SM FLAT RATE BOX' => 'Small flat rate box', 'MD FLAT RATE BOX' => 'Medium flat rate box', 'LG FLAT RATE BOX' => 'Large flat rate box', 'RECTANGULAR' => 'Rectangular', 'NONRECTANGULAR' => 'Non rectangular', 'REGIONALRATEBOXA' => 'Regional box A', 'REGIONALRATEBOXB' => 'Regional box B', )) ,'debug' => array('debug', 'boolean') ); var $methods = array( 'PRIORITY' => 1, 'PRIORITYINTSMALL' => 2, 'PRIORITYINTDVD' => 3, 'PRIORITYINTLARGEVIDEO' => 4, 'PRIORITYINTMEDIUM' => 5, 'PRIORITYINTLARGE' => 6, 'EXPRESS' => 7, 'EXPRESSINT' => 8, 'EXPRESSINTBOX' => 9, 'FIRST CLASS' => 11, 'FIRSTCLASSINT' => 12, 'INTERNATIONAL' => 13, 'ENVELOPE' => 14, 'MEDIA' => 15, 'RETAIL GROUND' => 16, ); var $use_cache = true; function shippingMethods(&$main){ $methods = array(); if(empty($main->shipping_params->services)) return $methods; foreach($main->shipping_params->services as $service) { $selected = null; foreach($this->methods as $name => $key) { if($name == $service) { $selected = array('name' => $this->pluginConfig['services'][2][$name], 'key' => $key); break; } } if($selected) { $methods[$main->shipping_id . '-' . $selected['key']] = $selected['name']; } } return $methods; } function onShippingDisplay(&$order, &$dbrates, &$usable_rates, &$messages) { if(empty($order->shipping_address)) return false; if($this->loadShippingCache($order, $usable_rates, $messages)) return true; $local_usable_rates = array(); $local_messages = array(); $ret = parent::onShippingDisplay($order, $dbrates, $local_usable_rates, $local_messages); if($ret === false) return false; if(!function_exists('curl_init')) { $app = JFactory::getApplication(); $app->enqueueMessage('The USPS shipping plugin needs the CURL library installed but it seems that it is not available on your server. Please contact your web hosting to set it up.','error'); return false; } $cache_rates = array(); $cache_messages = array(); $found = false; $currentShippingZone = null; $currentCurrencyId = null; $currencyClass = hikashop_get('class.currency'); foreach($local_usable_rates as $rate) { if($rate->shipping_type != 'usps') continue; $found = true; $zones = null; if(!empty($rate->shipping_zone_namekey)) { if(empty($zones)) { $zoneClass = hikashop_get('class.zone'); $zones = $zoneClass->getOrderZones($order); } if(!in_array($rate->shipping_zone_namekey,$zones)) { $messages['no_shipping_to_your_zone'] = JText::_('NO_SHIPPING_TO_YOUR_ZONE'); continue; } } $check = false; if(empty($order->shipping_address->address_post_code)) { $check = true; $message = 'The USPS shipping plugin requires the user to enter a postal code when goods are shipped within the United States. Please go to "Display->Custom fields" and set the post code field to required.'; } elseif(!preg_match('#^[0-9]{5}(-?[0-9]{4})?$#',$order->shipping_address->address_post_code)) { $check = true; $message = 'The post code entered is not valid'; } if($check) { if(empty($zones)) { $zoneClass = hikashop_get('class.zone'); $zones = $zoneClass->getOrderZones($order); } $db = JFactory::getDBO(); $db->setQuery('SELECT zone_namekey FROM '.hikashop_table('zone').' WHERE zone_code_3='.$db->Quote('USA')); $usa_zone = $db->loadResult(); if(in_array($usa_zone, $zones)) { $messages['post_code_missing'] = $message; continue; } } foreach($order->products as $product) { if (!empty($rate->shipping_params->weight_approximation)) { if (isset($product->product_weight)) $product->product_weight = $product->product_weight + $product->product_weight * $rate->shipping_params->weight_approximation / 100; if (isset($product->product_weight_orig)) $product->product_weight_orig = $product->product_weight_orig + $product->product_weight_orig * $rate->shipping_params->weight_approximation / 100; } if (!empty($rate->shipping_params->dim_approximation)) { if (isset($product->product_height)) $product->product_height = $product->product_height + $product->product_height * $rate->shipping_params->dim_approximation / 100; if (isset($product->product_length)) $product->product_length = $product->product_length + $product->product_length * $rate->shipping_params->dim_approximation / 100; if (isset($product->product_width)) $product->product_width = $product->product_width + $product->product_width * $rate->shipping_params->dim_approximation / 100; if (isset($product->product_total_volume)) $product->product_total_volume = $product->product_total_volume + $product->product_total_volume * $rate->shipping_params->dim_approximation / 100; if (isset($product->product_total_volume_orig)) $product->product_total_volume_orig = $product->product_total_volume_orig + $product->product_total_volume_orig * $rate->shipping_params->dim_approximation / 100; } if (isset($product->variants)) { foreach($product->variants as $variant) { if (!empty($rate->shipping_params->weight_approximation)) { if (isset($variant->product_weight)) $variant->product_weight = $variant->product_weight + $variant->product_weight * $rate->shipping_params->weight_approximation / 100; if (isset($variant->product_weight_orig)) $variant->product_weight_orig = $variant->product_weight_orig + $variant->product_weight_orig * $rate->shipping_params->weight_approximation / 100; } if (!empty($rate->shipping_params->dim_approximation)) { if (isset($variant->product_height)) $variant->product_height = $variant->product_height + $variant->product_height * $rate->shipping_params->dim_approximation / 100; if (isset($variant->product_length)) $variant->product_length = $variant->product_length + $variant->product_length * $rate->shipping_params->dim_approximation / 100; if (isset($variant->product_width)) $variant->product_width = $variant->product_width + $variant->product_width * $rate->shipping_params->dim_approximation / 100; if (isset($variant->product_total_volume)) $variant->product_total_volume = $variant->product_total_volume + $variant->product_total_volume * $rate->shipping_params->dim_approximation / 100; if (isset($variant->product_total_volume_orig)) $variant->product_total_volume_orig = $variant->product_total_volume_orig + $variant->product_total_volume_orig * $rate->shipping_params->dim_approximation / 100; } } } } if(!isset($rate->shipping_params->with_dimension)) $rate->shipping_params->with_dimension = 1; if($rate->shipping_params->with_dimension) $required_dimensions = array('w','x','y','z'); else $required_dimensions = array('w'); $limit = array(); $envelope = array( 'FLAT RATE ENVELOPE', 'PADDED FLAT RATE ENVELOPE', 'LEGAL FLAT RATE ENVELOPE', 'SM FLAT RATE ENVELOPE', 'WINDOW FLAT RATE ENVELOPE', 'GIFT CARD FLAT RATE ENVELOPE' ); $variable = array( 'VARIABLE', 'FLAT RATE BOX', 'SM FLAT RATE BOX', 'MD FLAT RATE BOX', 'RECTANGULAR', 'NONRECTANGULAR' ); $country = @$order->shipping_address_full->shipping_address->address_country->zone_code_2; if(empty($country)) $country = 'US'; if(in_array($rate->shipping_params->container, $variable)) { $limit['w'] = 1120; if($rate->shipping_params->with_dimension) $limit['length_girth'] = 108; } elseif(in_array($rate->shipping_params->container, $envelope)) { if($rate->shipping_params->with_dimension) { $limit = array( 'x' => 0.75, 'y' => 12, 'z' => 15 ); } else $limit['unit'] = 1; } elseif($rate->shipping_params->container == 'LG FLAT RATE BOX'){ $limit['w'] = 1120; if($rate->shipping_params->with_dimension) $limit['length_girth'] = 130; } elseif($rate->shipping_params->container == 'REGIONALRATEBOXA'){ $limit = array( 'x' => 4.75, 'y' => 7, 'z' => 10 ); if($country == 'US') $limit['w'] = 240; else $limit['w'] = 160; } elseif($rate->shipping_params->container == 'REGIONALRATEBOXB'){ $limit = array( 'x' => 5, 'y' => 10.25, 'z' => 12 ); $limit['w'] = 320; } else $limit['unit'] = 1; $packages = $this->getOrderPackage($order, array('weight_unit' => 'oz', 'volume_unit' => 'in', 'limit' => $limit, 'required_dimensions' => $required_dimensions)); if(empty($packages)) return true; $max_weight = 1120; $parcels = array(); if(empty($order->shipping_address_full)) { $cart = hikashop_get('class.cart'); if(isset($order->shipping_address->address_id)) $cart->loadAddress($order->shipping_address_full, $order->shipping_address->address_id, 'object', 'shipping'); } if(isset($packages['w']) && $packages['w'] > 0){ if($packages['w'] > $max_weight) { $messages['items_weight_over_limit'] = JText::_('ITEMS_WEIGHT_TOO_BIG_FOR_SHIPPING_METHODS'); $cache_messages['items_weight_over_limit'] = JText::_('ITEMS_WEIGHT_TOO_BIG_FOR_SHIPPING_METHODS'); $this->setShippingCache($order, null, $cache_messages); return true; } if($packages['w'] < 1) $packages['w'] = 1; // Minimum 1oz $parcel = new stdClass(); $parcel->Country = @$order->shipping_address_full->shipping_address->address_country->zone_code_2; if(empty($parcel->Country)) $parcel->Country = 'US'; $parcel->Pickup_Postcode = substr(preg_replace('#[^a-z0-9]#i', '', @$rate->shipping_params->post_code), 0, 5); $parcel->Destination_Postcode = substr(preg_replace('#[^a-z0-9]#i', '', $order->shipping_address->address_post_code), 0, 5); if($rate->shipping_params->with_dimension == 1){ $girth = array($packages['y'], $packages['x'], $packages['z']); sort($girth); $parcel->Length = $girth[2]; $parcel->Width = $girth[1]; $parcel->Height = $girth[0]; $parcel->Girth = (($parcel->Height + $parcel->Width) * 2) + $parcel->Length; } else { $parcel->Length = ''; $parcel->Width = ''; $parcel->Height = ''; $parcel->Girth = ''; } $parcel->Quantity = 1; $parcel->Weight = round($packages['w'], 2); $parcels[] = $parcel; }else{ foreach($packages as $package){ if((!isset($package['w']) || $package['w'] <= 0)) continue; if($package['w'] > $max_weight) { $messages['items_weight_over_limit'] = JText::_('ITEMS_WEIGHT_TOO_BIG_FOR_SHIPPING_METHODS'); $cache_messages['items_weight_over_limit'] = JText::_('ITEMS_WEIGHT_TOO_BIG_FOR_SHIPPING_METHODS'); $this->setShippingCache($order, null, $cache_messages); return true; } if($package['w'] < 1) $package['w'] = 1; // Minimum 1oz $parcel = new stdClass(); $parcel->Country = @$order->shipping_address_full->shipping_address->address_country->zone_code_2; if(empty($parcel->Country)) $parcel->Country = 'US'; $parcel->Pickup_Postcode = substr(preg_replace('#[^a-z0-9]#i', '', @$rate->shipping_params->post_code), 0, 5); $parcel->Destination_Postcode = substr(preg_replace('#[^a-z0-9]#i', '', $order->shipping_address->address_post_code), 0, 5); if($rate->shipping_params->with_dimension == 1){ $girth = array($package['y'], $package['x'], $package['z']); sort($girth); $parcel->Length = $girth[2]; $parcel->Width = $girth[1]; $parcel->Height = $girth[0]; $parcel->Girth = (($parcel->Height + $parcel->Width) * 2) + $parcel->Length; } else { $parcel->Length = ''; $parcel->Width = ''; $parcel->Height = ''; $parcel->Girth = ''; } $parcel->Quantity = 1; $parcel->Weight = round($package['w'], 2); $parcels[] = $parcel; } } $query = 'SELECT currency_id FROM '.hikashop_table('currency').' WHERE currency_code=\'USD\''; $db = JFactory::getDBO(); $db->setQuery($query); $currency = $db->loadResult(); $rates = array(); if($parcels[0]->Country == 'US') { $modes = array('PRIORITY', 'MEDIA', 'EXPRESS', 'FIRST CLASS', 'RETAIL GROUND'); foreach($modes as $mode) { if(!empty($rate->shipping_params->$mode)) $this->addRate($rates, $mode, $parcels, $rate, $currency, false); } } else { $modes = array('INTERNATIONAL', 'PRIORITYINTSMALL', 'PRIORITYINTDVD', 'PRIORITYINTLARGEVIDEO', 'PRIORITYINTMEDIUM', 'PRIORITYINTLARGE', 'EXPRESSINTBOX', 'EXPRESSINT', 'FIRSTCLASSINT', 'ENVELOPE'); foreach($modes as $mode) { if(!empty($rate->shipping_params->$mode)) $this->addRate($rates, $mode, $parcels, $rate, $currency, true); } } if($rate->shipping_params->sort_by_price == 'DESC') $rates = $this->array_sort($rates, 'shipping_price', 'usps', SORT_DESC); else if($rate->shipping_params->sort_by_price == 'ASC') $rates = $this->array_sort($rates, 'shipping_price', 'usps', SORT_ASC); $i = 0; if(empty($rates)) { $messages['no_shipping_quotes'] = 'Failed to obtain shipping quotes.'; $cache_messages['no_shipping_quotes'] = 'Failed to obtain shipping quotes.'; continue; } foreach($rates as $finalRate) { if(isset($finalRate->shipping_price_orig) || isset($finalRate->shipping_currency_id_orig)){ if($finalRate->shipping_currency_id_orig == $finalRate->shipping_currency_id) $finalRate->shipping_price_orig = $finalRate->shipping_price; else $finalRate->shipping_price_orig = $currencyClass->convertUniquePrice($finalRate->shipping_price, $finalRate->shipping_currency_id, $finalRate->shipping_currency_id_orig); } $finalRate->shipping_ordering .= '_' . $i++; $usable_rates[$finalRate->shipping_id] = $finalRate; $cache_rates[$finalRate->shipping_id] = $finalRate; } } if(!$found) { $messages['no_rates'] = JText::_('NO_SHIPPING_METHOD_FOUND'); $cache_messages['no_rates'] = JText::_('NO_SHIPPING_METHOD_FOUND'); } $this->setShippingCache($order, $cache_rates, $cache_messages); return true; } function addRate(&$rates, $type, $parcels, &$rate, $currency, $isInternational) { $app = JFactory::getApplication(); $usps_user_id = $rate->shipping_params->usps_user_id; $origin_zip = $parcels[0]->Pickup_Postcode; $destination_zip = $parcels[0]->Destination_Postcode; $this->countries = $this->USPS_country_list(); $destination_country = $this->countries[$parcels[0]->Country]; $machinable = 'false'; $package_id = 1; //will change this when setting up for multiple packages. if (isset($rate->shipping_params->MACHINABLE)) { $machinable = "true"; } if($isInternational) { $request = '<'.'?xml version="1.0"?'.'>'. '<IntlRateV2Request USERID="' . $usps_user_id . '">'; if($parcels[0]->Country == 'CA') $request .= '<Revision>2</Revision>'; else $request .= '<Revision />'; foreach($parcels as $parcel){ $package_weight_arr = $this->getUSPSweightDimensions($parcel->Weight); $package_weight_lb = $package_weight_arr['Pounds']; $package_weight_oz = $package_weight_arr['Ounces']; $package_weight_oz = round($package_weight_oz,2); $request .= '<Package ID="' . $package_id . '">'. '<Pounds>' . $package_weight_lb . '</Pounds>'. '<Ounces>' . $package_weight_oz . '</Ounces>'. '<Machinable>' . $machinable . '</Machinable>'. '<MailType>Package</MailType>'. '<ValueOfContents>100</ValueOfContents>'. '<Country>' . $destination_country . '</Country>'. '<Container>' . $rate->shipping_params->container . '</Container>'. '<Size>Regular</Size>'. '<Width>'.$parcel->Width.'</Width>'. '<Length>'.$parcel->Length.'</Length>'. '<Height>'.$parcel->Height.'</Height>'. '<Girth>'.$parcel->Girth.'</Girth>'; if($parcels[0]->Country == 'CA') $request .= '<OriginZip>' . $origin_zip . '</OriginZip>'; $request .= '</Package>'; $package_id++; } $request .= '</IntlRateV2Request>'; } else { $request = '<'.'?xml version="1.0"?'.'>'. '<RateV4Request USERID="' . $usps_user_id . '">'. '<Revision />'; foreach($parcels as $parcel){ if($parcel->Weight > 13 && $type =='FIRST CLASS' && isset($rate->shipping_params->firstclass_mail_type) && $rate->shipping_params->firstclass_mail_type == 'PARCEL') return; $request.='<Package ID="' . $package_id . '">'. '<Service>' . $type . '</Service>'; if($type =='FIRST CLASS'){ if(!empty($rate->shipping_params->firstclass_mail_type)){ $request .= '<FirstClassMailType>' . $rate->shipping_params->firstclass_mail_type . '</FirstClassMailType>'; } else{ $request .= '<FirstClassMailType>Parcel</FirstClassMailType>'; } } $package_weight_arr = $this->getUSPSweightDimensions($parcel->Weight); $package_weight_lb = $package_weight_arr['Pounds']; $package_weight_oz = $package_weight_arr['Ounces']; $package_weight_oz = round($package_weight_oz,2); $request .= '<ZipOrigination>' . $origin_zip . '</ZipOrigination>'. '<ZipDestination>' . $destination_zip . '</ZipDestination>'. '<Pounds>' . $package_weight_lb . '</Pounds>'. '<Ounces>' . $package_weight_oz . '</Ounces>'. '<Container>' . $rate->shipping_params->container . '</Container>'. '<Size>Regular</Size>'. '<Width>'.$parcel->Width.'</Width>'. '<Length>'.$parcel->Length.'</Length>'. '<Height>'.$parcel->Height.'</Height>'. '<Girth>'.$parcel->Girth.'</Girth>'. '<Machinable>' . $machinable . '</Machinable>'. '</Package>'; $package_id++; } $request.='</RateV4Request>'; } $ctrl = hikaInput::get()->getString('ctrl',''); if(!empty($rate->shipping_params->debug) && $ctrl == 'checkout') echo '<!--' . "\r\n" . 'USPS DEBUG' . "\r\n" . $request . "\r\n" . '-->'; $responseError = false; $response_xml = $this->doUSPS($request, !$isInternational); if(!$response_xml) return false; if($response_xml->Number) { if(!empty($rate->shipping_params->debug) && $ctrl == 'checkout') $app->enqueueMessage( 'USPS error: ' . $response_xml->Number . ' ' . $response_xml->Description); $responseError = true; } if($response_xml->Package->Error) { if(!empty($rate->shipping_params->debug) && $ctrl == 'checkout') $app->enqueueMessage( 'USPS error: ' . $response_xml->Package->Error->Number . ' ' . $response_xml->Package->Error->Description); $responseError = true; } if($isInternational) { $rateResult = $response_xml->xpath('Package/Service'); $usps_rate_arr = $this->xml2array($rateResult); $decoding = array( 2 => 'INTERNATIONAL', 16 => 'PRIORITYINTSMALL', 24 => 'PRIORITYINTDVD', 25 => 'PRIORITYINTLARGEVIDEO', 9 => 'PRIORITYINTMEDIUM', 11 => 'PRIORITYINTLARGE', 15 => 'FIRSTCLASSINT', 16 => 'PRIORITYINTSMALL', 24 => 'PRIORITYINTDVD', 25 => 'PRIORITYINTLARGEVIDEO', 9 => 'PRIORITYINTMEDIUM', 11 => 'PRIORITYINTLARGE', 26 => 'EXPRESSINTBOX', 1 => 'EXPRESSINT', 12 => 'ENVELOPE' ); $usps_rates = array(); foreach($usps_rate_arr as $k) { $id = (int)$k['@attributes']['ID']; if(isset($decoding[$id]) && strcmp($type, $decoding[$id]) == 0) { if(isset($k['ServiceErrors']) || $k['Postage'] == 0) continue; $usps_rates[] = array( 'Service' => html_entity_decode($k['SvcDescription']), 'Rate' => $k['Postage'] ); } } } else { $rateResult = $response_xml->xpath('Package/Postage'); $usps_rate_arr = $this->xml2array($rateResult); $usps_rates = array(); foreach($usps_rate_arr as $k => $v) { $usps_rates[] = array( 'Service' => html_entity_decode($v['MailService']), 'Rate' => $v['Rate'] ); } if(empty($usps_rates)) { $responseError = true; } } if($responseError == false && !empty($usps_rates)) { if(empty($rates[$type])) { $info = new stdClass(); $info = clone($rate); $typeKey = str_replace(' ','_', $type); $shipping_name = JText::_($typeKey); if($shipping_name != $typeKey) $info->shipping_name = $shipping_name; else $info->shipping_name = preg_replace('#sup.*?sup#', '', $info->shipping_name.' : '. $this->pluginConfig['services'][2][$type]); $shipping_description = JText::_($type.'_DESCRIPTION'); if($shipping_description != $type.'_DESCRIPTION') { $info->shipping_description .= $shipping_description; } $info->shipping_id .= '-'.$this->methods[$type]; $rates[$type] = $info; } $currencyClass = hikashop_get('class.currency'); foreach($usps_rates as $usps_rate){ if(!isset($usps_rate['Rate'])) continue; if(isset($currency) && $currency != $rates[$type]->shipping_currency_id) $rates[$type]->shipping_price += $currencyClass->convertUniquePrice($usps_rate['Rate'], $currency, $rates[$type]->shipping_currency_id); else $rates[$type]->shipping_price += $usps_rate['Rate']; } } } function getShippingDefaultValues(&$element){ $element->shipping_name='United States Postal Service'; $element->shipping_description=''; $element->shipping_images='usps'; $element->shipping_params->PRIORITY='Priority Mail'; $element->shipping_params->MEDIA='Media Mail'; $element->shipping_params->EXPRESS='Express Mail'; $FIRSTCLASS = 'FIRST CLASS'; $element->shipping_params->$FIRSTCLASS='First Class Mail'; $element->shipping_params->INTERNATIONAL='Priority Mail International (International)'; $element->shipping_params->PRIORITYINTSMALL='Priority Mail International Small Flat Rate Box (International)'; $element->shipping_params->PRIORITYINTDVD='Priority Mail International DVD Flat Rate priced box (International)'; $element->shipping_params->PRIORITYINTLARGEVIDEO='Priority Mail International Large Video Flat Rate priced box (International)'; $element->shipping_params->PRIORITYINTMEDIUM='Priority Mail International Medium Flat Rate Box (International)'; $element->shipping_params->PRIORITYINTLARGE='Priority Mail International Large Flat Rate Box (International)'; $element->shipping_params->EXPRESSINTBOX='Express Mail International Flat Rate Boxes (International)'; $element->shipping_params->EXPRESSINT='Express Mail International (International)'; $element->shipping_params->FIRSTCLASSINT='First Class Mail (International)'; $element->shipping_params->ENVELOPE='USPS GXG Envelopes (International)'; $element->shipping_params->post_code=''; $element->shipping_params->firstclass_mail_type='PARCEL'; $element->shipping_params->container='RECTANGULAR'; $element->shipping_params->MACHINABLE=true; } function onShippingConfiguration(&$element){ $config = &hikashop_config(); $this->usps = hikaInput::get()->getCmd('name','usps'); $this->main_currency = $config->get('main_currency', 1); $currencyClass = hikashop_get('class.currency'); $currency = $currencyClass->get($this->main_currency); $this->currencyCode = $currency->currency_code; $this->currencySymbol = $currency->currency_symbol; $this->categoryType = hikashop_get('type.categorysub'); $this->categoryType->type = 'tax'; $this->categoryType->field = 'category_id'; parent::onShippingConfiguration($element); $elements = array($element); } function onShippingConfigurationSave(&$element) { $app = JFactory::getApplication(); if(empty($element->shipping_params->usps_user_id)){ $app->enqueueMessage(JText::sprintf('ENTER_INFO', 'USPS', ' WebTools User ID')); } if(empty($element->shipping_params->post_code)){ $app->enqueueMessage(JText::sprintf('ENTER_INFO', 'USPS', JText::_('POST_CODE'))); } if(isset($element->shipping_params->services) && !empty($element->shipping_params->services)){ $element->shipping_params->PRIORITY=in_array('PRIORITY',$element->shipping_params->services); $element->shipping_params->MEDIA=in_array('MEDIA',$element->shipping_params->services); $element->shipping_params->EXPRESS=in_array('EXPRESS',$element->shipping_params->services); $FIRSTCLASS = 'FIRST CLASS'; $element->shipping_params->$FIRSTCLASS=in_array('FIRST CLASS',$element->shipping_params->services); $RETAILGROUND = 'RETAIL GROUND'; $element->shipping_params->$RETAILGROUND=in_array('RETAIL GROUND',$element->shipping_params->services); $element->shipping_params->INTERNATIONAL=in_array('INTERNATIONAL',$element->shipping_params->services); $element->shipping_params->PRIORITYINTSMALL=in_array('PRIORITYINTSMALL',$element->shipping_params->services); $element->shipping_params->PRIORITYINTDVD=in_array('PRIORITYINTDVD',$element->shipping_params->services); $element->shipping_params->PRIORITYINTLARGEVIDEO=in_array('PRIORITYINTLARGEVIDEO',$element->shipping_params->services); $element->shipping_params->PRIORITYINTMEDIUM=in_array('PRIORITYINTMEDIUM',$element->shipping_params->services); $element->shipping_params->PRIORITYINTLARGE=in_array('PRIORITYINTLARGE',$element->shipping_params->services); $element->shipping_params->EXPRESSINTBOX=in_array('EXPRESSINTBOX',$element->shipping_params->services); $element->shipping_params->EXPRESSINT=in_array('EXPRESSINT',$element->shipping_params->services); $element->shipping_params->FIRSTCLASSINT=in_array('FIRSTCLASSINT',$element->shipping_params->services); $element->shipping_params->ENVELOPE=in_array('ENVELOPE',$element->shipping_params->services); }else { $app->enqueueMessage(JText::sprintf('CHOOSE_SHIPPING_SERVICE')); } if(!empty($element->shipping_params->machinableCheck)) $element->shipping_params->MACHINABLE = in_array('MACHINABLE',$element->shipping_params->machinableCheck); parent::onShippingConfigurationSave($element); } function onAfterOrderConfirm(&$order, &$methods, $method_id) { return true; } function doUSPS($XMLRequest, $domesticShipment) { $apiName = 'RateV4'; if($domesticShipment == false) $apiName = 'IntlRateV2'; $url = 'http://production.shippingapis.com/ShippingAPI.dll?API=' . $apiName . '&XML=' . urlencode($XMLRequest); $session = curl_init(); curl_setopt($session, CURLOPT_FRESH_CONNECT, true); curl_setopt($session, CURLOPT_POST, false); curl_setopt($session, CURLOPT_FOLLOWLOCATION, false); curl_setopt($session, CURLOPT_FAILONERROR, true); curl_setopt($session, CURLOPT_RETURNTRANSFER, true); curl_setopt($session, CURLOPT_COOKIEFILE, ''); curl_setopt($session, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($session, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($session, CURLOPT_ENCODING, 'UTF-8'); curl_setopt($session, CURLOPT_URL, $url); $result = curl_exec($session); $error = curl_error($session); if(empty($result)) { $app = JFactory::getApplication(); $app->enqueueMessage( 'Cannot connect to USPS web service. You hosting company might be blocking outbound connections.<br/>'.$error); return false; } $responseDoc = simplexml_load_string($result); if($responseDoc === false) { $app = JFactory::getApplication(); $app->enqueueMessage('Cannot dialog with USPS web service.<br/>'.$result); return false; } return $responseDoc; } function processPackageLimit($limit_key, $limit_value, $product, $qty, $package, $units) { switch($limit_key) { case 'length_girth': $divide = $product['z'] + ($product['x'] + $product['y']) * 2; if(!$divide || $divide > $limit_value) return false; $current_limit_value = max(0.0, $limit_value - (float)(($package['x'] + $package['y']) * 2 + $package['z'])); return (int)floor($current_limit_value / $divide); break; } return parent::processPackageLimit($limit_key, $limit_value , $product, $qty, $package, $units); } function getResponseXML($httpResponse) { $lines = preg_split('/(\r\n|\r|\n)/', $httpResponse); $responseBody = ''; $lineCount = count($lines); for($i = 0; $i < $lineCount; $i++) { if($lines[$i] == '') break; } for($j = $i + 1; $j < $lineCount; $j++) { $responseBody .= $lines[$j] . "\n"; } return $responseBody; } function getUSPSweightDimensions($ounces) { if($ounces < 16) return array('Pounds' => 0, 'Ounces' => $ounces); $pounds = floor($ounces / 16); $ounces = fmod($ounces, $pounds * 16); return array('Pounds' => $pounds, 'Ounces' => $ounces); } function USPS_Country_List() { return array( 'AF' => 'Afghanistan', 'AL' => 'Albania', 'AX' => 'Aland Island (Finland)', 'DZ' => 'Algeria', 'AD' => 'Andorra', 'AO' => 'Angola', 'AI' => 'Anguilla', 'AG' => 'Antigua and Barbuda', 'AR' => 'Argentina', 'AM' => 'Armenia', 'AW' => 'Aruba', 'AU' => 'Australia', 'AT' => 'Austria', 'AZ' => 'Azerbaijan', 'BC' => 'Canada', 'BS' => 'Bahamas', 'BH' => 'Bahrain', 'BD' => 'Bangladesh', 'BB' => 'Barbados', 'BY' => 'Belarus', 'BE' => 'Belgium', 'BZ' => 'Belize', 'BJ' => 'Benin', 'BM' => 'Bermuda', 'BT' => 'Bhutan', 'BO' => 'Bolivia', 'BA' => 'Bosnia-Herzegovina', 'BW' => 'Botswana', 'BR' => 'Brazil', 'VG' => 'British Virgin Islands', 'BN' => 'Brunei Darussalam', 'BG' => 'Bulgaria', 'BF' => 'Burkina Faso', 'MM' => 'Burma', 'BI' => 'Burundi', 'KH' => 'Cambodia', 'CM' => 'Cameroon', 'CA' => 'Canada', 'CV' => 'Cape Verde', 'KY' => 'Cayman Islands', 'CF' => 'Central African Republic', 'TD' => 'Chad', 'CL' => 'Chile', 'CN' => 'China', 'CX' => 'Christmas Island (Australia)', 'CC' => 'Cocos Island (Australia)', 'CO' => 'Colombia', 'KM' => 'Comoros', 'CG' => 'Congo, Republic of the', 'CD' => 'Congo, Democratic Republic of the', 'CK' => 'Cook Islands (New Zealand)', 'CR' => 'Costa Rica', 'CI' => 'Cote d Ivoire (Ivory Coast)', 'HR' => 'Croatia', 'CU' => 'Cuba', 'CY' => 'Cyprus', 'CZ' => 'Czech Republic', 'DK' => 'Denmark', 'DJ' => 'Djibouti', 'DM' => 'Dominica', 'DO' => 'Dominican Republic', 'EC' => 'Ecuador', 'EG' => 'Egypt', 'SV' => 'El Salvador', 'GQ' => 'Equatorial Guinea', 'ER' => 'Eritrea', 'EE' => 'Estonia', 'ET' => 'Ethiopia', 'FK' => 'Falkland Islands', 'FO' => 'Faroe Islands', 'FJ' => 'Fiji', 'FI' => 'Finland', 'FR' => 'France', 'FX' => 'France', 'GF' => 'French Guiana', 'PF' => 'French Polynesia', 'GA' => 'Gabon', 'GM' => 'Gambia', 'GE' => 'Georgia, Republic of', 'DE' => 'Germany', 'GH' => 'Ghana', 'GI' => 'Gibraltar', 'GB' => 'Great Britain and Northern Ireland', 'GR' => 'Greece', 'GL' => 'Greenland', 'GD' => 'Grenada', 'GP' => 'Guadeloupe', 'GT' => 'Guatemala', 'GN' => 'Guinea', 'GW' => 'Guinea-Bissau', 'GY' => 'Guyana', 'HT' => 'Haiti', 'HN' => 'Honduras', 'HK' => 'Hong Kong', 'HU' => 'Hungary', 'IS' => 'Iceland', 'IN' => 'India', 'ID' => 'Indonesia', 'IR' => 'Iran', 'IQ' => 'Iraq', 'IE' => 'Ireland', 'IL' => 'Israel', 'IT' => 'Italy', 'JM' => 'Jamaica', 'JP' => 'Japan', 'JO' => 'Jordan', 'KZ' => 'Kazakhstan', 'KE' => 'Kenya', 'KI' => 'Kiribati', 'KW' => 'Kuwait', 'KG' => 'Kyrgyzstan', 'LA' => 'Laos', 'LV' => 'Latvia', 'LB' => 'Lebanon', 'LS' => 'Lesotho', 'LR' => 'Liberia', 'LY' => 'Libya', 'LI' => 'Liechtenstein', 'LT' => 'Lithuania', 'LU' => 'Luxembourg', 'MO' => 'Macao', 'MK' => 'Macedonia, Republic of', 'MG' => 'Madagascar', 'MW' => 'Malawi', 'MY' => 'Malaysia', 'MV' => 'Maldives', 'ML' => 'Mali', 'MT' => 'Malta', 'MQ' => 'Martinique', 'MR' => 'Mauritania', 'MU' => 'Mauritius', 'YT' => 'Mayotte (France)', 'MX' => 'Mexico', 'FM' => 'Micronesia, Federated States of', 'MD' => 'Moldova', 'MC' => 'Monaco (France)', 'MN' => 'Mongolia', 'MS' => 'Montserrat', 'MA' => 'Morocco', 'MZ' => 'Mozambique', 'NA' => 'Namibia', 'NR' => 'Nauru', 'NP' => 'Nepal', 'NL' => 'Netherlands', 'AN' => 'Netherlands Antilles', 'NC' => 'New Caledonia', 'NZ' => 'New Zealand', 'NI' => 'Nicaragua', 'NE' => 'Niger', 'NG' => 'Nigeria', 'KP' => 'North Korea (Korea, Democratic People\'s Republic of)', 'NO' => 'Norway', 'OM' => 'Oman', 'PK' => 'Pakistan', 'PA' => 'Panama', 'PG' => 'Papua New Guinea', 'PY' => 'Paraguay', 'PE' => 'Peru', 'PH' => 'Philippines', 'PN' => 'Pitcairn Island', 'PL' => 'Poland', 'PT' => 'Portugal', 'QA' => 'Qatar', 'RE' => 'Reunion', 'RO' => 'Romania', 'RU' => 'Russia', 'RW' => 'Rwanda', 'SH' => 'Saint Helena', 'KN' => 'Saint Kitts (St. Christopher and Nevis)', 'LC' => 'Saint Lucia', 'PM' => 'Saint Pierre and Miquelon', 'VC' => 'Saint Vincent and the Grenadines', 'SM' => 'San Marino', 'ST' => 'Sao Tome and Principe', 'SA' => 'Saudi Arabia', 'SN' => 'Senegal', 'RS' => 'Serbia', 'SC' => 'Seychelles', 'SL' => 'Sierra Leone', 'SG' => 'Singapore', 'SK' => 'Slovak Republic', 'SI' => 'Slovenia', 'SB' => 'Solomon Islands', 'SO' => 'Somalia', 'ZA' => 'South Africa', 'GS' => 'South Georgia (Falkland Islands)', 'KR' => 'South Korea (Korea, Republic of)', 'ES' => 'Spain', 'LK' => 'Sri Lanka', 'SD' => 'Sudan', 'SR' => 'Suriname', 'SZ' => 'Swaziland', 'SE' => 'Sweden', 'CH' => 'Switzerland', 'SY' => 'Syrian Arab Republic', 'TW' => 'Taiwan', 'TJ' => 'Tajikistan', 'TZ' => 'Tanzania', 'TH' => 'Thailand', 'TL' => 'East Timor (Indonesia)', 'TG' => 'Togo', 'TK' => 'Tokelau (Union) Group (Western Samoa)', 'TO' => 'Tonga', 'TT' => 'Trinidad and Tobago', 'TN' => 'Tunisia', 'TR' => 'Turkey', 'TM' => 'Turkmenistan', 'TC' => 'Turks and Caicos Islands', 'TV' => 'Tuvalu', 'UG' => 'Uganda', 'UA' => 'Ukraine', 'US' => 'United States', 'AE' => 'United Arab Emirates', 'UY' => 'Uruguay', 'UZ' => 'Uzbekistan', 'VU' => 'Vanuatu', 'VA' => 'Vatican City', 'VE' => 'Venezuela', 'VN' => 'Vietnam', 'WF' => 'Wallis and Futuna Islands', 'WS' => 'Western Samoa', 'YE' => 'Yemen', 'ZM' => 'Zambia', 'ZW' => 'Zimbabwe' ); } function xml2array( $xmlObject, $out = array()) { foreach( (array) $xmlObject as $index => $node) $out[$index] = ( is_object ( $node ) ) ? $this->xml2array ( $node ) : $node; return $out; } function array_sort($array, $on, $type, $order = SORT_ASC) { if(empty($array)) return array(); $new_array = array(); $sortable_array = array(); foreach ($array as $key => $value) { if($value->shipping_type == $type) $sortable_array[$key] = $value->shipping_price; } switch ($order) { case SORT_ASC: asort($sortable_array); break; case SORT_DESC: arsort($sortable_array); break; } foreach ($sortable_array as $k => $v) { $new_array[$k] = $array[$k]; } return $new_array; } }
| ver. 1.4 |
Github
|
.
| PHP 8.1.33 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка