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