1<?php 2class ControllerExtensionPaymentSecureTradingPp extends Controller { 3 private $error = array(); 4 5 public function index() { 6 $this->load->model('setting/setting'); 7 $this->load->model('localisation/geo_zone'); 8 $this->load->model('localisation/order_status'); 9 $this->load->language('extension/payment/securetrading_pp'); 10 11 if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { 12 $this->request->post['payment_securetrading_pp_site_reference'] = trim($this->request->post['payment_securetrading_pp_site_reference']); 13 14 $this->model_setting_setting->editSetting('payment_securetrading_pp', $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'] . '&type=payment', true)); 19 } 20 21 if (isset($this->request->post['payment_securetrading_pp_site_reference'])) { 22 $data['payment_securetrading_pp_site_reference'] = $this->request->post['payment_securetrading_pp_site_reference']; 23 } else { 24 $data['payment_securetrading_pp_site_reference'] = $this->config->get('payment_securetrading_pp_site_reference'); 25 } 26 27 if (isset($this->request->post['payment_securetrading_pp_version'])) { 28 $data['payment_securetrading_pp_version'] = $this->request->post['payment_securetrading_pp_version']; 29 } else { 30 $data['payment_securetrading_pp_version'] = $this->config->get('payment_securetrading_pp_version'); 31 } 32 33 if (isset($this->request->post['payment_securetrading_pp_username'])) { 34 $data['payment_securetrading_pp_username'] = $this->request->post['payment_securetrading_pp_username']; 35 } else { 36 $data['payment_securetrading_pp_username'] = $this->config->get('payment_securetrading_pp_username'); 37 } 38 39 if (isset($this->request->post['payment_securetrading_pp_password'])) { 40 $data['payment_securetrading_pp_password'] = $this->request->post['payment_securetrading_pp_password']; 41 } else { 42 $data['payment_securetrading_pp_password'] = $this->config->get('payment_securetrading_pp_password'); 43 } 44 45 if (isset($this->request->post['payment_securetrading_pp_notification_password'])) { 46 $data['payment_securetrading_pp_notification_password'] = $this->request->post['payment_securetrading_pp_notification_password']; 47 } else { 48 $data['payment_securetrading_pp_notification_password'] = $this->config->get('payment_securetrading_pp_notification_password'); 49 } 50 51 if (isset($this->request->post['payment_securetrading_pp_site_security_password'])) { 52 $data['payment_securetrading_pp_site_security_password'] = $this->request->post['payment_securetrading_pp_site_security_password']; 53 } else { 54 $data['payment_securetrading_pp_site_security_password'] = $this->config->get('payment_securetrading_pp_site_security_password'); 55 } 56 57 if (isset($this->request->post['payment_securetrading_pp_site_security_status'])) { 58 $data['payment_securetrading_pp_site_security_status'] = $this->request->post['payment_securetrading_pp_site_security_status']; 59 } else { 60 $data['payment_securetrading_pp_site_security_status'] = $this->config->get('payment_securetrading_pp_site_security_status'); 61 } 62 63 if (isset($this->request->post['payment_securetrading_pp_webservice_username'])) { 64 $data['payment_securetrading_pp_webservice_username'] = $this->request->post['payment_securetrading_pp_webservice_username']; 65 } else { 66 $data['payment_securetrading_pp_webservice_username'] = $this->config->get('payment_securetrading_pp_webservice_username'); 67 } 68 69 if (isset($this->request->post['payment_securetrading_pp_webservice_password'])) { 70 $data['payment_securetrading_pp_webservice_password'] = $this->request->post['payment_securetrading_pp_webservice_password']; 71 } else { 72 $data['payment_securetrading_pp_webservice_password'] = $this->config->get('payment_securetrading_pp_webservice_password'); 73 } 74 75 if (isset($this->request->post['payment_securetrading_pp_order_status_id'])) { 76 $data['payment_securetrading_pp_order_status_id'] = $this->request->post['payment_securetrading_pp_order_status_id']; 77 } elseif($this->config->get('payment_securetrading_pp_order_status_id') != '') { 78 $data['payment_securetrading_pp_order_status_id'] = $this->config->get('payment_securetrading_pp_order_status_id'); 79 } else { 80 $data['payment_securetrading_pp_order_status_id'] = 1; 81 } 82 83 if (isset($this->request->post['payment_securetrading_pp_declined_order_status_id'])) { 84 $data['payment_securetrading_pp_declined_order_status_id'] = $this->request->post['payment_securetrading_pp_declined_order_status_id']; 85 } elseif($this->config->get('payment_securetrading_pp_declined_order_status_id') != '') { 86 $data['payment_securetrading_pp_declined_order_status_id'] = $this->config->get('payment_securetrading_pp_declined_order_status_id'); 87 } else { 88 $data['payment_securetrading_pp_declined_order_status_id'] = 8; 89 } 90 91 if (isset($this->request->post['payment_securetrading_pp_refunded_order_status_id'])) { 92 $data['payment_securetrading_pp_refunded_order_status_id'] = $this->request->post['payment_securetrading_pp_refunded_order_status_id']; 93 } elseif($this->config->get('payment_securetrading_pp_refunded_order_status_id') != '') { 94 $data['payment_securetrading_pp_refunded_order_status_id'] = $this->config->get('payment_securetrading_pp_refunded_order_status_id'); 95 } else { 96 $data['payment_securetrading_pp_refunded_order_status_id'] = 11; 97 } 98 99 if (isset($this->request->post['payment_securetrading_pp_authorisation_reversed_order_status_id'])) { 100 $data['payment_securetrading_pp_authorisation_reversed_order_status_id'] = $this->request->post['payment_securetrading_pp_authorisation_reversed_order_status_id']; 101 } elseif($this->config->get('payment_securetrading_pp_authorisation_reversed_order_status_id') != '') { 102 $data['payment_securetrading_pp_authorisation_reversed_order_status_id'] = $this->config->get('payment_securetrading_pp_authorisation_reversed_order_status_id'); 103 } else { 104 $data['payment_securetrading_pp_authorisation_reversed_order_status_id'] = 12; 105 } 106 107 if (isset($this->request->post['payment_securetrading_pp_settle_status'])) { 108 $data['payment_securetrading_pp_settle_status'] = $this->request->post['payment_securetrading_pp_settle_status']; 109 } else { 110 $data['payment_securetrading_pp_settle_status'] = $this->config->get('payment_securetrading_pp_settle_status'); 111 } 112 113 if (isset($this->request->post['payment_securetrading_pp_settle_due_date'])) { 114 $data['payment_securetrading_pp_settle_due_date'] = $this->request->post['payment_securetrading_pp_settle_due_date']; 115 } else { 116 $data['payment_securetrading_pp_settle_due_date'] = $this->config->get('payment_securetrading_pp_settle_due_date'); 117 } 118 119 if (isset($this->request->post['payment_securetrading_pp_geo_zone_id'])) { 120 $data['payment_securetrading_pp_geo_zone_id'] = $this->request->post['payment_securetrading_pp_geo_zone_id']; 121 } else { 122 $data['payment_securetrading_pp_geo_zone_id'] = $this->config->get('payment_securetrading_pp_geo_zone_id'); 123 } 124 125 if (isset($this->request->post['payment_securetrading_pp_status'])) { 126 $data['payment_securetrading_pp_status'] = $this->request->post['payment_securetrading_pp_status']; 127 } else { 128 $data['payment_securetrading_pp_status'] = $this->config->get('payment_securetrading_pp_status'); 129 } 130 131 if (isset($this->request->post['payment_securetrading_pp_sort_order'])) { 132 $data['payment_securetrading_pp_sort_order'] = $this->request->post['payment_securetrading_pp_sort_order']; 133 } else { 134 $data['payment_securetrading_pp_sort_order'] = $this->config->get('payment_securetrading_pp_sort_order'); 135 } 136 137 if (isset($this->request->post['payment_securetrading_pp_total'])) { 138 $data['payment_securetrading_pp_total'] = $this->request->post['payment_securetrading_pp_total']; 139 } else { 140 $data['payment_securetrading_pp_total'] = $this->config->get('payment_securetrading_pp_total'); 141 } 142 143 if (isset($this->request->post['payment_securetrading_pp_parent_css'])) { 144 $data['payment_securetrading_pp_parent_css'] = $this->request->post['payment_securetrading_pp_parent_css']; 145 } else { 146 $data['payment_securetrading_pp_parent_css'] = $this->config->get('payment_securetrading_pp_parent_css'); 147 } 148 149 if (isset($this->request->post['payment_securetrading_pp_child_css'])) { 150 $data['payment_securetrading_pp_child_css'] = $this->request->post['payment_securetrading_pp_child_css']; 151 } else { 152 $data['payment_securetrading_pp_child_css'] = $this->config->get('payment_securetrading_pp_child_css'); 153 } 154 155 if (isset($this->request->post['payment_securetrading_pp_cards_accepted'])) { 156 $data['payment_securetrading_pp_cards_accepted'] = $this->request->post['payment_securetrading_pp_cards_accepted']; 157 } else { 158 $data['payment_securetrading_pp_cards_accepted'] = $this->config->get('payment_securetrading_pp_cards_accepted'); 159 160 if ($data['payment_securetrading_pp_cards_accepted'] == null) { 161 $data['payment_securetrading_pp_cards_accepted'] = array(); 162 } 163 } 164 165 $this->document->setTitle($this->language->get('heading_title')); 166 167 if (isset($this->error['warning'])) { 168 $data['error_warning'] = $this->error['warning']; 169 } else { 170 $data['error_warning'] = ''; 171 } 172 173 if (isset($this->error['site_reference'])) { 174 $data['error_site_reference'] = $this->error['site_reference']; 175 } else { 176 $data['error_site_reference'] = ''; 177 } 178 179 if (isset($this->error['version'])) { 180 $data['error_version'] = $this->error['version']; 181 } else { 182 $data['error_version'] = ''; 183 } 184 185 if (isset($this->error['cards_accepted'])) { 186 $data['error_cards_accepted'] = $this->error['cards_accepted']; 187 } else { 188 $data['error_cards_accepted'] = ''; 189 } 190 191 if (isset($this->error['notification_password'])) { 192 $data['error_notification_password'] = $this->error['notification_password']; 193 } else { 194 $data['error_notification_password'] = ''; 195 } 196 197 $data['breadcrumbs'] = array(); 198 199 $data['breadcrumbs'][] = array( 200 'text' => $this->language->get('text_home'), 201 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true) 202 ); 203 204 $data['breadcrumbs'][] = array( 205 'text' => $this->language->get('text_extension'), 206 'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true) 207 ); 208 209 $data['breadcrumbs'][] = array( 210 'text' => $this->language->get('heading_title'), 211 'href' => $this->url->link('extension/payment/securetrading_pp', 'user_token=' . $this->session->data['user_token'], true) 212 ); 213 214 $data['geo_zones'] = $this->model_localisation_geo_zone->getGeoZones(); 215 $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses(); 216 $data['cards'] = array( 217 'AMEX' => 'American Express', 218 'VISA' => 'Visa', 219 'DELTA' => 'Visa Debit', 220 'ELECTRON' => 'Visa Electron', 221 'PURCHASING' => 'Visa Purchasing', 222 'VPAY' => 'V Pay', 223 'MASTERCARD' => 'MasterCard', 224 'MASTERCARDDEBIT' => 'MasterCard Debit', 225 'MAESTRO' => 'Maestro', 226 'PAYPAL' => 'PayPal', 227 ); 228 229 $data['settlement_statuses'] = array( 230 '0' => $this->language->get('text_pending_settlement'), 231 '1' => $this->language->get('text_pending_settlement_manually_overriden'), 232 '2' => $this->language->get('text_pending_suspended'), 233 '100' => $this->language->get('text_pending_settled'), 234 ); 235 236 $data['action'] = $this->url->link('extension/payment/securetrading_pp', 'user_token=' . $this->session->data['user_token'], true); 237 238 $data['cancel'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true); 239 240 $data['header'] = $this->load->controller('common/header'); 241 $data['column_left'] = $this->load->controller('common/column_left'); 242 $data['footer'] = $this->load->controller('common/footer'); 243 244 $this->response->setOutput($this->load->view('extension/payment/securetrading_pp', $data)); 245 } 246 247 public function install() { 248 $this->load->model('extension/payment/securetrading_pp'); 249 $this->model_extension_payment_securetrading_pp->install(); 250 } 251 252 public function uninstall() { 253 $this->load->model('extension/payment/securetrading_pp'); 254 $this->model_extension_payment_securetrading_pp->uninstall(); 255 } 256 257 public function order() { 258 if ($this->config->get('payment_securetrading_pp_status')) { 259 $this->load->model('extension/payment/securetrading_pp'); 260 261 $securetrading_pp_order = $this->model_extension_payment_securetrading_pp->getOrder($this->request->get['order_id']); 262 263 if (!empty($securetrading_pp_order)) { 264 $this->load->language('extension/payment/securetrading_pp'); 265 266 $securetrading_pp_order['total_released'] = $this->model_extension_payment_securetrading_pp->getTotalReleased($securetrading_pp_order['securetrading_pp_order_id']); 267 268 $securetrading_pp_order['total_formatted'] = $this->currency->format($securetrading_pp_order['total'], $securetrading_pp_order['currency_code'], false, false); 269 $securetrading_pp_order['total_released_formatted'] = $this->currency->format($securetrading_pp_order['total_released'], $securetrading_pp_order['currency_code'], false, false); 270 271 $data['securetrading_pp_order'] = $securetrading_pp_order; 272 273 $data['auto_settle'] = $securetrading_pp_order['settle_type']; 274 275 $data['order_id'] = (int)$this->request->get['order_id']; 276 277 $data['user_token'] = $this->session->data['user_token']; 278 279 return $this->load->view('extension/payment/securetrading_pp_order', $data); 280 } 281 } 282 } 283 284 public function void() { 285 $this->load->language('extension/payment/securetrading_pp'); 286 $json = array(); 287 288 if (isset($this->request->post['order_id']) && $this->request->post['order_id'] != '') { 289 $this->load->model('extension/payment/securetrading_pp'); 290 291 $securetrading_pp_order = $this->model_extension_payment_securetrading_pp->getOrder($this->request->post['order_id']); 292 293 $void_response = $this->model_extension_payment_securetrading_pp->void($this->request->post['order_id']); 294 295 $this->model_extension_payment_securetrading_pp->logger('Void result:\r\n' . print_r($void_response, 1)); 296 297 if ($void_response !== false) { 298 $response_xml = simplexml_load_string($void_response); 299 300 if ($response_xml->response['type'] == 'ERROR' || (string)$response_xml->response->error->code != '0') { 301 $json['msg'] = (string)$response_xml->response->error->message; 302 $json['error'] = true; 303 } else { 304 305 $this->model_extension_payment_securetrading_pp->addTransaction($securetrading_pp_order['securetrading_pp_order_id'], 'reversed', 0.00); 306 $this->model_extension_payment_securetrading_pp->updateVoidStatus($securetrading_pp_order['securetrading_pp_order_id'], 1); 307 308 $this->data = array( 309 'order_status_id' => $this->config->get('payment_securetrading_pp_authorisation_reversed_order_status_id'), 310 'notify' => false, 311 'comment' => '', 312 ); 313 314 $this->load->model('sale/order'); 315 316 $this->model_sale_order->addOrderHistory($this->request->post['order_id'], $this->data); 317 318 $json['msg'] = $this->language->get('text_authorisation_reversed'); 319 $json['data']['created'] = date("Y-m-d H:i:s"); 320 $json['error'] = false; 321 } 322 } else { 323 $json['msg'] = $this->language->get('error_connection'); 324 $json['error'] = true; 325 } 326 } else { 327 $json['error'] = true; 328 $json['msg'] = 'Missing data'; 329 } 330 331 $this->response->setOutput(json_encode($json)); 332 } 333 334 public function release() { 335 $this->load->language('extension/payment/securetrading_pp'); 336 $json = array(); 337 338 $amount = number_format($this->request->post['amount'], 2); 339 340 if (isset($this->request->post['order_id']) && $this->request->post['order_id'] != '' && isset($amount) && $amount > 0) { 341 $this->load->model('extension/payment/securetrading_pp'); 342 343 $securetrading_pp_order = $this->model_extension_payment_securetrading_pp->getOrder($this->request->post['order_id']); 344 345 $release_response = $this->model_extension_payment_securetrading_pp->release($this->request->post['order_id'], $amount); 346 347 $this->model_extension_payment_securetrading_pp->logger('Release result:\r\n' . print_r($release_response, 1)); 348 349 if ($release_response !== false) { 350 $response_xml = simplexml_load_string($release_response); 351 352 if ($response_xml->response['type'] == 'ERROR' || (string)$response_xml->response->error->code != '0') { 353 $json['error'] = true; 354 $json['msg'] = (string)$response_xml->response->error->message; 355 } else { 356 $this->model_extension_payment_securetrading_pp->addTransaction($securetrading_pp_order['securetrading_pp_order_id'], 'payment', $amount); 357 358 $total_released = $this->model_extension_payment_securetrading_pp->getTotalReleased($securetrading_pp_order['securetrading_pp_order_id']); 359 360 if ($total_released >= $securetrading_pp_order['total'] || $securetrading_pp_order['settle_type'] == 100) { 361 $this->model_extension_payment_securetrading_pp->updateReleaseStatus($securetrading_pp_order['securetrading_pp_order_id'], 1); 362 $release_status = 1; 363 $json['msg'] = $this->language->get('text_release_ok_order'); 364 365 $this->load->model('sale/order'); 366 367 $history = array(); 368 $history['order_status_id'] = $this->config->get('securetrading_pp_order_status_success_settled_id'); 369 $history['comment'] = ''; 370 $history['notify'] = ''; 371 372 $this->model_sale_order->addOrderHistory($this->request->post['order_id'], $history); 373 } else { 374 $release_status = 0; 375 $json['msg'] = $this->language->get('text_release_ok'); 376 } 377 378 $json['data'] = array(); 379 $json['data']['created'] = date("Y-m-d H:i:s"); 380 $json['data']['amount'] = $amount; 381 $json['data']['release_status'] = $release_status; 382 $json['data']['total'] = (double)$total_released; 383 $json['error'] = false; 384 } 385 } else { 386 $json['error'] = true; 387 $json['msg'] = $this->language->get('error_connection'); 388 } 389 } else { 390 $json['error'] = true; 391 $json['msg'] = $this->language->get('error_data_missing'); 392 } 393 394 $this->response->setOutput(json_encode($json)); 395 } 396 397 public function rebate() { 398 $this->load->language('extension/payment/securetrading_pp'); 399 $json = array(); 400 401 if (isset($this->request->post['order_id']) && !empty($this->request->post['order_id'])) { 402 $this->load->model('extension/payment/securetrading_pp'); 403 404 $securetrading_pp_order = $this->model_extension_payment_securetrading_pp->getOrder($this->request->post['order_id']); 405 406 $amount = number_format($this->request->post['amount'], 2); 407 408 $rebate_response = $this->model_extension_payment_securetrading_pp->rebate($this->request->post['order_id'], $amount); 409 410 $this->model_extension_payment_securetrading_pp->logger('Rebate result:\r\n' . print_r($rebate_response, 1)); 411 412 if ($rebate_response !== false) { 413 $response_xml = simplexml_load_string($rebate_response); 414 415 $error_code = (string)$response_xml->response->error->code; 416 417 if ($error_code == '0') { 418 419 $this->model_extension_payment_securetrading_pp->addTransaction($securetrading_pp_order['securetrading_pp_order_id'], 'rebate', $amount * -1); 420 421 $total_rebated = $this->model_extension_payment_securetrading_pp->getTotalRebated($securetrading_pp_order['securetrading_pp_order_id']); 422 $total_released = $this->model_extension_payment_securetrading_pp->getTotalReleased($securetrading_pp_order['securetrading_pp_order_id']); 423 424 if ($total_released <= 0 && $securetrading_pp_order['release_status'] == 1) { 425 $json['status'] = 1; 426 $json['message'] = $this->language->get('text_refund_issued'); 427 428 $this->model_extension_payment_securetrading_pp->updateRebateStatus($securetrading_pp_order['securetrading_pp_order_id'], 1); 429 $rebate_status = 1; 430 $json['msg'] = $this->language->get('text_rebate_ok_order'); 431 432 $this->load->model('sale/order'); 433 434 $history = array(); 435 $history['order_status_id'] = $this->config->get('payment_securetrading_pp_refunded_order_status_id'); 436 $history['comment'] = ''; 437 $history['notify'] = ''; 438 439 $this->model_sale_order->addOrderHistory($this->request->post['order_id'], $history); 440 } else { 441 $rebate_status = 0; 442 $json['msg'] = $this->language->get('text_rebate_ok'); 443 } 444 445 $json['data'] = array(); 446 $json['data']['created'] = date("Y-m-d H:i:s"); 447 $json['data']['amount'] = $amount * -1; 448 $json['data']['total_released'] = (double)$total_released; 449 $json['data']['total_rebated'] = (double)$total_rebated; 450 $json['data']['rebate_status'] = $rebate_status; 451 $json['error'] = false; 452 } else { 453 $json['error'] = true; 454 $json['msg'] = (string)$response_xml->response->error->message; 455 } 456 } else { 457 $json['status'] = 0; 458 $json['message'] = $this->language->get('error_connection'); 459 } 460 } else { 461 $json['error'] = true; 462 $json['msg'] = 'Missing data'; 463 } 464 465 $this->response->setOutput(json_encode($json)); 466 } 467 468 protected function validate() { 469 if (!$this->user->hasPermission('modify', 'extension/payment/securetrading_pp')) { 470 $this->error['warning'] = $this->language->get('error_permission'); 471 } 472 473 if (!$this->request->post['payment_securetrading_pp_site_reference']) { 474 $this->error['site_reference'] = $this->language->get('error_site_reference'); 475 } 476 477 if (!$this->request->post['payment_securetrading_pp_version']) { 478 $this->error['version'] = $this->language->get('error_version'); 479 } 480 481 if (empty($this->request->post['payment_securetrading_pp_cards_accepted'])) { 482 $this->error['cards_accepted'] = $this->language->get('error_cards_accepted'); 483 } 484 485 if (!$this->request->post['payment_securetrading_pp_notification_password']) { 486 $this->error['notification_password'] = $this->language->get('error_notification_password'); 487 } 488 489 return !$this->error; 490 } 491}