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 }