[ // United States '01' => 'UPS Next Day Air', '02' => 'UPS 2nd Day Air', '03' => 'UPS Ground', '07' => 'UPS Worldwide Express', '08' => 'UPS Worldwide Expedited', '11' => 'UPS Standard', '12' => 'UPS 3 Day Select', '13' => 'UPS Next Day Air Saver', '14' => 'UPS Next Day Air Early A.M.', '54' => 'UPS Worldwide Express Plus', '59' => 'UPS 2nd Day Air A.M.', '65' => 'UPS Saver', ], 'CA' => [ // Canada '01' => 'UPS Express', '02' => 'UPS Expedited', '07' => 'UPS Worldwide Express', '08' => 'UPS Worldwide Expedited', '11' => 'UPS Standard', '12' => 'UPS 3 Day Select', '13' => 'UPS Saver', '14' => 'UPS Express Early A.M.', '54' => 'UPS Worldwide Express Plus', '65' => 'UPS Saver', ], 'EU' => [ // European Union '07' => 'UPS Express', '08' => 'UPS Expedited', '11' => 'UPS Standard', '54' => 'UPS Worldwide Express Plus', '65' => 'UPS Saver', '82' => 'UPS Today Standard', '83' => 'UPS Today Dedicated Courier', '84' => 'UPS Today Intercity', '85' => 'UPS Today Express', '86' => 'UPS Today Express Saver', '01' => 'UPS Next Day Air', '02' => 'UPS 2nd Day Air', '03' => 'UPS Ground', '14' => 'UPS Next Day Air Early A.M.', ], 'MX' => [ // Mexico '07' => 'UPS Express', '08' => 'UPS Expedited', '54' => 'UPS Express Plus', '65' => 'UPS Saver', ], 'other' => [ // Other '07' => 'UPS Express', '08' => 'UPS Worldwide Expedited', '11' => 'UPS Standard', '54' => 'UPS Worldwide Express Plus', '65' => 'UPS Saver', ], ]; public function __construct($options = []) { parent::__construct($options); if (isset($options['access_key'])) { $this->access_key = $options['access_key']; } if (isset($options['user_id'])) { $this->user_id = $options['user_id']; } if (isset($options['password'])) { $this->password = $options['password']; } if (isset($options['shipper_number'])) { $this->shipper_number = $options['shipper_number']; } if (isset($options['approved_codes'])) { $this->approved_codes = $options['approved_codes']; } if (isset($options['request_adapter'])) { $this->set_request_adapter($options['request_adapter']); } else { $this->set_request_adapter(new RateRequest\Post()); } } protected function prepare() { $service_code = '03'; $packages = ''; foreach ($this->shipment->getPackages() as $p) { $packages .= ' 02 IN ' . $p->getLength() . ' ' . $p->getWidth() . ' ' . $p->getHeight() . ' LBS ' . $p->getWeight() . ' '; } $this->data = ' ' . $this->access_key . ' ' . $this->user_id . ' ' . $this->password . ' Rate shop
' . $this->shipment->getFromPostalCode() . ' ' . $this->shipment->getFromCountryCode() . ' ' . (($this->shipment->isFromResidential()) ? '1' : '') . '
' . $this->shipper_number . '
' . $this->shipment->getToPostalCode() . ' ' . $this->shipment->getToCountryCode() . ' ' . (($this->shipment->isToResidential()) ? '1' : '') . '
' . $this->shipment->getFromStateProvinceCode() . ' ' . $this->shipment->getFromPostalCode() . ' ' . $this->shipment->getFromCountryCode() . ' ' . (($this->shipment->isFromResidential()) ? '1' : '') . '
' . $service_code . ' ' . $packages . '
'; return $this; } protected function execute() { if ($this->is_prod) { $url = $this->url_prod; } else { $url = $this->url_dev; } $this->response = $this->rate_request->execute($url, $this->data); return $this; } protected function process() { try { $dom = new DOMDocument('1.0', 'UTF-8'); $dom->loadXml($this->response); $rate_list = @$dom->getElementsByTagName('RatedShipment'); if (empty($rate_list->length)) { throw new Exception('Unable to get UPS Rates.'); } } catch (Exception $e) { // StatsD::increment('error.shipping.get_ups_rate'); // Kohana::$log->add(Log::ERROR, $e)->write(); throw $e; } foreach ($rate_list as $rate) { $code = @$rate ->getElementsByTagName('Service')->item(0) ->getElementsByTagName('Code')->item(0)->nodeValue; $name = Arr::get($this->shipping_codes['US'], $code); $cost = @$rate ->getElementsByTagName('TotalCharges')->item(0) ->getElementsByTagName('MonetaryValue')->item(0)->nodeValue; if ( ! empty($this->approved_codes) AND ! in_array($code, $this->approved_codes)) { continue; } $quote = new Quote; $quote ->setCarrier('ups') ->setCode($code) ->setName($name) ->setCost((int) $cost * 100); $this->rates[] = $quote; } return $this; } }