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