shop.balmet.com

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

cardconnect.php (20472B)


      1 <?php
      2 class ControllerExtensionPaymentCardConnect extends Controller {
      3 	private $error = array();
      4 
      5 	public function index() {
      6 		$this->load->model('setting/setting');
      7 
      8 		$this->load->model('extension/payment/cardconnect');
      9 
     10 		$this->load->language('extension/payment/cardconnect');
     11 
     12 		$this->document->setTitle($this->language->get('heading_title'));
     13 
     14 		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
     15 			$this->model_setting_setting->editSetting('payment_cardconnect', $this->request->post);
     16 
     17 			$this->session->data['success'] = $this->language->get('text_success');
     18 
     19 			$this->response->redirect($this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true));
     20 		}
     21 
     22 		$data['breadcrumbs'] = array();
     23 
     24 		$data['breadcrumbs'][] = array(
     25 			'text' => $this->language->get('text_home'),
     26 			'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true)
     27 		);
     28 
     29 		$data['breadcrumbs'][] = array(
     30 			'text' => $this->language->get('text_extension'),
     31 			'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true)
     32 		);
     33 
     34 		$data['breadcrumbs'][] = array(
     35 			'text' => $this->language->get('heading_title'),
     36 			'href' => $this->url->link('extension/payment/cardconnect', 'user_token=' . $this->session->data['user_token'], true)
     37 		);
     38 
     39 		$data['action'] = $this->url->link('extension/payment/cardconnect', 'user_token=' . $this->session->data['user_token'], true);
     40 
     41 		$data['cancel'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true);
     42 
     43 		if (isset($this->request->post['payment_cardconnect_merchant_id'])) {
     44 			$data['payment_cardconnect_merchant_id'] = $this->request->post['payment_cardconnect_merchant_id'];
     45 		} else {
     46 			$data['payment_cardconnect_merchant_id'] = $this->config->get('payment_cardconnect_merchant_id');
     47 		}
     48 
     49 		if (isset($this->request->post['cardconnect_api_username'])) {
     50 			$data['cardconnect_api_username'] = $this->request->post['cardconnect_api_username'];
     51 		} else {
     52 			$data['cardconnect_api_username'] = $this->config->get('cardconnect_api_username');
     53 		}
     54 
     55 		if (isset($this->request->post['cardconnect_api_password'])) {
     56 			$data['cardconnect_api_password'] = $this->request->post['cardconnect_api_password'];
     57 		} else {
     58 			$data['cardconnect_api_password'] = $this->config->get('cardconnect_api_password');
     59 		}
     60 
     61 		if (isset($this->request->post['cardconnect_token'])) {
     62 			$data['cardconnect_token'] = $this->request->post['cardconnect_token'];
     63 		} elseif ($this->config->has('cardconnect_token')) {
     64 			$data['cardconnect_token'] = $this->config->get('cardconnect_token');
     65 		} else {
     66 			$data['cardconnect_token'] = md5(time());
     67 		}
     68 
     69 		if (isset($this->request->post['cardconnect_transaction'])) {
     70 			$data['cardconnect_transaction'] = $this->request->post['cardconnect_transaction'];
     71 		} else {
     72 			$data['cardconnect_transaction'] = $this->config->get('cardconnect_transaction');
     73 		}
     74 
     75 		if (isset($this->request->post['cardconnect_site'])) {
     76 			$data['cardconnect_site'] = $this->request->post['cardconnect_site'];
     77 		} elseif ($this->config->has('cardconnect_site')) {
     78 			$data['cardconnect_site'] = $this->config->get('cardconnect_site');
     79 		} else {
     80 			$data['cardconnect_site'] = 'fts';
     81 		}
     82 
     83 		if (isset($this->request->post['cardconnect_environment'])) {
     84 			$data['cardconnect_environment'] = $this->request->post['cardconnect_environment'];
     85 		} else {
     86 			$data['cardconnect_environment'] = $this->config->get('cardconnect_environment');
     87 		}
     88 
     89 		if (isset($this->request->post['cardconnect_store_cards'])) {
     90 			$data['cardconnect_store_cards'] = $this->request->post['cardconnect_store_cards'];
     91 		} else {
     92 			$data['cardconnect_store_cards'] = $this->config->get('cardconnect_store_cards');
     93 		}
     94 
     95 		if (isset($this->request->post['cardconnect_echeck'])) {
     96 			$data['cardconnect_echeck'] = $this->request->post['cardconnect_echeck'];
     97 		} else {
     98 			$data['cardconnect_echeck'] = $this->config->get('cardconnect_echeck');
     99 		}
    100 
    101 		if (isset($this->request->post['cardconnect_total'])) {
    102 			$data['cardconnect_total'] = $this->request->post['cardconnect_total'];
    103 		} else {
    104 			$data['cardconnect_total'] = $this->config->get('cardconnect_total');
    105 		}
    106 
    107 		if (isset($this->request->post['cardconnect_geo_zone'])) {
    108 			$data['cardconnect_geo_zone'] = $this->request->post['cardconnect_geo_zone'];
    109 		} else {
    110 			$data['cardconnect_geo_zone'] = $this->config->get('cardconnect_geo_zone');
    111 		}
    112 
    113 		if (isset($this->request->post['cardconnect_status'])) {
    114 			$data['cardconnect_status'] = $this->request->post['cardconnect_status'];
    115 		} else {
    116 			$data['cardconnect_status'] = $this->config->get('cardconnect_status');
    117 		}
    118 
    119 		if (isset($this->request->post['cardconnect_logging'])) {
    120 			$data['cardconnect_logging'] = $this->request->post['cardconnect_logging'];
    121 		} else {
    122 			$data['cardconnect_logging'] = $this->config->get('cardconnect_logging');
    123 		}
    124 
    125 		if (isset($this->request->post['cardconnect_sort_order'])) {
    126 			$data['cardconnect_sort_order'] = $this->request->post['cardconnect_sort_order'];
    127 		} else {
    128 			$data['cardconnect_sort_order'] = $this->config->get('cardconnect_sort_order');
    129 		}
    130 
    131 		$data['cardconnect_cron_url'] = HTTPS_CATALOG . 'index.php?route=extension/payment/cardconnect/cron&token=' . $data['cardconnect_token'];
    132 
    133 		if ($this->config->get('cardconnect_cron_time')) {
    134 			$data['cardconnect_cron_time'] = date($this->language->get('datetime_format'), strtotime($this->config->get('cardconnect_cron_time')));
    135 		} else {
    136 			$data['cardconnect_cron_time'] = $this->language->get('text_no_cron_time');
    137 		}
    138 
    139 		if (isset($this->request->post['cardconnect_order_status_id_pending'])) {
    140 			$data['cardconnect_order_status_id_pending'] = $this->request->post['cardconnect_order_status_id_pending'];
    141 		} elseif ($this->config->has('cardconnect_order_status_id_pending')) {
    142 			$data['cardconnect_order_status_id_pending'] = $this->config->get('cardconnect_order_status_id_pending');
    143 		} else {
    144 			$data['cardconnect_order_status_id_pending'] = '1';
    145 		}
    146 
    147 		if (isset($this->request->post['cardconnect_order_status_id_processing'])) {
    148 			$data['cardconnect_order_status_id_processing'] = $this->request->post['cardconnect_order_status_id_processing'];
    149 		} elseif ($this->config->has('cardconnect_order_status_id_processing')) {
    150 			$data['cardconnect_order_status_id_processing'] = $this->config->get('cardconnect_order_status_id_processing');
    151 		} else {
    152 			$data['cardconnect_order_status_id_processing'] = '2';
    153 		}
    154 
    155 		if (isset($this->error['warning'])) {
    156 			$data['error_warning'] = $this->error['warning'];
    157 		} else {
    158 			$data['error_warning'] = '';
    159 		}
    160 
    161 		if (isset($this->session->data['success'])) {
    162 			$data['success'] = $this->session->data['success'];
    163 
    164 			unset($this->session->data['success']);
    165 		} else {
    166 			$data['success'] = '';
    167 		}
    168 
    169 		if (isset($this->error['payment_cardconnect_merchant_id'])) {
    170 			$data['error_payment_cardconnect_merchant_id'] = $this->error['payment_cardconnect_merchant_id'];
    171 		} else {
    172 			$data['error_payment_cardconnect_merchant_id'] = '';
    173 		}
    174 
    175 		if (isset($this->error['cardconnect_api_username'])) {
    176 			$data['error_cardconnect_api_username'] = $this->error['cardconnect_api_username'];
    177 		} else {
    178 			$data['error_cardconnect_api_username'] = '';
    179 		}
    180 
    181 		if (isset($this->error['cardconnect_api_password'])) {
    182 			$data['error_cardconnect_api_password'] = $this->error['cardconnect_api_password'];
    183 		} else {
    184 			$data['error_cardconnect_api_password'] = '';
    185 		}
    186 
    187 		if (isset($this->error['cardconnect_token'])) {
    188 			$data['error_cardconnect_token'] = $this->error['cardconnect_token'];
    189 		} else {
    190 			$data['error_cardconnect_token'] = '';
    191 		}
    192 
    193 		if (isset($this->error['cardconnect_site'])) {
    194 			$data['error_cardconnect_site'] = $this->error['cardconnect_site'];
    195 		} else {
    196 			$data['error_cardconnect_site'] = '';
    197 		}
    198 
    199 		$this->load->model('localisation/order_status');
    200 
    201 		$data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses();
    202 
    203 		$this->load->model('localisation/geo_zone');
    204 
    205 		$data['geo_zones'] = $this->model_localisation_geo_zone->getGeoZones();
    206 
    207 		$data['user_token'] = $this->session->data['user_token'];
    208 
    209 		$data['header'] = $this->load->controller('common/header');
    210 		$data['column_left'] = $this->load->controller('common/column_left');
    211 		$data['footer'] = $this->load->controller('common/footer');
    212 
    213 		$this->response->setOutput($this->load->view('extension/payment/cardconnect', $data));
    214 	}
    215 
    216 	public function install() {
    217 		if ($this->user->hasPermission('modify', 'marketplace/extension')) {
    218 			$this->load->model('extension/payment/cardconnect');
    219 
    220 			$this->model_extension_payment_cardconnect->install();
    221 		}
    222 	}
    223 
    224 	public function uninstall() {
    225 		if ($this->user->hasPermission('modify', 'marketplace/extension')) {
    226 			$this->load->model('extension/payment/cardconnect');
    227 
    228 			$this->model_extension_payment_cardconnect->uninstall();
    229 		}
    230 	}
    231 
    232 	public function order() {
    233 		if ($this->config->get('cardconnect_status')) {
    234 			$this->load->model('extension/payment/cardconnect');
    235 
    236 			$order_id = $this->request->get['order_id'];
    237 
    238 			$cardconnect_order = $this->model_extension_payment_cardconnect->getOrder($this->request->get['order_id']);
    239 
    240 			if ($cardconnect_order) {
    241 				$this->load->language('extension/payment/cardconnect');
    242 
    243 				if ($cardconnect_order['payment_method'] == 'card') {
    244 					$cardconnect_order['payment_method'] = $this->language->get('text_card');
    245 				} else {
    246 					$cardconnect_order['payment_method'] = $this->language->get('text_echeck');
    247 				}
    248 
    249 				$cardconnect_order['total_formatted'] = $this->currency->format($cardconnect_order['total'], $cardconnect_order['currency_code'], false, true);
    250 
    251 				$cardconnect_order['total_captured'] = $this->model_extension_payment_cardconnect->getTotalCaptured($cardconnect_order['cardconnect_order_id']);
    252 
    253 				$cardconnect_order['total_captured_formatted'] = $this->currency->format($cardconnect_order['total_captured'], $cardconnect_order['currency_code'], false, true);
    254 
    255 				foreach($cardconnect_order['transactions'] as &$transaction) {
    256 					switch ($transaction['type']) {
    257 						case 'payment':
    258 							$transaction['type'] = 'Payment';
    259 							break;
    260 						case 'auth':
    261 							$transaction['type'] = 'Authorize';
    262 							break;
    263 						case 'refund':
    264 							$transaction['type'] = 'Refund';
    265 							break;
    266 						case 'void':
    267 							$transaction['type'] = 'Void';
    268 							break;
    269 						default:
    270 							$transaction['type'] = 'Payment';
    271 					}
    272 
    273 					$transaction['amount'] = $this->currency->format($transaction['amount'], $cardconnect_order['currency_code'], false, true);
    274 
    275 					if ($transaction['status'] == 'Y') {
    276 						$transaction['status'] = 'Accepted';
    277 					} else if ($transaction['status'] == 'N') {
    278 						$transaction['status'] = 'Rejected';
    279 					}
    280 
    281 					$transaction['date_modified'] = date($this->language->get('datetime_format'), strtotime($transaction['date_modified']));
    282 
    283 					$transaction['date_added'] = date($this->language->get('datetime_format'), strtotime($transaction['date_added']));
    284 				}
    285 
    286 				$data['cardconnect_order'] = $cardconnect_order;
    287 
    288 				$data['order_id'] = $this->request->get['order_id'];
    289 
    290 				$data['user_token'] = $this->request->get['user_token'];
    291 
    292 				return $this->load->view('extension/payment/cardconnect_order', $data);
    293 			}
    294 		}
    295 	}
    296 
    297 	public function inquire() {
    298 		$this->load->language('extension/payment/cardconnect');
    299 
    300 		$json = array();
    301 
    302 		if ($this->config->get('cardconnect_status')) {
    303 			if (isset($this->request->post['order_id']) && isset($this->request->post['retref'])) {
    304 				$this->load->model('extension/payment/cardconnect');
    305 
    306 				$cardconnect_order = $this->model_extension_payment_cardconnect->getOrder($this->request->post['order_id']);
    307 
    308 				if ($cardconnect_order) {
    309 					$inquire_response = $this->model_extension_payment_cardconnect->inquire($cardconnect_order, $this->request->post['retref']);
    310 
    311 					if (isset($inquire_response['respstat']) && $inquire_response['respstat'] == 'C') {
    312 						$json['error'] = $inquire_response['resptext'];
    313 					} else {
    314 						$this->model_extension_payment_cardconnect->updateTransactionStatusByRetref($this->request->post['retref'], $inquire_response['setlstat']);
    315 
    316 						$json['status'] = $inquire_response['setlstat'];
    317 
    318 						$json['date_modified'] = date($this->language->get('datetime_format'));
    319 
    320 						$json['success'] = $this->language->get('text_inquire_success');
    321 					}
    322 				} else {
    323 					$json['error'] = $this->language->get('error_no_order');
    324 				}
    325 			} else {
    326 				$json['error'] = $this->language->get('error_data_missing');
    327 			}
    328 		} else {
    329 			$json['error'] = $this->language->get('error_not_enabled');
    330 		}
    331 
    332 		$this->response->addHeader('Content-Type: application/json');
    333 		$this->response->setOutput(json_encode($json));
    334 	}
    335 
    336 	public function capture() {
    337 		$this->load->language('extension/payment/cardconnect');
    338 
    339 		$json = array();
    340 
    341 		if ($this->config->get('cardconnect_status')) {
    342 			if (isset($this->request->post['order_id']) && isset($this->request->post['amount'])) {
    343 				if ($this->request->post['amount'] > 0) {
    344 					$this->load->model('extension/payment/cardconnect');
    345 
    346 					$cardconnect_order = $this->model_extension_payment_cardconnect->getOrder($this->request->post['order_id']);
    347 
    348 					if ($cardconnect_order) {
    349 						$capture_response = $this->model_extension_payment_cardconnect->capture($cardconnect_order, $this->request->post['amount']);
    350 
    351 						if (!isset($capture_response['retref'])) {
    352 							$json['error'] = $this->language->get('error_invalid_response');
    353 						} else if (isset($capture_response['respstat']) && $capture_response['respstat'] == 'C') {
    354 							$json['error'] = $capture_response['resptext'];
    355 						} else {
    356 							$this->model_extension_payment_cardconnect->addTransaction($cardconnect_order['cardconnect_order_id'], 'payment', $capture_response['retref'], $this->request->post['amount'], $capture_response['setlstat']);
    357 
    358 							$total_captured = $this->model_extension_payment_cardconnect->getTotalCaptured($cardconnect_order['cardconnect_order_id']);
    359 
    360 							$json['retref'] = $capture_response['retref'];
    361 							$json['amount'] = $this->currency->format($this->request->post['amount'], $cardconnect_order['currency_code'], false, true);
    362 							$json['status'] = $capture_response['setlstat'];
    363 							$json['date_modified'] = date($this->language->get('datetime_format'));
    364 							$json['date_added'] = date($this->language->get('datetime_format'));
    365 							$json['total_captured'] = $this->currency->format($total_captured, $cardconnect_order['currency_code'], false, true);
    366 
    367 							$json['success'] = $this->language->get('text_capture_success');
    368 						}
    369 					} else {
    370 						$json['error'] = $this->language->get('error_no_order');
    371 					}
    372 				} else {
    373 					$json['error'] = $this->language->get('error_amount_zero');
    374 				}
    375 			} else {
    376 				$json['error'] = $this->language->get('error_data_missing');
    377 			}
    378 		} else {
    379 			$json['error'] = $this->language->get('error_not_enabled');
    380 		}
    381 
    382 		$this->response->addHeader('Content-Type: application/json');
    383 		$this->response->setOutput(json_encode($json));
    384 	}
    385 
    386 	public function refund() {
    387 		$this->load->language('extension/payment/cardconnect');
    388 
    389 		$json = array();
    390 
    391 		if ($this->config->get('cardconnect_status')) {
    392 			if (isset($this->request->post['order_id']) && isset($this->request->post['amount'])) {
    393 				if ($this->request->post['amount'] > 0) {
    394 					$this->load->model('extension/payment/cardconnect');
    395 
    396 					$cardconnect_order = $this->model_extension_payment_cardconnect->getOrder($this->request->post['order_id']);
    397 
    398 					if ($cardconnect_order) {
    399 						$refund_response = $this->model_extension_payment_cardconnect->refund($cardconnect_order, $this->request->post['amount']);
    400 
    401 						if (!isset($refund_response['retref'])) {
    402 							$json['error'] = $this->language->get('error_invalid_response');
    403 						} else if (isset($refund_response['respstat']) && $refund_response['respstat'] == 'C') {
    404 							$json['error'] = $refund_response['resptext'];
    405 						} else {
    406 							$this->model_extension_payment_cardconnect->addTransaction($cardconnect_order['cardconnect_order_id'], 'refund', $refund_response['retref'], $this->request->post['amount'] * -1, $refund_response['resptext']);
    407 
    408 							$total_captured = $this->model_extension_payment_cardconnect->getTotalCaptured($cardconnect_order['cardconnect_order_id']);
    409 
    410 							$json['retref'] = $refund_response['retref'];
    411 							$json['amount'] = $this->currency->format($this->request->post['amount'] * -1, $cardconnect_order['currency_code'], false, true);
    412 							$json['status'] = $refund_response['resptext'];
    413 							$json['date_modified'] = date($this->language->get('datetime_format'));
    414 							$json['date_added'] = date($this->language->get('datetime_format'));
    415 							$json['total_captured'] = $this->currency->format($total_captured, $cardconnect_order['currency_code'], false, true);
    416 
    417 							$json['success'] = $this->language->get('text_refund_success');
    418 						}
    419 					} else {
    420 						$json['error'] = $this->language->get('error_no_order');
    421 					}
    422 				} else {
    423 					$json['error'] = $this->language->get('error_amount_zero');
    424 				}
    425 			} else {
    426 				$json['error'] = $this->language->get('error_data_missing');
    427 			}
    428 		} else {
    429 			$json['error'] = $this->language->get('error_not_enabled');
    430 		}
    431 
    432 		$this->response->addHeader('Content-Type: application/json');
    433 		$this->response->setOutput(json_encode($json));
    434 	}
    435 
    436 	public function void() {
    437 		$this->load->language('extension/payment/cardconnect');
    438 
    439 		$json = array();
    440 
    441 		if ($this->config->get('cardconnect_status')) {
    442 			if (isset($this->request->post['order_id']) && isset($this->request->post['retref'])) {
    443 				$this->load->model('extension/payment/cardconnect');
    444 
    445 				$cardconnect_order = $this->model_extension_payment_cardconnect->getOrder($this->request->post['order_id']);
    446 
    447 				if ($cardconnect_order) {
    448 					$void_response = $this->model_extension_payment_cardconnect->void($cardconnect_order, $this->request->post['retref']);
    449 
    450 					if (!isset($void_response['authcode']) || $void_response['authcode'] != 'REVERS') {
    451 						$json['error'] = $void_response['resptext'];
    452 					} else {
    453 						$json['retref'] = $void_response['retref'];
    454 						$json['amount'] = $this->currency->format(0.00, $cardconnect_order['currency_code'], false, true);
    455 						$json['status'] = $void_response['resptext'];
    456 						$json['date_modified'] = date($this->language->get('datetime_format'));
    457 						$json['date_added'] = date($this->language->get('datetime_format'));
    458 						$json['success'] = $this->language->get('text_void_success');
    459 					}
    460 				} else {
    461 					$json['error'] = $this->language->get('error_no_order');
    462 				}
    463 			} else {
    464 				$json['error'] = $this->language->get('error_data_missing');
    465 			}
    466 		} else {
    467 			$json['error'] = $this->language->get('error_not_enabled');
    468 		}
    469 
    470 		$this->response->addHeader('Content-Type: application/json');
    471 		$this->response->setOutput(json_encode($json));
    472 	}
    473 
    474 	protected function validate() {
    475 		if (!$this->user->hasPermission('modify', 'extension/payment/cardconnect')) {
    476 			$this->error['warning'] = $this->language->get('error_permission');
    477 		}
    478 
    479 		if (!$this->request->post['payment_cardconnect_merchant_id']) {
    480 			$this->error['payment_cardconnect_merchant_id'] = $this->language->get('error_merchant_id');
    481 		}
    482 
    483 		if (!$this->request->post['cardconnect_api_username']) {
    484 			$this->error['cardconnect_api_username'] = $this->language->get('error_api_username');
    485 		}
    486 
    487 		if (!$this->request->post['cardconnect_api_password']) {
    488 			$this->error['cardconnect_api_password'] = $this->language->get('error_api_password');
    489 		}
    490 
    491 		if (!$this->request->post['cardconnect_token']) {
    492 			$this->error['cardconnect_token'] = $this->language->get('error_token');
    493 		}
    494 
    495 		if (!$this->request->post['cardconnect_site']) {
    496 			$this->error['cardconnect_site'] = $this->language->get('error_site');
    497 		}
    498 
    499 		return !$this->error;
    500 	}
    501 }