shop.balmet.com

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

eway.php (15696B)


      1 <?php
      2 class ControllerExtensionPaymentEway extends Controller {
      3 
      4 	private $error = array();
      5 
      6 	public function index() {
      7 		$this->load->language('extension/payment/eway');
      8 
      9 		$this->document->setTitle($this->language->get('heading_title'));
     10 
     11 		$this->load->model('setting/setting');
     12 
     13 		if (($this->request->server['REQUEST_METHOD'] == 'POST') && ($this->validate())) {
     14 			$this->model_setting_setting->editSetting('payment_eway', $this->request->post);
     15 
     16 			$this->session->data['success'] = $this->language->get('text_success');
     17 
     18 			$this->response->redirect($this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'], true));
     19 		}
     20 
     21 		$this->load->model('localisation/geo_zone');
     22 
     23 		$data['geo_zones'] = $this->model_localisation_geo_zone->getGeoZones();
     24 
     25 		$this->load->model('localisation/order_status');
     26 
     27 		$data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses();
     28 
     29 		if (isset($this->error['warning'])) {
     30 			$data['error_warning'] = $this->error['warning'];
     31 		} else {
     32 			$data['error_warning'] = '';
     33 		}
     34 
     35 		if (isset($this->error['username'])) {
     36 			$data['error_username'] = $this->error['username'];
     37 		} else {
     38 			$data['error_username'] = '';
     39 		}
     40 
     41 		if (isset($this->error['password'])) {
     42 			$data['error_password'] = $this->error['password'];
     43 		} else {
     44 			$data['error_password'] = '';
     45 		}
     46 
     47 		if (isset($this->error['payment_type'])) {
     48 			$data['error_payment_type'] = $this->error['payment_type'];
     49 		} else {
     50 			$data['error_payment_type'] = '';
     51 		}
     52 
     53 		$data['breadcrumbs'] = array();
     54 
     55 		$data['breadcrumbs'][] = array(
     56 			'text' => $this->language->get('text_home'),
     57 			'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true)
     58 		);
     59 
     60 		$data['breadcrumbs'][] = array(
     61 			'text' => $this->language->get('text_extension'),
     62 			'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'], true)
     63 		);
     64 
     65 		$data['breadcrumbs'][] = array(
     66 			'text' => $this->language->get('heading_title'),
     67 			'href' => $this->url->link('extension/payment/eway', 'user_token=' . $this->session->data['user_token'], true)
     68 		);
     69 
     70 		$data['action'] = $this->url->link('extension/payment/eway', 'user_token=' . $this->session->data['user_token'], true);
     71 		$data['cancel'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'], true);
     72 
     73 		if (isset($this->request->post['payment_eway_payment_gateway'])) {
     74 			$data['payment_eway_payment_gateway'] = $this->request->post['payment_eway_payment_gateway'];
     75 		} else {
     76 			$data['payment_eway_payment_gateway'] = $this->config->get('payment_eway_payment_gateway');
     77 		}
     78 
     79 		if (isset($this->request->post['payment_eway_paymode'])) {
     80 			$data['payment_eway_paymode'] = $this->request->post['payment_eway_paymode'];
     81 		} else {
     82 			$data['payment_eway_paymode'] = $this->config->get('payment_eway_paymode');
     83 		}
     84 
     85 		if (isset($this->request->post['payment_eway_test'])) {
     86 			$data['payment_eway_test'] = $this->request->post['payment_eway_test'];
     87 		} else {
     88 			$data['payment_eway_test'] = $this->config->get('payment_eway_test');
     89 		}
     90 
     91 		if (isset($this->request->post['payment_eway_payment_type'])) {
     92 			$data['payment_eway_payment_type'] = $this->request->post['payment_eway_payment_type'];
     93 		} else {
     94 			$data['payment_eway_payment_type'] = $this->config->get('payment_eway_payment_type');
     95 		}
     96 
     97 		if (isset($this->request->post['payment_eway_transaction'])) {
     98 			$data['payment_eway_transaction'] = $this->request->post['payment_eway_transaction'];
     99 		} else {
    100 			$data['payment_eway_transaction'] = $this->config->get('payment_eway_transaction');
    101 		}
    102 
    103 		if (isset($this->request->post['payment_eway_standard_geo_zone_id'])) {
    104 			$data['payment_eway_standard_geo_zone_id'] = $this->request->post['payment_eway_standard_geo_zone_id'];
    105 		} else {
    106 			$data['payment_eway_standard_geo_zone_id'] = $this->config->get('payment_eway_standard_geo_zone_id');
    107 		}
    108 
    109 		if (isset($this->request->post['payment_eway_order_status_id'])) {
    110 			$data['payment_eway_order_status_id'] = $this->request->post['payment_eway_order_status_id'];
    111 		} else {
    112 			$data['payment_eway_order_status_id'] = $this->config->get('payment_eway_order_status_id');
    113 		}
    114 
    115 		if (isset($this->request->post['payment_eway_order_status_refunded_id'])) {
    116 			$data['payment_eway_order_status_refunded_id'] = $this->request->post['payment_eway_order_status_refunded_id'];
    117 		} else {
    118 			$data['payment_eway_order_status_refunded_id'] = $this->config->get('payment_eway_order_status_refunded_id');
    119 		}
    120 
    121 		if (isset($this->request->post['payment_eway_order_status_auth_id'])) {
    122 			$data['payment_eway_order_status_auth_id'] = $this->request->post['payment_eway_order_status_auth_id'];
    123 		} else {
    124 			$data['payment_eway_order_status_auth_id'] = $this->config->get('payment_eway_order_status_auth_id');
    125 		}
    126 
    127 		if (isset($this->request->post['payment_eway_order_status_fraud_id'])) {
    128 			$data['payment_eway_order_status_fraud_id'] = $this->request->post['payment_eway_order_status_fraud_id'];
    129 		} else {
    130 			$data['payment_eway_order_status_fraud_id'] = $this->config->get('payment_eway_order_status_fraud_id');
    131 		}
    132 
    133 		if (isset($this->request->post['payment_eway_transaction_method'])) {
    134 			$data['payment_eway_transaction_method'] = $this->request->post['payment_eway_transaction_method'];
    135 		} else {
    136 			$data['payment_eway_transaction_method'] = $this->config->get('payment_eway_transaction_method');
    137 		}
    138 
    139 		if (isset($this->request->post['payment_eway_username'])) {
    140 			$data['payment_eway_username'] = $this->request->post['payment_eway_username'];
    141 		} else {
    142 			$data['payment_eway_username'] = $this->config->get('payment_eway_username');
    143 		}
    144 
    145 		if (isset($this->request->post['payment_eway_password'])) {
    146 			$data['payment_eway_password'] = $this->request->post['payment_eway_password'];
    147 		} else {
    148 			$data['payment_eway_password'] = $this->config->get('payment_eway_password');
    149 		}
    150 
    151 		if (isset($this->request->post['payment_eway_status'])) {
    152 			$data['payment_eway_status'] = $this->request->post['payment_eway_status'];
    153 		} else {
    154 			$data['payment_eway_status'] = $this->config->get('payment_eway_status');
    155 		}
    156 
    157 		if (isset($this->request->post['payment_eway_sort_order'])) {
    158 			$data['payment_eway_sort_order'] = $this->request->post['payment_eway_sort_order'];
    159 		} else {
    160 			$data['payment_eway_sort_order'] = $this->config->get('payment_eway_sort_order');
    161 		}
    162 
    163 		$data['header'] = $this->load->controller('common/header');
    164 		$data['column_left'] = $this->load->controller('common/column_left');
    165 		$data['footer'] = $this->load->controller('common/footer');
    166 
    167 		$this->response->setOutput($this->load->view('extension/payment/eway', $data));
    168 	}
    169 
    170 	public function install() {
    171 		$this->load->model('extension/payment/eway');
    172 		$this->model_extension_payment_eway->install();
    173 	}
    174 
    175 	public function uninstall() {
    176 		$this->load->model('extension/payment/eway');
    177 		$this->model_extension_payment_eway->uninstall();
    178 	}
    179 
    180 	// Legacy 2.0.0
    181 	public function orderAction() {
    182 		return $this->order();
    183 	}
    184 
    185 	// Legacy 2.0.3
    186 	public function action() {
    187 		return $this->order();
    188 	}
    189 
    190 	public function order() {
    191 		if ($this->config->get('payment_eway_status')) {
    192 			$this->load->model('extension/payment/eway');
    193 
    194 			$eway_order = $this->model_extension_payment_eway->getOrder($this->request->get['order_id']);
    195 
    196 			if (!empty($eway_order)) {
    197 				$this->load->language('extension/payment/eway');
    198 
    199 				$eway_order['total'] = $eway_order['amount'];
    200 				$eway_order['total_formatted'] = $this->currency->format($eway_order['amount'], $eway_order['currency_code'], 1, true);
    201 
    202 				$eway_order['total_captured'] = $this->model_extension_payment_eway->getTotalCaptured($eway_order['eway_order_id']);
    203 				$eway_order['total_captured_formatted'] = $this->currency->format($eway_order['total_captured'], $eway_order['currency_code'], 1, true);
    204 
    205 				$eway_order['uncaptured'] = $eway_order['total'] - $eway_order['total_captured'];
    206 
    207 				$eway_order['total_refunded'] = $this->model_extension_payment_eway->getTotalRefunded($eway_order['eway_order_id']);
    208 				$eway_order['total_refunded_formatted'] = $this->currency->format($eway_order['total_refunded'], $eway_order['currency_code'], 1, true);
    209 
    210 				$eway_order['unrefunded'] = $eway_order['total_captured'] - $eway_order['total_refunded'];
    211 
    212 				$data['text_payment_info'] = $this->language->get('text_payment_info');
    213 				$data['text_order_total'] = $this->language->get('text_order_total');
    214 				$data['text_void_status'] = $this->language->get('text_void_status');
    215 				$data['text_transactions'] = $this->language->get('text_transactions');
    216 				$data['text_column_amount'] = $this->language->get('text_column_amount');
    217 				$data['text_column_type'] = $this->language->get('text_column_type');
    218 				$data['text_column_created'] = $this->language->get('text_column_created');
    219 				$data['text_column_transactionid'] = $this->language->get('text_column_transactionid');
    220 				$data['btn_refund'] = $this->language->get('btn_refund');
    221 				$data['btn_capture'] = $this->language->get('btn_capture');
    222 				$data['text_confirm_refund'] = $this->language->get('text_confirm_refund');
    223 				$data['text_confirm_capture'] = $this->language->get('text_confirm_capture');
    224 
    225 				$data['text_total_captured'] = $this->language->get('text_total_captured');
    226 				$data['text_total_refunded'] = $this->language->get('text_total_refunded');
    227 				$data['text_capture_status'] = $this->language->get('text_capture_status');
    228 				$data['text_refund_status'] = $this->language->get('text_refund_status');
    229 
    230 				$data['text_empty_refund'] = $this->language->get('text_empty_refund');
    231 				$data['text_empty_capture'] = $this->language->get('text_empty_capture');
    232 
    233 				$data['eway_order'] = $eway_order;
    234 				$data['user_token'] = $this->request->get['user_token'];
    235 				$data['order_id'] = $this->request->get['order_id'];
    236 
    237 				return $this->load->view('extension/payment/eway_order', $data);
    238 			}
    239 		}
    240 	}
    241 
    242 	public function refund() {
    243 		$this->load->language('extension/payment/eway');
    244 
    245 		$order_id = $this->request->post['order_id'];
    246 		$refund_amount = (double)$this->request->post['refund_amount'];
    247 
    248 		if ($order_id && $refund_amount > 0) {
    249 			$this->load->model('extension/payment/eway');
    250 			$result = $this->model_extension_payment_eway->refund($order_id, $refund_amount);
    251 
    252 			// Check if any error returns
    253 			if (isset($result->Errors) || $result === false) {
    254 				$json['error'] = true;
    255 				$reason = '';
    256 				if ($result === false) {
    257 					$reason = $this->language->get('text_unknown_failure');
    258 				} else {
    259 					$errors = explode(',', $result->Errors);
    260 					foreach ($errors as $error) {
    261 						$reason .= $this->language->get('text_card_message_' . $result->Errors);
    262 					}
    263 				}
    264 				$json['message'] = $this->language->get('text_refund_failed') . $reason;
    265 			} else {
    266 				$eway_order = $this->model_extension_payment_eway->getOrder($order_id);
    267 				$this->model_extension_payment_eway->addTransaction($eway_order['eway_order_id'], $result->Refund->TransactionID, 'refund', $result->Refund->TotalAmount / 100, $eway_order['currency_code']);
    268 
    269 				$total_captured = $this->model_extension_payment_eway->getTotalCaptured($eway_order['eway_order_id']);
    270 				$total_refunded = $this->model_extension_payment_eway->getTotalRefunded($eway_order['eway_order_id']);
    271 				$refund_status = 0;
    272 
    273 				if ($total_captured == $total_refunded) {
    274 					$refund_status = 1;
    275 					$this->model_extension_payment_eway->updateRefundStatus($eway_order['eway_order_id'], $refund_status);
    276 				}
    277 
    278 				$json['data'] = array();
    279 				$json['data']['transactionid'] = $result->TransactionID;
    280 				$json['data']['created'] = date("Y-m-d H:i:s");
    281 				$json['data']['amount'] = number_format($refund_amount, 2, '.', '');
    282 				$json['data']['total_refunded_formatted'] = $this->currency->format($total_refunded, $eway_order['currency_code'], 1, true);
    283 				$json['data']['refund_status'] = $refund_status;
    284 				$json['data']['remaining'] = $total_captured - $total_refunded;
    285 				$json['message'] = $this->language->get('text_refund_success');
    286 				$json['error'] = false;
    287 			}
    288 		} else {
    289 			$json['error'] = true;
    290 			$json['message'] = 'Missing data';
    291 		}
    292 
    293 		$this->response->addHeader('Content-Type: application/json');
    294 		$this->response->setOutput(json_encode($json));
    295 	}
    296 
    297 	public function capture() {
    298 		$this->load->language('extension/payment/eway');
    299 
    300 		$order_id = $this->request->post['order_id'];
    301 		$capture_amount = (double)$this->request->post['capture_amount'];
    302 
    303 		if ($order_id && $capture_amount > 0) {
    304 			$this->load->model('extension/payment/eway');
    305 			$eway_order = $this->model_extension_payment_eway->getOrder($order_id);
    306 			$result = $this->model_extension_payment_eway->capture($order_id, $capture_amount, $eway_order['currency_code']);
    307 
    308 			// Check if any error returns
    309 			if (isset($result->Errors) || $result === false) {
    310 				$json['error'] = true;
    311 				$reason = '';
    312 				if ($result === false) {
    313 					$reason = $this->language->get('text_unknown_failure');
    314 				} else {
    315 					$errors = explode(',', $result->Errors);
    316 					foreach ($errors as $error) {
    317 						$reason .= $this->language->get('text_card_message_' . $result->Errors);
    318 					}
    319 				}
    320 				$json['message'] = $this->language->get('text_capture_failed') . $reason;
    321 			} else {
    322 				$this->model_extension_payment_eway->addTransaction($eway_order['eway_order_id'], $result->TransactionID, 'payment', $capture_amount, $eway_order['currency_code']);
    323 
    324 				$total_captured = $this->model_extension_payment_eway->getTotalCaptured($eway_order['eway_order_id']);
    325 				$total_refunded = $this->model_extension_payment_eway->getTotalRefunded($eway_order['eway_order_id']);
    326 
    327 				$remaining = $eway_order['amount'] - $capture_amount;
    328 				if ($remaining <= 0) {
    329 					$remaining = 0;
    330 				}
    331 
    332 				$this->model_extension_payment_eway->updateCaptureStatus($eway_order['eway_order_id'], 1);
    333 				$this->model_extension_payment_eway->updateTransactionId($eway_order['eway_order_id'], $result->TransactionID);
    334 
    335 				$json['data'] = array();
    336 				$json['data']['transactionid'] = $result->TransactionID;
    337 				$json['data']['created'] = date("Y-m-d H:i:s");
    338 				$json['data']['amount'] = number_format($capture_amount, 2, '.', '');
    339 				$json['data']['total_captured_formatted'] = $this->currency->format($total_captured, $eway_order['currency_code'], 1, true);
    340 				$json['data']['capture_status'] = 1;
    341 				$json['data']['remaining'] = $remaining;
    342 				$json['message'] = $this->language->get('text_capture_success');
    343 				$json['error'] = false;
    344 			}
    345 		} else {
    346 			$json['error'] = true;
    347 			$json['message'] = 'Missing data';
    348 		}
    349 
    350 		$this->response->addHeader('Content-Type: application/json');
    351 		$this->response->setOutput(json_encode($json));
    352 	}
    353 
    354 	private function validate() {
    355 		if (!$this->user->hasPermission('modify', 'extension/payment/eway')) {
    356 			$this->error['warning'] = $this->language->get('error_permission');
    357 		}
    358 		if (!$this->request->post['payment_eway_username']) {
    359 			$this->error['username'] = $this->language->get('error_username');
    360 		}
    361 		if (!$this->request->post['payment_eway_password']) {
    362 			$this->error['password'] = $this->language->get('error_password');
    363 		}
    364 		if (!isset($this->request->post['payment_eway_payment_type'])) {
    365 			$this->error['payment_type'] = $this->language->get('error_payment_type');
    366 		}
    367 
    368 		return !$this->error;
    369 	}
    370 
    371 }