public function shipping_quotes() { $this->load->model('setting/extension'); $this->load->library('cba'); $this->load->model('payment/amazon_checkout'); $this->language->load('payment/amazon_checkout'); if (!isset($this->session->data['cba'])) { $this->redirect($this->url->link('common/home')); } $contract_id = $this->session->data['cba']['contract_id']; $cba = new CBA($this->config->get('amazon_checkout_merchant_id'), $this->config->get('amazon_checkout_access_key'), $this->config->get('amazon_checkout_access_secret')); $cba->setMode($this->config->get('amazon_checkout_mode')); $response = $cba->getPurchaseContract($contract_id); $xml = simplexml_load_string($response); $json = array(); if (isset($xml->GetPurchaseContractResult->PurchaseContract->Destinations->Destination[0]->PhysicalDestinationAttributes->ShippingAddress)) { $address_xml = $xml->GetPurchaseContractResult->PurchaseContract->Destinations->Destination[0]->PhysicalDestinationAttributes->ShippingAddress; $result = $this->model_payment_amazon_checkout->getCountry((string) $address_xml->CountryCode); if (!empty($result)) { $iso_code2 = $result['iso_code_2']; $iso_code3 = $result['iso_code_3']; $address_format = $result['address_format']; $country_name = $result['name']; $country_id = (int) $result['country_id']; $zone = (string) $address_xml->StateOrProvinceCode; $result = $this->model_payment_amazon_checkout->getZone($zone, $country_id); if (isset($result['zone_id'])) { $zone_id = $result['zone_id']; $zone_code = $result['code']; } else { $zone_id = 0; $zone_code = ''; } } else { $iso_code2 = ''; $iso_code3 = ''; $address_format = ''; $country_name = ''; $country_id = 0; $zone_id = 0; $zone_code = ''; $zone = ''; } $this->tax->setShippingAddress($country_id, $zone_id); $address = array('firstname' => (string) $address_xml->Name, 'lastname' => '', 'company' => '', 'company_id' => '', 'tax_id' => '', 'address_1' => '', 'address_2' => '', 'postcode' => (string) $address_xml->PostalCode, 'city' => (string) $address_xml->City, 'zone_id' => $zone_id, 'zone' => (string) $address_xml->StateOrProvinceCode, 'zone_code' => $zone_code, 'country_id' => $country_id, 'country' => $country_name, 'iso_code_2' => $iso_code2, 'iso_code_3' => $iso_code3, 'address_format' => $address_format); $quotes = array(); $results = $this->model_setting_extension->getExtensions('shipping'); foreach ($results as $result) { if (isset($result['code'])) { $code = $result['code']; } else { $code = $result['key']; } if ($this->config->get($code . '_status')) { $this->load->model('shipping/' . $code); $quote = $this->{'model_shipping_' . $code}->getQuote($address); if ($quote && empty($quote['error'])) { $quotes[$code] = array('title' => $quote['title'], 'quote' => $quote['quote'], 'sort_order' => $quote['sort_order'], 'error' => $quote['error']); } } } $sort_order = array(); foreach ($quotes as $key => $value) { $sort_order[$key] = $value['sort_order']; } array_multisort($sort_order, SORT_ASC, $quotes); $this->session->data['cba']['shipping_methods'] = $quotes; if (empty($quotes)) { $json['error'] = $this->language->get('error_no_shipping_methods'); } else { $json['quotes'] = $quotes; } if (isset($this->session->data['cba']['shipping_method']) && !empty($this->session->data['cba']['shipping_method']) && isset($this->session->data['cba']['shipping_method']['code'])) { $json['selected'] = $this->session->data['cba']['shipping_method']['code']; } else { $json['selected'] = ''; } } else { $json['error'] = $this->language->get('error_shipping_methods'); } $this->response->addHeader('Content-Type: application/json'); $this->response->setOutput(json_encode($json)); }