realex.php (17393B)
1 <?php 2 class ControllerExtensionPaymentRealex extends Controller { 3 private $error = array(); 4 5 public function index() { 6 $this->load->language('extension/payment/realex'); 7 8 $this->document->setTitle($this->language->get('heading_title')); 9 10 $this->load->model('setting/setting'); 11 12 if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { 13 $this->model_setting_setting->editSetting('payment_realex', $this->request->post); 14 15 $this->session->data['success'] = $this->language->get('text_success'); 16 17 $this->response->redirect($this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true)); 18 } 19 20 $data['notify_url'] = HTTPS_CATALOG . 'index.php?route=extension/payment/realex/notify'; 21 22 if (isset($this->error['warning'])) { 23 $data['error_warning'] = $this->error['warning']; 24 } else { 25 $data['error_warning'] = ''; 26 } 27 28 if (isset($this->error['error_merchant_id'])) { 29 $data['error_merchant_id'] = $this->error['error_merchant_id']; 30 } else { 31 $data['error_merchant_id'] = ''; 32 } 33 34 if (isset($this->error['error_secret'])) { 35 $data['error_secret'] = $this->error['error_secret']; 36 } else { 37 $data['error_secret'] = ''; 38 } 39 40 if (isset($this->error['error_live_url'])) { 41 $data['error_live_url'] = $this->error['error_live_url']; 42 } else { 43 $data['error_live_url'] = ''; 44 } 45 46 if (isset($this->error['error_demo_url'])) { 47 $data['error_demo_url'] = $this->error['error_demo_url']; 48 } else { 49 $data['error_demo_url'] = ''; 50 } 51 52 $data['breadcrumbs'] = array(); 53 54 $data['breadcrumbs'][] = array( 55 'text' => $this->language->get('text_home'), 56 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true) 57 ); 58 59 $data['breadcrumbs'][] = array( 60 'text' => $this->language->get('text_extension'), 61 'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true) 62 ); 63 64 $data['breadcrumbs'][] = array( 65 'text' => $this->language->get('heading_title'), 66 'href' => $this->url->link('extension/payment/realex', 'user_token=' . $this->session->data['user_token'], true) 67 ); 68 69 $data['action'] = $this->url->link('extension/payment/realex', 'user_token=' . $this->session->data['user_token'], true); 70 71 $data['cancel'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true); 72 73 if (isset($this->request->post['payment_realex_merchant_id'])) { 74 $data['payment_realex_merchant_id'] = $this->request->post['payment_realex_merchant_id']; 75 } else { 76 $data['payment_realex_merchant_id'] = $this->config->get('payment_realex_merchant_id'); 77 } 78 79 if (isset($this->request->post['payment_realex_secret'])) { 80 $data['payment_realex_secret'] = $this->request->post['payment_realex_secret']; 81 } else { 82 $data['payment_realex_secret'] = $this->config->get('payment_realex_secret'); 83 } 84 85 if (isset($this->request->post['payment_realex_rebate_password'])) { 86 $data['payment_realex_rebate_password'] = $this->request->post['payment_realex_rebate_password']; 87 } else { 88 $data['payment_realex_rebate_password'] = $this->config->get('payment_realex_rebate_password'); 89 } 90 91 if (isset($this->request->post['payment_realex_live_demo'])) { 92 $data['payment_realex_live_demo'] = $this->request->post['payment_realex_live_demo']; 93 } else { 94 $data['payment_realex_live_demo'] = $this->config->get('payment_realex_live_demo'); 95 } 96 97 if (isset($this->request->post['payment_realex_geo_zone_id'])) { 98 $data['payment_realex_geo_zone_id'] = $this->request->post['payment_realex_geo_zone_id']; 99 } else { 100 $data['payment_realex_geo_zone_id'] = $this->config->get('payment_realex_geo_zone_id'); 101 } 102 103 $this->load->model('localisation/geo_zone'); 104 105 $data['geo_zones'] = $this->model_localisation_geo_zone->getGeoZones(); 106 107 if (isset($this->request->post['payment_realex_total'])) { 108 $data['payment_realex_total'] = $this->request->post['payment_realex_total']; 109 } else { 110 $data['payment_realex_total'] = $this->config->get('payment_realex_total'); 111 } 112 113 if (isset($this->request->post['payment_realex_sort_order'])) { 114 $data['payment_realex_sort_order'] = $this->request->post['payment_realex_sort_order']; 115 } else { 116 $data['payment_realex_sort_order'] = $this->config->get('payment_realex_sort_order'); 117 } 118 119 if (isset($this->request->post['payment_realex_status'])) { 120 $data['payment_realex_status'] = $this->request->post['payment_realex_status']; 121 } else { 122 $data['payment_realex_status'] = $this->config->get('payment_realex_status'); 123 } 124 125 if (isset($this->request->post['payment_realex_debug'])) { 126 $data['payment_realex_debug'] = $this->request->post['payment_realex_debug']; 127 } else { 128 $data['payment_realex_debug'] = $this->config->get('payment_realex_debug'); 129 } 130 131 if (isset($this->request->post['payment_realex_account'])) { 132 $data['payment_realex_account'] = $this->request->post['payment_realex_account']; 133 } else { 134 $data['payment_realex_account'] = $this->config->get('payment_realex_account'); 135 } 136 137 if (isset($this->request->post['payment_realex_auto_settle'])) { 138 $data['payment_realex_auto_settle'] = $this->request->post['payment_realex_auto_settle']; 139 } else { 140 $data['payment_realex_auto_settle'] = $this->config->get('payment_realex_auto_settle'); 141 } 142 143 if (isset($this->request->post['payment_realex_card_select'])) { 144 $data['payment_realex_card_select'] = $this->request->post['payment_realex_card_select']; 145 } else { 146 $data['payment_realex_card_select'] = $this->config->get('payment_realex_card_select'); 147 } 148 149 if (isset($this->request->post['payment_realex_tss_check'])) { 150 $data['payment_realex_tss_check'] = $this->request->post['payment_realex_tss_check']; 151 } else { 152 $data['payment_realex_tss_check'] = $this->config->get('payment_realex_tss_check'); 153 } 154 155 if (isset($this->request->post['payment_realex_order_status_success_settled_id'])) { 156 $data['payment_realex_order_status_success_settled_id'] = $this->request->post['payment_realex_order_status_success_settled_id']; 157 } else { 158 $data['payment_realex_order_status_success_settled_id'] = $this->config->get('payment_realex_order_status_success_settled_id'); 159 } 160 161 if (isset($this->request->post['payment_realex_order_status_success_unsettled_id'])) { 162 $data['payment_realex_order_status_success_unsettled_id'] = $this->request->post['payment_realex_order_status_success_unsettled_id']; 163 } else { 164 $data['payment_realex_order_status_success_unsettled_id'] = $this->config->get('payment_realex_order_status_success_unsettled_id'); 165 } 166 167 if (isset($this->request->post['payment_realex_order_status_decline_id'])) { 168 $data['payment_realex_order_status_decline_id'] = $this->request->post['payment_realex_order_status_decline_id']; 169 } else { 170 $data['payment_realex_order_status_decline_id'] = $this->config->get('payment_realex_order_status_decline_id'); 171 } 172 173 if (isset($this->request->post['payment_realex_order_status_decline_pending_id'])) { 174 $data['payment_realex_order_status_decline_pending_id'] = $this->request->post['payment_realex_order_status_decline_pending_id']; 175 } else { 176 $data['payment_realex_order_status_decline_pending_id'] = $this->config->get('payment_realex_order_status_decline_pending_id'); 177 } 178 179 if (isset($this->request->post['payment_realex_order_status_decline_stolen_id'])) { 180 $data['payment_realex_order_status_decline_stolen_id'] = $this->request->post['payment_realex_order_status_decline_stolen_id']; 181 } else { 182 $data['payment_realex_order_status_decline_stolen_id'] = $this->config->get('payment_realex_order_status_decline_stolen_id'); 183 } 184 185 if (isset($this->request->post['payment_realex_order_status_decline_bank_id'])) { 186 $data['payment_realex_order_status_decline_bank_id'] = $this->request->post['payment_realex_order_status_decline_bank_id']; 187 } else { 188 $data['payment_realex_order_status_decline_bank_id'] = $this->config->get('payment_realex_order_status_decline_bank_id'); 189 } 190 191 $this->load->model('localisation/order_status'); 192 193 $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses(); 194 195 if (isset($this->request->post['payment_realex_live_url'])) { 196 $data['payment_realex_live_url'] = $this->request->post['payment_realex_live_url']; 197 } else { 198 $data['payment_realex_live_url'] = $this->config->get('payment_realex_live_url'); 199 } 200 201 if (empty($data['payment_realex_live_url'])) { 202 $data['payment_realex_live_url'] = 'https://hpp.realexpayments.com/pay'; 203 } 204 205 if (isset($this->request->post['payment_realex_demo_url'])) { 206 $data['payment_realex_demo_url'] = $this->request->post['payment_realex_demo_url']; 207 } else { 208 $data['payment_realex_demo_url'] = $this->config->get('payment_realex_demo_url'); 209 } 210 211 if (empty($data['payment_realex_demo_url'])) { 212 $data['payment_realex_demo_url'] = 'https://hpp.sandbox.realexpayments.com/pay'; 213 } 214 215 $data['header'] = $this->load->controller('common/header'); 216 $data['column_left'] = $this->load->controller('common/column_left'); 217 $data['footer'] = $this->load->controller('common/footer'); 218 219 $this->response->setOutput($this->load->view('extension/payment/realex', $data)); 220 } 221 222 public function install() { 223 $this->load->model('extension/payment/realex'); 224 225 $this->model_extension_payment_realex->install(); 226 } 227 228 public function order() { 229 if ($this->config->get('payment_realex_status')) { 230 $this->load->model('extension/payment/realex'); 231 232 $realex_order = $this->model_extension_payment_realex->getOrder($this->request->get['order_id']); 233 234 if (!empty($realex_order)) { 235 $this->load->language('extension/payment/realex'); 236 237 $realex_order['total_captured'] = $this->model_extension_payment_realex->getTotalCaptured($realex_order['realex_order_id']); 238 239 $realex_order['total_formatted'] = $this->currency->format($realex_order['total'], $realex_order['currency_code'], 1, true); 240 $realex_order['total_captured_formatted'] = $this->currency->format($realex_order['total_captured'], $realex_order['currency_code'], 1, true); 241 242 $data['realex_order'] = $realex_order; 243 244 $data['auto_settle'] = $realex_order['settle_type']; 245 246 $data['order_id'] = $this->request->get['order_id']; 247 248 $data['user_token'] = $this->request->get['user_token']; 249 250 return $this->load->view('extension/payment/realex_order', $data); 251 } 252 } 253 } 254 255 public function void() { 256 $this->load->language('extension/payment/realex'); 257 $json = array(); 258 259 if (isset($this->request->post['order_id']) && $this->request->post['order_id'] != '') { 260 $this->load->model('extension/payment/realex'); 261 262 $realex_order = $this->model_extension_payment_realex->getOrder($this->request->post['order_id']); 263 264 $void_response = $this->model_extension_payment_realex->void($this->request->post['order_id']); 265 266 $this->model_extension_payment_realex->logger('Void result:\r\n' . print_r($void_response, 1)); 267 268 if (isset($void_response->result) && $void_response->result == '00') { 269 $this->model_extension_payment_realex->addTransaction($realex_order['realex_order_id'], 'void', 0.00); 270 $this->model_extension_payment_realex->updateVoidStatus($realex_order['realex_order_id'], 1); 271 272 $json['msg'] = $this->language->get('text_void_ok'); 273 $json['data'] = array(); 274 $json['data']['date_added'] = date("Y-m-d H:i:s"); 275 $json['error'] = false; 276 } else { 277 $json['error'] = true; 278 $json['msg'] = isset($void_response->message) && !empty($void_response->message) ? (string)$void_response->message : 'Unable to void'; 279 } 280 } else { 281 $json['error'] = true; 282 $json['msg'] = 'Missing data'; 283 } 284 285 $this->response->addHeader('Content-Type: application/json'); 286 $this->response->setOutput(json_encode($json)); 287 } 288 289 public function capture() { 290 $this->load->language('extension/payment/realex'); 291 $json = array(); 292 293 if (isset($this->request->post['order_id']) && $this->request->post['order_id'] != '' && isset($this->request->post['amount']) && $this->request->post['amount'] > 0) { 294 $this->load->model('extension/payment/realex'); 295 296 $realex_order = $this->model_extension_payment_realex->getOrder($this->request->post['order_id']); 297 298 $capture_response = $this->model_extension_payment_realex->capture($this->request->post['order_id'], $this->request->post['amount']); 299 300 $this->model_extension_payment_realex->logger('Settle result:\r\n' . print_r($capture_response, 1)); 301 302 if (isset($capture_response->result) && $capture_response->result == '00') { 303 $this->model_extension_payment_realex->addTransaction($realex_order['realex_order_id'], 'payment', $this->request->post['amount']); 304 305 $total_captured = $this->model_extension_payment_realex->getTotalCaptured($realex_order['realex_order_id']); 306 307 if ($total_captured >= $realex_order['total'] || $realex_order['settle_type'] == 0) { 308 $this->model_extension_payment_realex->updateCaptureStatus($realex_order['realex_order_id'], 1); 309 $capture_status = 1; 310 $json['msg'] = $this->language->get('text_capture_ok_order'); 311 } else { 312 $capture_status = 0; 313 $json['msg'] = $this->language->get('text_capture_ok'); 314 } 315 316 $this->model_extension_payment_realex->updateForRebate($realex_order['realex_order_id'], $capture_response->pasref, $capture_response->orderid); 317 318 $json['data'] = array(); 319 $json['data']['date_added'] = date("Y-m-d H:i:s"); 320 $json['data']['amount'] = $this->request->post['amount']; 321 $json['data']['capture_status'] = $capture_status; 322 $json['data']['total'] = (float)$total_captured; 323 $json['error'] = false; 324 } else { 325 $json['error'] = true; 326 $json['msg'] = isset($capture_response->message) && !empty($capture_response->message) ? (string)$capture_response->message : 'Unable to capture'; 327 } 328 } else { 329 $json['error'] = true; 330 $json['msg'] = $this->language->get('error_data_missing'); 331 } 332 333 $this->response->addHeader('Content-Type: application/json'); 334 $this->response->setOutput(json_encode($json)); 335 } 336 337 public function rebate() { 338 $this->load->language('extension/payment/realex'); 339 $json = array(); 340 341 if (isset($this->request->post['order_id']) && !empty($this->request->post['order_id'])) { 342 $this->load->model('extension/payment/realex'); 343 344 $realex_order = $this->model_extension_payment_realex->getOrder($this->request->post['order_id']); 345 346 $rebate_response = $this->model_extension_payment_realex->rebate($this->request->post['order_id'], $this->request->post['amount']); 347 348 $this->model_extension_payment_realex->logger('Rebate result:\r\n' . print_r($rebate_response, 1)); 349 350 if (isset($rebate_response->result) && $rebate_response->result == '00') { 351 $this->model_extension_payment_realex->addTransaction($realex_order['realex_order_id'], 'rebate', $this->request->post['amount']*-1); 352 353 $total_rebated = $this->model_extension_payment_realex->getTotalRebated($realex_order['realex_order_id']); 354 $total_captured = $this->model_extension_payment_realex->getTotalCaptured($realex_order['realex_order_id']); 355 356 if ($total_captured <= 0 && $realex_order['capture_status'] == 1) { 357 $this->model_extension_payment_realex->updateRebateStatus($realex_order['realex_order_id'], 1); 358 $rebate_status = 1; 359 $json['msg'] = $this->language->get('text_rebate_ok_order'); 360 } else { 361 $rebate_status = 0; 362 $json['msg'] = $this->language->get('text_rebate_ok'); 363 } 364 365 $json['data'] = array(); 366 $json['data']['date_added'] = date("Y-m-d H:i:s"); 367 $json['data']['amount'] = $this->request->post['amount']*-1; 368 $json['data']['total_captured'] = (float)$total_captured; 369 $json['data']['total_rebated'] = (float)$total_rebated; 370 $json['data']['rebate_status'] = $rebate_status; 371 $json['error'] = false; 372 } else { 373 $json['error'] = true; 374 $json['msg'] = isset($rebate_response->message) && !empty($rebate_response->message) ? (string)$rebate_response->message : 'Unable to rebate'; 375 } 376 } else { 377 $json['error'] = true; 378 $json['msg'] = 'Missing data'; 379 } 380 381 $this->response->addHeader('Content-Type: application/json'); 382 $this->response->setOutput(json_encode($json)); 383 } 384 385 protected function validate() { 386 if (!$this->user->hasPermission('modify', 'extension/payment/realex')) { 387 $this->error['warning'] = $this->language->get('error_permission'); 388 } 389 390 if (!$this->request->post['payment_realex_merchant_id']) { 391 $this->error['error_merchant_id'] = $this->language->get('error_merchant_id'); 392 } 393 394 if (!$this->request->post['payment_realex_secret']) { 395 $this->error['error_secret'] = $this->language->get('error_secret'); 396 } 397 398 if (!$this->request->post['payment_realex_live_url']) { 399 $this->error['error_live_url'] = $this->language->get('error_live_url'); 400 } 401 402 if (!$this->request->post['payment_realex_demo_url']) { 403 $this->error['error_demo_url'] = $this->language->get('error_demo_url'); 404 } 405 406 return !$this->error; 407 } 408 }