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 }