shop.balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

amazon_login_pay.php (26928B)


      1 <?php
      2 class ControllerExtensionPaymentAmazonLoginPay extends Controller {
      3 
      4 	private $error = array();
      5 
      6 	public function index() {
      7 
      8 		$this->load->language('extension/payment/amazon_login_pay');
      9 
     10 		$this->document->setTitle($this->language->get('heading_title'));
     11 
     12 		$this->load->model('setting/setting');
     13 
     14 		$this->load->model('extension/payment/amazon_login_pay');
     15 
     16 		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
     17 			$this->model_setting_setting->editSetting('payment_amazon_login_pay', $this->request->post);
     18 
     19 			$this->session->data['success'] = $this->language->get('text_success');
     20 
     21 			if (isset($this->request->post['language_reload'])) {
     22 				$this->response->redirect($this->url->link('payment/amazon_login_pay', 'user_token=' . $this->session->data['user_token'], true));
     23 			} else {
     24 				$this->response->redirect($this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true));
     25 			}
     26 		}
     27 
     28 		if (isset($this->error['warning'])) {
     29 			$data['error_warning'] = $this->error['warning'];
     30 		} else {
     31 			$data['error_warning'] = '';
     32 		}
     33 
     34 		if (isset($this->error['error_merchant_id'])) {
     35 			$data['error_merchant_id'] = $this->error['error_merchant_id'];
     36 		} else {
     37 			$data['error_merchant_id'] = '';
     38 		}
     39 
     40 		if (isset($this->error['error_access_key'])) {
     41 			$data['error_access_key'] = $this->error['error_access_key'];
     42 		} else {
     43 			$data['error_access_key'] = '';
     44 		}
     45 
     46 		if (isset($this->error['error_access_secret'])) {
     47 			$data['error_access_secret'] = $this->error['error_access_secret'];
     48 		} else {
     49 			$data['error_access_secret'] = '';
     50 		}
     51 
     52 		if (isset($this->error['error_client_secret'])) {
     53 			$data['error_client_secret'] = $this->error['error_client_secret'];
     54 		} else {
     55 			$data['error_client_secret'] = '';
     56 		}
     57 
     58 		if (isset($this->error['error_client_id'])) {
     59 			$data['error_client_id'] = $this->error['error_client_id'];
     60 		} else {
     61 			$data['error_client_id'] = '';
     62 		}
     63 
     64 		if (isset($this->error['error_minimum_total'])) {
     65 			$data['error_minimum_total'] = $this->error['error_minimum_total'];
     66 		} else {
     67 			$data['error_minimum_total'] = '';
     68 		}
     69 
     70 		if (isset($this->error['error_curreny'])) {
     71 			$data['error_curreny'] = $this->error['error_curreny'];
     72 		} else {
     73 			$data['error_curreny'] = '';
     74 		}
     75 
     76 		$data['breadcrumbs'] = array();
     77 
     78 		$data['breadcrumbs'][] = array(
     79 			'text' => $this->language->get('text_home'),
     80 			'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true)
     81 		);
     82 
     83 		$data['breadcrumbs'][] = array(
     84 			'text' => $this->language->get('text_extension'),
     85 			'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true)
     86 		);
     87 
     88 		$data['breadcrumbs'][] = array(
     89 			'text' => $this->language->get('heading_title'),
     90 			'href' => $this->url->link('extension/payment/amazon_login_pay', 'user_token=' . $this->session->data['user_token'], true)
     91 		);
     92 
     93 		$data['action'] = $this->url->link('extension/payment/amazon_login_pay', 'user_token=' . $this->session->data['user_token'], true);
     94 
     95 		$data['cancel'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true);
     96 
     97 		if (isset($this->request->post['payment_amazon_login_pay_merchant_id'])) {
     98 			$data['payment_amazon_login_pay_merchant_id'] = $this->request->post['payment_amazon_login_pay_merchant_id'];
     99 		} elseif ($this->config->get('payment_amazon_login_pay_merchant_id')) {
    100 			$data['payment_amazon_login_pay_merchant_id'] = $this->config->get('payment_amazon_login_pay_merchant_id');
    101 		} else {
    102 			$data['payment_amazon_login_pay_merchant_id'] = '';
    103 		}
    104 
    105 		if (isset($this->request->post['payment_amazon_login_pay_access_key'])) {
    106 			$data['payment_amazon_login_pay_access_key'] = $this->request->post['payment_amazon_login_pay_access_key'];
    107 		} elseif ($this->config->get('payment_amazon_login_pay_access_key')) {
    108 			$data['payment_amazon_login_pay_access_key'] = $this->config->get('payment_amazon_login_pay_access_key');
    109 		} else {
    110 			$data['payment_amazon_login_pay_access_key'] = '';
    111 		}
    112 
    113 		if (isset($this->request->post['payment_amazon_login_pay_access_secret'])) {
    114 			$data['payment_amazon_login_pay_access_secret'] = $this->request->post['payment_amazon_login_pay_access_secret'];
    115 		} elseif ($this->config->get('payment_amazon_login_pay_access_secret')) {
    116 			$data['payment_amazon_login_pay_access_secret'] = $this->config->get('payment_amazon_login_pay_access_secret');
    117 		} else {
    118 			$data['payment_amazon_login_pay_access_secret'] = '';
    119 		}
    120 
    121 		if (isset($this->request->post['payment_amazon_login_pay_client_id'])) {
    122 			$data['payment_amazon_login_pay_client_id'] = $this->request->post['payment_amazon_login_pay_client_id'];
    123 		} elseif ($this->config->get('payment_amazon_login_pay_client_id')) {
    124 			$data['payment_amazon_login_pay_client_id'] = $this->config->get('payment_amazon_login_pay_client_id');
    125 		} else {
    126 			$data['payment_amazon_login_pay_client_id'] = '';
    127 		}
    128 
    129 		if (isset($this->request->post['payment_amazon_login_pay_client_secret'])) {
    130 			$data['payment_amazon_login_pay_client_secret'] = $this->request->post['payment_amazon_login_pay_client_secret'];
    131 		} elseif ($this->config->get('payment_amazon_login_pay_client_secret')) {
    132 			$data['payment_amazon_login_pay_client_secret'] = $this->config->get('payment_amazon_login_pay_client_secret');
    133 		} else {
    134 			$data['payment_amazon_login_pay_client_secret'] = '';
    135 		}
    136 
    137 		if (isset($this->request->post['payment_amazon_login_pay_test'])) {
    138 			$data['payment_amazon_login_pay_test'] = $this->request->post['payment_amazon_login_pay_test'];
    139 		} elseif ($this->config->get('payment_amazon_login_pay_test')) {
    140 			$data['payment_amazon_login_pay_test'] = $this->config->get('payment_amazon_login_pay_test');
    141 		} else {
    142 			$data['payment_amazon_login_pay_test'] = 'sandbox';
    143 		}
    144 
    145 		if (isset($this->request->post['payment_amazon_login_pay_mode'])) {
    146 			$data['payment_amazon_login_pay_mode'] = $this->request->post['payment_amazon_login_pay_mode'];
    147 		} elseif ($this->config->get('payment_amazon_login_pay_mode')) {
    148 			$data['payment_amazon_login_pay_mode'] = $this->config->get('payment_amazon_login_pay_mode');
    149 		} else {
    150 			$data['payment_amazon_login_pay_mode'] = 'payment';
    151 		}
    152 
    153 		if (isset($this->request->post['payment_amazon_login_pay_checkout'])) {
    154 			$data['payment_amazon_login_pay_checkout'] = $this->request->post['payment_amazon_login_pay_checkout'];
    155 		} elseif ($this->config->get('payment_amazon_login_pay_checkout')) {
    156 			$data['payment_amazon_login_pay_checkout'] = $this->config->get('payment_amazon_login_pay_checkout');
    157 		} else {
    158 			$data['payment_amazon_login_pay_checkout'] = 'payment';
    159 		}
    160 
    161 		if (isset($this->request->post['payment_amazon_login_pay_payment_region'])) {
    162 			$data['payment_amazon_login_pay_payment_region'] = $this->request->post['payment_amazon_login_pay_payment_region'];
    163 		} elseif ($this->config->get('payment_amazon_login_pay_payment_region')) {
    164 			$data['payment_amazon_login_pay_payment_region'] = $this->config->get('payment_amazon_login_pay_payment_region');
    165 		} elseif (in_array($this->config->get('config_currency'), array('EUR', 'GBP', 'USD'))) {
    166 			$data['payment_amazon_login_pay_payment_region'] = $this->config->get('config_currency');
    167 		} else {
    168 			$data['payment_amazon_login_pay_payment_region'] = 'USD';
    169 		}
    170 
    171 		if ($data['payment_amazon_login_pay_payment_region'] == 'EUR') {
    172 			$data['payment_amazon_login_pay_language'] = 'de-DE';
    173 			$data['sp_id'] = 'AGGDPRPDPL7SL';
    174 			$data['locale'] = 'EUR';
    175 			//$ld = 'SPEXDEAPA-OpencartPL'; // needs to be changed
    176 			$ld = '';
    177 		} elseif ($data['payment_amazon_login_pay_payment_region'] == 'GBP') {
    178 			$data['payment_amazon_login_pay_language'] = 'en-GB';
    179 			$data['sp_id'] = 'A1P8WV11EWOP9H';
    180 			$data['locale'] = 'GBP';
    181 			//$ld = 'SPEXUKAPA-OpencartPL'; // needs to be changed
    182 			$ld = '';
    183 		} else {
    184 			$data['payment_amazon_login_pay_language'] = 'en-US';
    185 			$data['sp_id'] = 'A3GK1RS09H3A7D';
    186 			$data['locale'] = 'US';
    187 			//$ld = 'SPEXUSAPA-OpencartPL'; // needs to be changed
    188 			$ld = '';
    189 		}
    190 
    191 		if (isset($this->request->post['payment_amazon_login_pay_language'])) {
    192 			$data['payment_amazon_login_pay_language'] = $this->request->post['payment_amazon_login_pay_language'];
    193 		} elseif ($this->config->get('payment_amazon_login_pay_language')) {
    194 			$data['payment_amazon_login_pay_language'] = $this->config->get('payment_amazon_login_pay_language');
    195 		}
    196 
    197 		if (isset($this->request->post['payment_amazon_login_pay_capture_status'])) {
    198 			$data['payment_amazon_login_pay_capture_status'] = $this->request->post['payment_amazon_login_pay_capture_status'];
    199 		} elseif ($this->config->get('payment_amazon_login_pay_capture_status')) {
    200 			$data['payment_amazon_login_pay_capture_status'] = $this->config->get('payment_amazon_login_pay_capture_status');
    201 		} else {
    202 			$data['payment_amazon_login_pay_capture_status'] = '';
    203 		}
    204 
    205 		if (isset($this->request->post['payment_amazon_login_pay_pending_status'])) {
    206 			$data['payment_amazon_login_pay_pending_status'] = $this->request->post['payment_amazon_login_pay_pending_status'];
    207 		} elseif ($this->config->get('payment_amazon_login_pay_pending_status')) {
    208 			$data['payment_amazon_login_pay_pending_status'] = $this->config->get('payment_amazon_login_pay_pending_status');
    209 		} else {
    210 			$data['payment_amazon_login_pay_pending_status'] = '0';
    211 		}
    212 
    213 		if (isset($this->request->post['payment_amazon_login_pay_ipn_token'])) {
    214 			$data['payment_amazon_login_pay_ipn_token'] = $this->request->post['payment_amazon_login_pay_ipn_token'];
    215 		} elseif ($this->config->get('payment_amazon_login_pay_ipn_token')) {
    216 			$data['payment_amazon_login_pay_ipn_token'] = $this->config->get('payment_amazon_login_pay_ipn_token');
    217 		} else {
    218 			$data['payment_amazon_login_pay_ipn_token'] = sha1(uniqid(mt_rand(), 1));
    219 		}
    220 
    221 		$data['ipn_url'] = HTTPS_CATALOG . 'index.php?route=extension/payment/amazon_login_pay/ipn&token=' . $data['payment_amazon_login_pay_ipn_token'];
    222 
    223 		if (isset($this->request->post['payment_amazon_login_pay_minimum_total'])) {
    224 			$data['payment_amazon_login_pay_minimum_total'] = $this->request->post['payment_amazon_login_pay_minimum_total'];
    225 		} elseif ($this->config->get('payment_amazon_login_pay_minimum_total')) {
    226 			$data['payment_amazon_login_pay_minimum_total'] = $this->config->get('payment_amazon_login_pay_minimum_total');
    227 		} else {
    228 			$data['payment_amazon_login_pay_minimum_total'] = '0.01';
    229 		}
    230 
    231 		if (isset($this->request->post['payment_amazon_login_pay_geo_zone'])) {
    232 			$data['payment_amazon_login_pay_geo_zone'] = $this->request->post['payment_amazon_login_pay_geo_zone'];
    233 		} elseif ($this->config->get('payment_amazon_login_pay_geo_zone')) {
    234 			$data['payment_amazon_login_pay_geo_zone'] = $this->config->get('payment_amazon_login_pay_geo_zone');
    235 		} else {
    236 			$data['payment_amazon_login_pay_geo_zone'] = '0';
    237 		}
    238 
    239 		if (isset($this->request->post['payment_amazon_login_pay_debug'])) {
    240 			$data['payment_amazon_login_pay_debug'] = $this->request->post['payment_amazon_login_pay_debug'];
    241 		} elseif ($this->config->get('payment_amazon_login_pay_debug')) {
    242 			$data['payment_amazon_login_pay_debug'] = $this->config->get('payment_amazon_login_pay_debug');
    243 		} else {
    244 			$data['payment_amazon_login_pay_debug'] = '0';
    245 		}
    246 
    247 		if (isset($this->request->post['payment_amazon_login_pay_sort_order'])) {
    248 			$data['payment_amazon_login_pay_sort_order'] = $this->request->post['payment_amazon_login_pay_sort_order'];
    249 		} elseif ($this->config->get('payment_amazon_login_pay_sort_order')) {
    250 			$data['payment_amazon_login_pay_sort_order'] = $this->config->get('payment_amazon_login_pay_sort_order');
    251 		} else {
    252 			$data['payment_amazon_login_pay_sort_order'] = '0';
    253 		}
    254 
    255 		if (isset($this->request->post['payment_amazon_login_pay_status'])) {
    256 			$data['payment_amazon_login_pay_status'] = $this->request->post['payment_amazon_login_pay_status'];
    257 		} elseif ($this->config->get('payment_amazon_login_pay_status')) {
    258 			$data['payment_amazon_login_pay_status'] = $this->config->get('payment_amazon_login_pay_status');
    259 		} else {
    260 			$data['payment_amazon_login_pay_status'] = '0';
    261 		}
    262 
    263 		if (isset($this->request->post['payment_amazon_login_pay_declined_code'])) {
    264 			$data['payment_amazon_login_pay_declined_code'] = $this->request->post['payment_amazon_login_pay_declined_code'];
    265 		} elseif ($this->config->get('payment_amazon_login_pay_declined_code')) {
    266 			$data['payment_amazon_login_pay_declined_code'] = $this->config->get('payment_amazon_login_pay_declined_code');
    267 		} else {
    268 			$data['payment_amazon_login_pay_declined_code'] = '';
    269 		}
    270 
    271 		$this->load->model('localisation/geo_zone');
    272 
    273 		$data['geo_zones'] = $this->model_localisation_geo_zone->getGeoZones();
    274 
    275 		$this->load->model('localisation/order_status');
    276 
    277 		$data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses();
    278 
    279 		$data['declined_codes'] = array($this->language->get('text_amazon_invalid'), $this->language->get('text_amazon_rejected'), $this->language->get('text_amazon_timeout'));
    280 
    281 		$data['unique_id'] = 'oc-' . str_replace(' ', '-', strtolower($this->config->get('config_name'))) . '_' . mt_rand();
    282 		$data['allowed_login_domain'] = html_entity_decode(HTTPS_CATALOG);
    283 		$data['login_redirect_urls'][] = HTTPS_CATALOG . 'index.php?route=payment/amazon_login/login';
    284 		$data['login_redirect_urls'][] = HTTPS_CATALOG . 'index.php?route=payment/amazon_pay/login';
    285 		$data['store_name'] = $this->config->get('config_name');
    286 		$data['simple_path_language'] = str_replace('-', '_', $data['payment_amazon_login_pay_language']);
    287 
    288 		if ($data['payment_amazon_login_pay_payment_region'] == 'USD') {
    289 			$data['registration_url'] = "https://sellercentral.amazon.com/hz/me/sp/redirect?ld=" . $ld;
    290 
    291 			$data['languages'] = array(
    292 				'en-US' => $this->language->get('text_us')
    293 			);
    294 		} else {
    295 			$data['registration_url'] = "https://sellercentral-europe.amazon.com/hz/me/sp/redirect?ld=" . $ld;
    296 
    297 			$data['languages'] = array(
    298 				'de-DE' => $this->language->get('text_de'),
    299 				'es-ES' => $this->language->get('text_es'),
    300 				'fr-FR' => $this->language->get('text_fr'),
    301 				'it-IT' => $this->language->get('text_it'),
    302 				'en-GB' => $this->language->get('text_uk')
    303 			);
    304 		}
    305 
    306 		$data['payment_regions'] = array(
    307 			'EUR' => $this->language->get('text_eu_region'),
    308 			'GBP' => $this->language->get('text_uk_region'),
    309 			'USD' => $this->language->get('text_us_region')
    310 		);
    311 
    312 		$data['header'] = $this->load->controller('common/header');
    313 		$data['column_left'] = $this->load->controller('common/column_left');
    314 		$data['footer'] = $this->load->controller('common/footer');
    315 
    316 		$this->response->setOutput($this->load->view('extension/payment/amazon_login_pay', $data));
    317 	}
    318 
    319 	public function install() {
    320 		$this->load->model('extension/payment/amazon_login_pay');
    321 		$this->load->model('setting/event');
    322 		$this->model_extension_payment_amazon_login_pay->install();
    323 		$this->model_setting_event->addEvent('amazon_edit_capture', 'catalog/model/checkout/order/after', 'extension/payment/amazon_login_pay/capture');
    324 		$this->model_setting_event->addEvent('amazon_history_capture', 'catalog/model/checkout/order/addOrderHistory/after', 'extension/payment/amazon_login_pay/capture');
    325 	}
    326 
    327 	public function uninstall() {
    328 		$this->load->model('extension/payment/amazon_login_pay');
    329 		$this->load->model('setting/event');
    330 		$this->model_extension_payment_amazon_login_pay->uninstall();
    331 		$this->model_setting_event->deleteEventByCode('amazon_edit_capture');
    332 		$this->model_setting_event->deleteEventByCode('amazon_history_capture');
    333 	}
    334 
    335 	public function order() {
    336 
    337 		if ($this->config->get('payment_amazon_login_pay_status')) {
    338 
    339 			$this->load->model('extension/payment/amazon_login_pay');
    340 
    341 			$amazon_login_pay_order = $this->model_extension_payment_amazon_login_pay->getOrder($this->request->get['order_id']);
    342 
    343 			if (!empty($amazon_login_pay_order)) {
    344 
    345 				$this->load->language('extension/payment/amazon_login_pay');
    346 
    347 				$amazon_login_pay_order['total_captured'] = $this->model_extension_payment_amazon_login_pay->getTotalCaptured($amazon_login_pay_order['amazon_login_pay_order_id']);
    348 
    349 				$amazon_login_pay_order['total_formatted'] = $this->currency->format($amazon_login_pay_order['total'], $amazon_login_pay_order['currency_code'], true, true);
    350 				$amazon_login_pay_order['total_captured_formatted'] = $this->currency->format($amazon_login_pay_order['total_captured'], $amazon_login_pay_order['currency_code'], true, true);
    351 
    352 				$data['amazon_login_pay_order'] = $amazon_login_pay_order;
    353 
    354 				$data['order_id'] = $this->request->get['order_id'];
    355 				$data['user_token'] = $this->request->get['user_token'];
    356 
    357 				return $this->load->view('extension/payment/amazon_login_pay_order', $data);
    358 			}
    359 		}
    360 	}
    361 
    362 	public function cancel() {
    363 		$this->load->language('extension/payment/amazon_login_pay');
    364 		$json = array();
    365 
    366 		if (isset($this->request->post['order_id']) && $this->request->post['order_id'] != '') {
    367 			$this->load->model('extension/payment/amazon_login_pay');
    368 
    369 			$amazon_login_pay_order = $this->model_extension_payment_amazon_login_pay->getOrder($this->request->post['order_id']);
    370 
    371 			$cancel_response = $this->model_extension_payment_amazon_login_pay->cancel($amazon_login_pay_order);
    372 
    373 			$this->model_extension_payment_amazon_login_pay->logger($cancel_response);
    374 
    375 			if ($cancel_response['status'] == 'Completed') {
    376 				$this->model_extension_payment_amazon_login_pay->addTransaction($amazon_login_pay_order['amazon_login_pay_order_id'], 'cancel', $cancel_response['status'], 0.00);
    377 				$this->model_extension_payment_amazon_login_pay->updateCancelStatus($amazon_login_pay_order['amazon_login_pay_order_id'], 1);
    378 				$json['msg'] = $this->language->get('text_cancel_ok');
    379 				$json['data'] = array();
    380 				$json['data']['date_added'] = date("Y-m-d H:i:s");
    381 				$json['data']['type'] = 'cancel';
    382 				$json['data']['status'] = $cancel_response['status'];
    383 				$json['data']['amount'] = $this->currency->format(0.00, $amazon_login_pay_order['currency_code'], true, true);
    384 				$json['error'] = false;
    385 			} else {
    386 				$json['error'] = true;
    387 				$json['msg'] = isset($cancel_response['StatuesDetail']) && !empty($cancel_response['StatuesDetail']) ? (string)$cancel_response['StatuesDetail'] : 'Unable to cancel';
    388 			}
    389 		} else {
    390 			$json['error'] = true;
    391 			$json['msg'] = $this->language->get('error_data_missing');
    392 		}
    393 
    394 		$this->response->setOutput(json_encode($json));
    395 	}
    396 
    397 	public function capture() {
    398 		$this->load->language('extension/payment/amazon_login_pay');
    399 		$json = array();
    400 
    401 		if (isset($this->request->post['order_id']) && $this->request->post['order_id'] != '' && isset($this->request->post['amount']) && $this->request->post['amount'] > 0) {
    402 			$this->load->model('extension/payment/amazon_login_pay');
    403 
    404 			$amazon_login_pay_order = $this->model_extension_payment_amazon_login_pay->getOrder($this->request->post['order_id']);
    405 
    406 			$capture_response = $this->model_extension_payment_amazon_login_pay->capture($amazon_login_pay_order, $this->request->post['amount']);
    407 			$this->model_extension_payment_amazon_login_pay->logger($capture_response);
    408 
    409 			if ($capture_response['status'] == 'Completed' || $capture_response['status'] == 'Pending') {
    410 				$this->model_extension_payment_amazon_login_pay->addTransaction($amazon_login_pay_order['amazon_login_pay_order_id'], 'capture', $capture_response['status'], $this->request->post['amount'], $capture_response['AmazonAuthorizationId'], $capture_response['AmazonCaptureId']);
    411 
    412 				$total_captured = $this->model_extension_payment_amazon_login_pay->getTotalCaptured($amazon_login_pay_order['amazon_login_pay_order_id']);
    413 
    414 				if ($total_captured >= (double)$amazon_login_pay_order['total']) {
    415 					$this->model_extension_payment_amazon_login_pay->closeOrderRef($amazon_login_pay_order['amazon_order_reference_id']);
    416 					$this->model_extension_payment_amazon_login_pay->updateCaptureStatus($amazon_login_pay_order['amazon_login_pay_order_id'], 1);
    417 					$capture_status = 1;
    418 					$json['msg'] = $this->language->get('text_capture_ok_order');
    419 				} else {
    420 					$capture_status = 0;
    421 					$json['msg'] = $this->language->get('text_capture_ok');
    422 				}
    423 
    424 				$json['data'] = array();
    425 				$json['data']['date_added'] = date("Y-m-d H:i:s");
    426 				$json['data']['type'] = 'capture';
    427 				$json['data']['status'] = $capture_response['status'];
    428 				$json['data']['amazon_authorization_id'] = $capture_response['AmazonAuthorizationId'];
    429 				$json['data']['amazon_capture_id'] = $capture_response['AmazonCaptureId'];
    430 				$json['data']['amount'] = $this->currency->format($this->request->post['amount'], $amazon_login_pay_order['currency_code'], true, true);
    431 				$json['data']['capture_status'] = $capture_status;
    432 				$json['data']['total'] = $this->currency->format($total_captured, $amazon_login_pay_order['currency_code'], true, true);
    433 				$json['error'] = false;
    434 			} else {
    435 				$json['error'] = true;
    436 				$json['msg'] = isset($capture_response['status_detail']) && !empty($capture_response['status_detail']) ? (string)$capture_response['status_detail'] : 'Unable to capture';
    437 			}
    438 		} else {
    439 			$json['error'] = true;
    440 			$json['msg'] = $this->language->get('error_data_missing');
    441 		}
    442 
    443 		$this->response->setOutput(json_encode($json));
    444 	}
    445 
    446 	public function refund() {
    447 		$this->load->language('extension/payment/amazon_login_pay');
    448 		$json = array();
    449 
    450 		if (isset($this->request->post['order_id']) && !empty($this->request->post['order_id'])) {
    451 			$this->load->model('extension/payment/amazon_login_pay');
    452 
    453 			$amazon_login_pay_order = $this->model_extension_payment_amazon_login_pay->getOrder($this->request->post['order_id']);
    454 
    455 			$refund_response = $this->model_extension_payment_amazon_login_pay->refund($amazon_login_pay_order, $this->request->post['amount']);
    456 
    457 			$this->model_extension_payment_amazon_login_pay->logger($refund_response);
    458 
    459 			$refund_status = '';
    460 			$total_captured = '';
    461 			$total_refunded = '';
    462 
    463 			foreach ($refund_response as $response) {
    464 				if ($response['status'] == 'Pending') {
    465 					$this->model_extension_payment_amazon_login_pay->addTransaction($amazon_login_pay_order['amazon_login_pay_order_id'], 'refund', $response['status'], $response['amount'] * -1, $response['amazon_authorization_id'], $response['amazon_capture_id'], $response['AmazonRefundId']);
    466 
    467 					$total_refunded = $this->model_extension_payment_amazon_login_pay->getTotalRefunded($amazon_login_pay_order['amazon_login_pay_order_id']);
    468 					$total_captured = $this->model_extension_payment_amazon_login_pay->getTotalCaptured($amazon_login_pay_order['amazon_login_pay_order_id']);
    469 
    470 					if ($total_captured <= 0 && $amazon_login_pay_order['capture_status'] == 1) {
    471 						$this->model_extension_payment_amazon_login_pay->updateRefundStatus($amazon_login_pay_order['amazon_login_pay_order_id'], 1);
    472 						$refund_status = 1;
    473 						$json['msg'][] = $this->language->get('text_refund_ok_order') . '<br />';
    474 					} else {
    475 						$refund_status = 0;
    476 						$json['msg'][] = $this->language->get('text_refund_ok') . '<br />';
    477 					}
    478 
    479 					$data = array();
    480 					$data['date_added'] = date("Y-m-d H:i:s");
    481 					$data['type'] = 'refund';
    482 					$data['status'] = $response['status'];
    483 					$data['amazon_authorization_id'] = $response['amazon_authorization_id'];
    484 					$data['amazon_capture_id'] = $response['amazon_capture_id'];
    485 					$data['amazon_refund_id'] = $response['AmazonRefundId'];
    486 					$data['amount'] = $this->currency->format(($response['amount'] * -1), $amazon_login_pay_order['currency_code'], true, true);
    487 					$json['data'][] = $data;
    488 				} else {
    489 					$json['error'] = true;
    490 					$json['error_msg'][] = isset($response['status_detail']) && !empty($response['status_detail']) ? (string)$response['status_detail'] : 'Unable to refund';
    491 				}
    492 			}
    493 			$json['refund_status'] = $refund_status;
    494 			$json['total_captured'] = $this->currency->format($total_captured, $amazon_login_pay_order['currency_code'], true, true);
    495 			$json['total_refunded'] = $this->currency->format($total_refunded, $amazon_login_pay_order['currency_code'], true, true);
    496 		} else {
    497 			$json['error'] = true;
    498 			$json['error_msg'][] = $this->language->get('error_data_missing');
    499 		}
    500 		$this->response->setOutput(json_encode($json));
    501 	}
    502 
    503 	protected function validate() {
    504 		$this->load->model('localisation/currency');
    505 
    506 		if (!$this->user->hasPermission('modify', 'extension/payment/amazon_login_pay')) {
    507 			$this->error['warning'] = $this->language->get('error_permission');
    508 		}
    509 
    510 		if (!$this->request->post['payment_amazon_login_pay_merchant_id']) {
    511 			$this->error['error_merchant_id'] = $this->language->get('error_merchant_id');
    512 		}
    513 
    514 		if (!$this->request->post['payment_amazon_login_pay_access_key']) {
    515 			$this->error['error_access_key'] = $this->language->get('error_access_key');
    516 		}
    517 
    518 		if (empty($this->error)) {
    519 			$this->load->model('extension/payment/amazon_login_pay');
    520 			$errors = $this->model_extension_payment_amazon_login_pay->validateDetails($this->request->post);
    521 			if (isset($errors['error_code']) && $errors['error_code'] == 'InvalidParameterValue') {
    522 				$this->error['error_merchant_id'] = $errors['status_detail'];
    523 			} elseif (isset($errors['error_code']) && $errors['error_code'] == 'InvalidAccessKeyId') {
    524 				$this->error['error_access_key'] = $errors['status_detail'];
    525 			}
    526 		}
    527 
    528 		if (!$this->request->post['payment_amazon_login_pay_access_secret']) {
    529 			$this->error['error_access_secret'] = $this->language->get('error_access_secret');
    530 		}
    531 
    532 		if (!$this->request->post['payment_amazon_login_pay_client_id']) {
    533 			$this->error['error_client_id'] = $this->language->get('error_client_id');
    534 		}
    535 
    536 		if (!$this->request->post['payment_amazon_login_pay_client_secret']) {
    537 			$this->error['error_client_secret'] = $this->language->get('error_client_secret');
    538 		}
    539 
    540 		if ($this->request->post['payment_amazon_login_pay_minimum_total'] <= 0) {
    541 			$this->error['error_minimum_total'] = $this->language->get('error_minimum_total');
    542 		}
    543 
    544 		if (isset($this->request->post['amazon_login_pay_region'])) {
    545 			$currency_code = $this->request->post['amazon_login_pay_region'];
    546 
    547 			$currency = $this->model_localisation_currency->getCurrency($this->currency->getId($currency_code));
    548 
    549 			if (empty($currency) || $currency['status'] != '1') {
    550 				$this->error['error_curreny'] = sprintf($this->language->get('error_curreny'), $currency_code);
    551 			}
    552 		}
    553 
    554 		return !$this->error;
    555 	}
    556 
    557 }