pp_payflow_iframe.php (19001B)
1 <?php 2 class ControllerExtensionPaymentPPPayflowIframe extends Controller { 3 private $error = array(); 4 5 public function index() { 6 $this->load->language('extension/payment/pp_payflow_iframe'); 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_pp_payflow_iframe', $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['vendor'])) { 27 $data['error_vendor'] = $this->error['vendor']; 28 } else { 29 $data['error_vendor'] = ''; 30 } 31 32 if (isset($this->error['user'])) { 33 $data['error_user'] = $this->error['user']; 34 } else { 35 $data['error_user'] = ''; 36 } 37 38 if (isset($this->error['password'])) { 39 $data['error_password'] = $this->error['password']; 40 } else { 41 $data['error_password'] = ''; 42 } 43 44 if (isset($this->error['partner'])) { 45 $data['error_partner'] = $this->error['partner']; 46 } else { 47 $data['error_partner'] = ''; 48 } 49 50 $data['breadcrumbs'] = array(); 51 52 $data['breadcrumbs'][] = array( 53 'text' => $this->language->get('text_home'), 54 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true), 55 ); 56 57 $data['breadcrumbs'][] = array( 58 'text' => $this->language->get('text_pp_express'), 59 'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true), 60 ); 61 62 $data['breadcrumbs'][] = array( 63 'text' => $this->language->get('heading_title'), 64 'href' => $this->url->link('extension/payment/pp_payflow_iframe', 'user_token=' . $this->session->data['user_token'], true), 65 ); 66 67 $data['action'] = $this->url->link('extension/payment/pp_payflow_iframe', 'user_token=' . $this->session->data['user_token'], true); 68 69 $data['cancel'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true); 70 71 if (isset($this->request->post['payment_pp_payflow_iframe_vendor'])) { 72 $data['payment_pp_payflow_iframe_vendor'] = $this->request->post['payment_pp_payflow_iframe_vendor']; 73 } else { 74 $data['payment_pp_payflow_iframe_vendor'] = $this->config->get('payment_pp_payflow_iframe_vendor'); 75 } 76 77 if (isset($this->request->post['payment_pp_payflow_iframe_user'])) { 78 $data['payment_pp_payflow_iframe_user'] = $this->request->post['payment_pp_payflow_iframe_user']; 79 } else { 80 $data['payment_pp_payflow_iframe_user'] = $this->config->get('payment_pp_payflow_iframe_user'); 81 } 82 83 if (isset($this->request->post['payment_pp_payflow_iframe_password'])) { 84 $data['payment_pp_payflow_iframe_password'] = $this->request->post['payment_pp_payflow_iframe_password']; 85 } else { 86 $data['payment_pp_payflow_iframe_password'] = $this->config->get('payment_pp_payflow_iframe_password'); 87 } 88 89 if (isset($this->request->post['payment_pp_payflow_iframe_partner'])) { 90 $data['payment_pp_payflow_iframe_partner'] = $this->request->post['payment_pp_payflow_iframe_partner']; 91 } else { 92 $data['payment_pp_payflow_iframe_partner'] = $this->config->get('payment_pp_payflow_iframe_partner'); 93 } 94 95 if (isset($this->request->post['payment_pp_payflow_iframe_transaction_method'])) { 96 $data['payment_pp_payflow_iframe_transaction_method'] = $this->request->post['payment_pp_payflow_iframe_transaction_method']; 97 } else { 98 $data['payment_pp_payflow_iframe_transaction_method'] = $this->config->get('payment_pp_payflow_iframe_transaction_method'); 99 } 100 101 if (isset($this->request->post['payment_pp_payflow_iframe_test'])) { 102 $data['payment_pp_payflow_iframe_test'] = $this->request->post['payment_pp_payflow_iframe_test']; 103 } else { 104 $data['payment_pp_payflow_iframe_test'] = $this->config->get('payment_pp_payflow_iframe_test'); 105 } 106 107 if (isset($this->request->post['payment_pp_payflow_iframe_total'])) { 108 $data['payment_pp_payflow_iframe_total'] = $this->request->post['payment_pp_payflow_iframe_total']; 109 } else { 110 $data['payment_pp_payflow_iframe_total'] = $this->config->get('payment_pp_payflow_iframe_total'); 111 } 112 113 $this->load->model('localisation/order_status'); 114 115 $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses(); 116 117 if (isset($this->request->post['payment_pp_payflow_iframe_order_status_id'])) { 118 $data['payment_pp_payflow_iframe_order_status_id'] = $this->request->post['payment_pp_payflow_iframe_order_status_id']; 119 } else { 120 $data['payment_pp_payflow_iframe_order_status_id'] = $this->config->get('payment_pp_payflow_iframe_order_status_id'); 121 } 122 123 if (isset($this->request->post['payment_pp_payflow_iframe_geo_zone_id'])) { 124 $data['payment_pp_payflow_iframe_geo_zone_id'] = $this->request->post['payment_pp_payflow_iframe_geo_zone_id']; 125 } else { 126 $data['payment_pp_payflow_iframe_geo_zone_id'] = $this->config->get('payment_pp_payflow_iframe_geo_zone_id'); 127 } 128 129 $this->load->model('localisation/geo_zone'); 130 131 $data['geo_zones'] = $this->model_localisation_geo_zone->getGeoZones(); 132 133 if (isset($this->request->post['payment_pp_payflow_iframe_status'])) { 134 $data['payment_pp_payflow_iframe_status'] = $this->request->post['payment_pp_payflow_iframe_status']; 135 } else { 136 $data['payment_pp_payflow_iframe_status'] = $this->config->get('payment_pp_payflow_iframe_status'); 137 } 138 139 if (isset($this->request->post['payment_pp_payflow_iframe_sort_order'])) { 140 $data['payment_pp_payflow_iframe_sort_order'] = $this->request->post['payment_pp_payflow_iframe_sort_order']; 141 } else { 142 $data['payment_pp_payflow_iframe_sort_order'] = $this->config->get('payment_pp_payflow_iframe_sort_order'); 143 } 144 145 if (isset($this->request->post['payment_pp_payflow_iframe_checkout_method'])) { 146 $data['payment_pp_payflow_iframe_checkout_method'] = $this->request->post['payment_pp_payflow_iframe_checkout_method']; 147 } else { 148 $data['payment_pp_payflow_iframe_checkout_method'] = $this->config->get('payment_pp_payflow_iframe_checkout_method'); 149 } 150 151 if (isset($this->request->post['payment_pp_payflow_iframe_debug'])) { 152 $data['payment_pp_payflow_iframe_debug'] = $this->request->post['payment_pp_payflow_iframe_debug']; 153 } else { 154 $data['payment_pp_payflow_iframe_debug'] = $this->config->get('payment_pp_payflow_iframe_debug'); 155 } 156 157 $data['post_url'] = HTTPS_CATALOG . 'index.php?route=extension/payment/pp_payflow_iframe/paymentipn'; 158 $data['cancel_url'] = HTTPS_CATALOG . 'index.php?route=extension/payment/pp_payflow_iframe/paymentcancel'; 159 $data['error_url'] = HTTPS_CATALOG . 'index.php?route=extension/payment/pp_payflow_iframe/paymenterror'; 160 $data['return_url'] = HTTPS_CATALOG . 'index.php?route=extension/payment/pp_payflow_iframe/paymentreturn'; 161 162 $data['header'] = $this->load->controller('common/header'); 163 $data['column_left'] = $this->load->controller('common/column_left'); 164 $data['footer'] = $this->load->controller('common/footer'); 165 166 $this->response->setOutput($this->load->view('extension/payment/pp_payflow_iframe', $data)); 167 } 168 169 public function install() { 170 $this->load->model('extension/payment/pp_payflow_iframe'); 171 172 $this->model_extension_payment_pp_payflow_iframe->install(); 173 } 174 175 public function uninstall() { 176 $this->load->model('extension/payment/pp_payflow_iframe'); 177 178 $this->model_extension_payment_pp_payflow_iframe->uninstall(); 179 } 180 181 public function refund() { 182 $this->load->model('extension/payment/pp_payflow_iframe'); 183 $this->load->model('sale/order'); 184 $this->load->language('extension/payment/pp_payflow_iframe'); 185 186 $transaction = $this->model_extension_payment_pp_payflow_iframe->getTransaction($this->request->get['transaction_reference']); 187 188 if ($transaction) { 189 $this->document->setTitle($this->language->get('heading_refund')); 190 191 $data['breadcrumbs'] = array(); 192 193 $data['breadcrumbs'][] = array( 194 'text' => $this->language->get('text_home'), 195 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true) 196 ); 197 198 $data['breadcrumbs'][] = array( 199 'text' => $this->language->get('text_extension'), 200 'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'], true) 201 ); 202 203 $data['breadcrumbs'][] = array( 204 'text' => $this->language->get('heading_title'), 205 'href' => $this->url->link('extension/payment/pp_payflow_iframe', 'user_token=' . $this->session->data['user_token'], true) 206 ); 207 208 $data['breadcrumbs'][] = array( 209 'text' => $this->language->get('heading_refund'), 210 'href' => $this->url->link('extension/payment/pp_payflow_iframe/refund', 'transaction_reference=' . $this->request->get['transaction_reference'] . '&user_token=' . $this->session->data['user_token'], true) 211 ); 212 213 $data['transaction_reference'] = $transaction['transaction_reference']; 214 $data['transaction_amount'] = number_format($transaction['amount'], 2); 215 $data['cancel'] = $this->url->link('sale/order/info', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $transaction['order_id'], true); 216 217 $data['user_token'] = $this->session->data['user_token']; 218 219 $data['header'] = $this->load->controller('common/header'); 220 $data['column_left'] = $this->load->controller('common/column_left'); 221 $data['footer'] = $this->load->controller('common/footer'); 222 223 $this->response->setOutput($this->load->view('extension/payment/pp_payflow_iframe_refund', $data)); 224 } else { 225 return $this->forward('error/not_found'); 226 } 227 } 228 229 public function doRefund() { 230 $this->load->model('extension/payment/pp_payflow_iframe'); 231 $this->load->language('extension/payment/pp_payflow_iframe'); 232 $json = array(); 233 234 if (isset($this->request->post['transaction_reference']) && isset($this->request->post['amount'])) { 235 236 $transaction = $this->model_extension_payment_pp_payflow_iframe->getTransaction($this->request->post['transaction_reference']); 237 238 if ($transaction) { 239 $call_data = array( 240 'TRXTYPE' => 'C', 241 'TENDER' => 'C', 242 'ORIGID' => $transaction['transaction_reference'], 243 'AMT' => $this->request->post['amount'], 244 ); 245 246 $result = $this->model_extension_payment_pp_payflow_iframe->call($call_data); 247 248 if ($result['RESULT'] == 0) { 249 $json['success'] = $this->language->get('text_refund_issued'); 250 251 $data = array( 252 'order_id' => $transaction['order_id'], 253 'type' => 'C', 254 'transaction_reference' => $result['PNREF'], 255 'amount' => $this->request->post['amount'], 256 ); 257 258 $this->model_extension_payment_pp_payflow_iframe->addTransaction($data); 259 } else { 260 $json['error'] = $result['RESPMSG']; 261 } 262 } else { 263 $json['error'] = $this->language->get('error_missing_order'); 264 } 265 } else { 266 $json['error'] = $this->language->get('error_missing_data'); 267 } 268 269 $this->response->addHeader('Content-Type: application/json'); 270 $this->response->setOutput(json_encode($json)); 271 } 272 273 public function capture() { 274 $this->load->model('extension/payment/pp_payflow_iframe'); 275 $this->load->model('sale/order'); 276 $this->load->language('extension/payment/pp_payflow_iframe'); 277 278 if (isset($this->request->post['order_id']) && isset($this->request->post['amount']) && isset($this->request->post['complete'])) { 279 $order_id = $this->request->post['order_id']; 280 $paypal_order = $this->model_extension_payment_pp_payflow_iframe->getOrder($order_id); 281 $paypal_transactions = $this->model_extension_payment_pp_payflow_iframe->getTransactions($order_id); 282 $order_info = $this->model_sale_order->getOrder($order_id); 283 284 if ($paypal_order && $order_info) { 285 if ($this->request->post['complete'] == 1) { 286 $complete = 'Y'; 287 } else { 288 $complete = 'N'; 289 } 290 291 $call_data = array( 292 'TRXTYPE' => 'D', 293 'TENDER' => 'C', 294 'ORIGID' => $paypal_order['transaction_reference'], 295 'AMT' => $this->request->post['amount'], 296 'CAPTURECOMPLETE' => $complete 297 ); 298 299 $result = $this->model_extension_payment_pp_payflow_iframe->call($call_data); 300 301 if ($result['RESULT'] == 0) { 302 303 $data = array( 304 'order_id' => $order_id, 305 'type' => 'D', 306 'transaction_reference' => $result['PNREF'], 307 'amount' => $this->request->post['amount'] 308 ); 309 310 $this->model_extension_payment_pp_payflow_iframe->addTransaction($data); 311 $this->model_extension_payment_pp_payflow_iframe->updateOrderStatus($order_id, $this->request->post['complete']); 312 313 $actions = array(); 314 315 $actions[] = array( 316 'title' => $this->language->get('text_capture'), 317 'href' => $this->url->link('extension/payment/pp_payflow_iframe/refund', 'transaction_reference=' . $result['PNREF'] . '&user_token=' . $this->session->data['user_token'], true), 318 ); 319 320 $json['success'] = array( 321 'transaction_type' => $this->language->get('text_capture'), 322 'transaction_reference' => $result['PNREF'], 323 'time' => date('Y-m-d H:i:s'), 324 'amount' => number_format($this->request->post['amount'], 2), 325 'actions' => $actions, 326 ); 327 } else { 328 $json['error'] = $result['RESPMSG']; 329 } 330 } else { 331 $json['error'] = $this->language->get('error_missing_order'); 332 } 333 } else { 334 $json['error'] = $this->language->get('error_missing_data'); 335 } 336 337 $this->response->addHeader('Content-Type: application/json'); 338 $this->response->setOutput(json_encode($json)); 339 } 340 341 public function void() { 342 $this->load->model('extension/payment/pp_payflow_iframe'); 343 $this->load->language('extension/payment/pp_payflow_iframe'); 344 345 if (isset($this->request->post['order_id']) && $this->request->post['order_id'] != '') { 346 $order_id = $this->request->post['order_id']; 347 $paypal_order = $this->model_extension_payment_pp_payflow_iframe->getOrder($order_id); 348 349 if ($paypal_order) { 350 $call_data = array( 351 'TRXTYPE' => 'V', 352 'TENDER' => 'C', 353 'ORIGID' => $paypal_order['transaction_reference'], 354 ); 355 356 $result = $this->model_extension_payment_pp_payflow_iframe->call($call_data); 357 358 if ($result['RESULT'] == 0) { 359 $json['success'] = $this->language->get('text_void_success'); 360 $this->model_extension_payment_pp_payflow_iframe->updateOrderStatus($order_id, 1); 361 362 $data = array( 363 'order_id' => $order_id, 364 'type' => 'V', 365 'transaction_reference' => $result['PNREF'], 366 'amount' => '', 367 ); 368 369 $this->model_extension_payment_pp_payflow_iframe->addTransaction($data); 370 $this->model_extension_payment_pp_payflow_iframe->updateOrderStatus($order_id, 1); 371 372 $json['success'] = array( 373 'transaction_type' => $this->language->get('text_void'), 374 'transaction_reference' => $result['PNREF'], 375 'time' => date('Y-m-d H:i:s'), 376 'amount' => '0.00', 377 ); 378 } else { 379 $json['error'] = $result['RESPMSG']; 380 } 381 } else { 382 $json['error'] = $this->language->get('error_missing_order'); 383 } 384 } else { 385 $json['error'] = $this->language->get('error_missing_data'); 386 } 387 388 $this->response->addHeader('Content-Type: application/json'); 389 $this->response->setOutput(json_encode($json)); 390 } 391 392 public function order() { 393 $this->load->model('extension/payment/pp_payflow_iframe'); 394 $this->load->language('extension/payment/pp_payflow_iframe'); 395 396 $order_id = $this->request->get['order_id']; 397 398 $paypal_order = $this->model_extension_payment_pp_payflow_iframe->getOrder($order_id); 399 400 if ($paypal_order) { 401 $data['complete'] = $paypal_order['complete']; 402 403 $data['order_id'] = $this->request->get['order_id']; 404 405 $data['user_token'] = $this->request->get['user_token']; 406 407 $data['transactions'] = array(); 408 409 $transactions = $this->model_extension_payment_pp_payflow_iframe->getTransactions($order_id); 410 411 foreach ($transactions as $transaction) { 412 $actions = array(); 413 414 switch ($transaction['transaction_type']) { 415 case 'V': 416 $transaction_type = $this->language->get('text_void'); 417 break; 418 case 'S': 419 $transaction_type = $this->language->get('text_sale'); 420 421 $actions[] = array( 422 'title' => $this->language->get('text_refund'), 423 'href' => $this->url->link('extension/payment/pp_payflow_iframe/refund', 'transaction_reference=' . $transaction['transaction_reference'] . '&user_token=' . $this->session->data['user_token'], true), 424 ); 425 break; 426 case 'D': 427 $transaction_type = $this->language->get('text_capture'); 428 429 $actions[] = array( 430 'title' => $this->language->get('text_refund'), 431 'href' => $this->url->link('extension/payment/pp_payflow_iframe/refund', 'transaction_reference=' . $transaction['transaction_reference'] . '&user_token=' . $this->session->data['user_token'], true), 432 ); 433 break; 434 case 'A': 435 $transaction_type = $this->language->get('text_authorise'); 436 break; 437 438 case 'C': 439 $transaction_type = $this->language->get('text_refund');# 440 break; 441 442 default: 443 $transaction_type = ''; 444 break; 445 } 446 447 $data['transactions'][] = array( 448 'transaction_reference' => $transaction['transaction_reference'], 449 'transaction_type' => $transaction_type, 450 'time' => $transaction['time'], 451 'amount' => $transaction['amount'], 452 'actions' => $actions 453 ); 454 } 455 456 return $this->load->view('extension/payment/pp_payflow_iframe_order', $data); 457 } 458 } 459 460 protected function validate() { 461 if (!$this->user->hasPermission('modify', 'extension/payment/pp_payflow_iframe')) { 462 $this->error['warning'] = $this->language->get('error_permission'); 463 } 464 465 if (!$this->request->post['payment_pp_payflow_iframe_vendor']) { 466 $this->error['vendor'] = $this->language->get('error_vendor'); 467 } 468 469 if (!$this->request->post['payment_pp_payflow_iframe_user']) { 470 $this->error['user'] = $this->language->get('error_user'); 471 } 472 473 if (!$this->request->post['payment_pp_payflow_iframe_password']) { 474 $this->error['password'] = $this->language->get('error_password'); 475 } 476 477 if (!$this->request->post['payment_pp_payflow_iframe_partner']) { 478 $this->error['partner'] = $this->language->get('error_partner'); 479 } 480 481 return !$this->error; 482 } 483 }