pp_pro_iframe.php (34599B)
1 <?php 2 class ControllerExtensionPaymentPPProIframe extends Controller { 3 private $error = array(); 4 5 public function index() { 6 $this->load->language('extension/payment/pp_pro_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_pro_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 } else { 19 $data['error'] = @$this->error; 20 } 21 22 if (isset($this->error['warning'])) { 23 $data['error_warning'] = $this->error['warning']; 24 } else { 25 $data['error_warning'] = ''; 26 } 27 28 $data['breadcrumbs'] = array(); 29 30 $data['breadcrumbs'][] = array( 31 'text' => $this->language->get('text_home'), 32 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true) 33 ); 34 35 $data['breadcrumbs'][] = array( 36 'text' => $this->language->get('text_extension'), 37 'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true) 38 ); 39 40 $data['breadcrumbs'][] = array( 41 'text' => $this->language->get('heading_title'), 42 'href' => $this->url->link('extension/payment/pp_pro_iframe', 'user_token=' . $this->session->data['user_token'], true) 43 ); 44 45 $data['action'] = $this->url->link('extension/payment/pp_pro_iframe', 'user_token=' . $this->session->data['user_token'], true); 46 47 $data['cancel'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true); 48 49 if (isset($this->request->post['payment_pp_pro_iframe_sig'])) { 50 $data['payment_pp_pro_iframe_sig'] = $this->request->post['payment_pp_pro_iframe_sig']; 51 } else { 52 $data['payment_pp_pro_iframe_sig'] = $this->config->get('payment_pp_pro_iframe_sig'); 53 } 54 55 if (isset($this->request->post['payment_pp_pro_iframe_user'])) { 56 $data['payment_pp_pro_iframe_user'] = $this->request->post['payment_pp_pro_iframe_user']; 57 } else { 58 $data['payment_pp_pro_iframe_user'] = $this->config->get('payment_pp_pro_iframe_user'); 59 } 60 61 if (isset($this->request->post['payment_pp_pro_iframe_password'])) { 62 $data['payment_pp_pro_iframe_password'] = $this->request->post['payment_pp_pro_iframe_password']; 63 } else { 64 $data['payment_pp_pro_iframe_password'] = $this->config->get('payment_pp_pro_iframe_password'); 65 } 66 67 if (isset($this->request->post['payment_pp_pro_iframe_transaction_method'])) { 68 $data['payment_pp_pro_iframe_transaction_method'] = $this->request->post['payment_pp_pro_iframe_transaction_method']; 69 } else { 70 $data['payment_pp_pro_iframe_transaction_method'] = $this->config->get('payment_pp_pro_iframe_transaction_method'); 71 } 72 73 if (isset($this->request->post['payment_pp_pro_iframe_test'])) { 74 $data['payment_pp_pro_iframe_test'] = $this->request->post['payment_pp_pro_iframe_test']; 75 } else { 76 $data['payment_pp_pro_iframe_test'] = $this->config->get('payment_pp_pro_iframe_test'); 77 } 78 79 if (isset($this->request->post['payment_pp_pro_iframe_total'])) { 80 $data['payment_pp_pro_iframe_total'] = $this->request->post['payment_pp_pro_iframe_total']; 81 } else { 82 $data['payment_pp_pro_iframe_total'] = $this->config->get('payment_pp_pro_iframe_total'); 83 } 84 85 $this->load->model('localisation/order_status'); 86 $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses(); 87 88 if (isset($this->request->post['payment_pp_pro_iframe_canceled_reversal_status_id'])) { 89 $data['payment_pp_pro_iframe_canceled_reversal_status_id'] = $this->request->post['payment_pp_pro_iframe_canceled_reversal_status_id']; 90 } else { 91 $data['payment_pp_pro_iframe_canceled_reversal_status_id'] = $this->config->get('payment_pp_pro_iframe_canceled_reversal_status_id'); 92 } 93 94 if (isset($this->request->post['payment_pp_pro_iframe_completed_status_id'])) { 95 $data['payment_pp_pro_iframe_completed_status_id'] = $this->request->post['payment_pp_pro_iframe_completed_status_id']; 96 } else { 97 $data['payment_pp_pro_iframe_completed_status_id'] = $this->config->get('payment_pp_pro_iframe_completed_status_id'); 98 } 99 100 if (isset($this->request->post['payment_pp_pro_iframe_denied_status_id'])) { 101 $data['payment_pp_pro_iframe_denied_status_id'] = $this->request->post['payment_pp_pro_iframe_denied_status_id']; 102 } else { 103 $data['payment_pp_pro_iframe_denied_status_id'] = $this->config->get('payment_pp_pro_iframe_denied_status_id'); 104 } 105 106 if (isset($this->request->post['payment_pp_pro_iframe_expired_status_id'])) { 107 $data['payment_pp_pro_iframe_expired_status_id'] = $this->request->post['payment_pp_pro_iframe_expired_status_id']; 108 } else { 109 $data['payment_pp_pro_iframe_expired_status_id'] = $this->config->get('payment_pp_pro_iframe_expired_status_id'); 110 } 111 112 if (isset($this->request->post['payment_pp_pro_iframe_failed_status_id'])) { 113 $data['payment_pp_pro_iframe_failed_status_id'] = $this->request->post['payment_pp_pro_iframe_failed_status_id']; 114 } else { 115 $data['payment_pp_pro_iframe_failed_status_id'] = $this->config->get('payment_pp_pro_iframe_failed_status_id'); 116 } 117 118 if (isset($this->request->post['payment_pp_pro_iframe_pending_status_id'])) { 119 $data['payment_pp_pro_iframe_pending_status_id'] = $this->request->post['payment_pp_pro_iframe_pending_status_id']; 120 } else { 121 $data['payment_pp_pro_iframe_pending_status_id'] = $this->config->get('payment_pp_pro_iframe_pending_status_id'); 122 } 123 124 if (isset($this->request->post['payment_pp_pro_iframe_processed_status_id'])) { 125 $data['payment_pp_pro_iframe_processed_status_id'] = $this->request->post['payment_pp_pro_iframe_processed_status_id']; 126 } else { 127 $data['payment_pp_pro_iframe_processed_status_id'] = $this->config->get('payment_pp_pro_iframe_processed_status_id'); 128 } 129 130 if (isset($this->request->post['payment_pp_pro_iframe_processed_status_id'])) { 131 $data['payment_pp_pro_iframe_processed_status_id'] = $this->request->post['payment_pp_pro_iframe_processed_status_id']; 132 } else { 133 $data['payment_pp_pro_iframe_processed_status_id'] = $this->config->get('payment_pp_pro_iframe_processed_status_id'); 134 } 135 136 if (isset($this->request->post['payment_pp_pro_iframe_reversed_status_id'])) { 137 $data['payment_pp_pro_iframe_reversed_status_id'] = $this->request->post['payment_pp_pro_iframe_reversed_status_id']; 138 } else { 139 $data['payment_pp_pro_iframe_reversed_status_id'] = $this->config->get('payment_pp_pro_iframe_reversed_status_id'); 140 } 141 142 if (isset($this->request->post['payment_pp_pro_iframe_voided_status_id'])) { 143 $data['payment_pp_pro_iframe_voided_status_id'] = $this->request->post['payment_pp_pro_iframe_voided_status_id']; 144 } else { 145 $data['payment_pp_pro_iframe_voided_status_id'] = $this->config->get('payment_pp_pro_iframe_voided_status_id'); 146 } 147 148 if (isset($this->request->post['payment_pp_pro_iframe_geo_zone_id'])) { 149 $data['payment_pp_pro_iframe_geo_zone_id'] = $this->request->post['payment_pp_pro_iframe_geo_zone_id']; 150 } else { 151 $data['payment_pp_pro_iframe_geo_zone_id'] = $this->config->get('payment_pp_pro_iframe_geo_zone_id'); 152 } 153 154 $this->load->model('localisation/geo_zone'); 155 156 $data['geo_zones'] = $this->model_localisation_geo_zone->getGeoZones(); 157 158 if (isset($this->request->post['payment_pp_pro_iframe_status'])) { 159 $data['payment_pp_pro_iframe_status'] = $this->request->post['payment_pp_pro_iframe_status']; 160 } else { 161 $data['payment_pp_pro_iframe_status'] = $this->config->get('payment_pp_pro_iframe_status'); 162 } 163 164 if (isset($this->request->post['payment_pp_pro_iframe_sort_order'])) { 165 $data['payment_pp_pro_iframe_sort_order'] = $this->request->post['payment_pp_pro_iframe_sort_order']; 166 } else { 167 $data['payment_pp_pro_iframe_sort_order'] = $this->config->get('payment_pp_pro_iframe_sort_order'); 168 } 169 170 if (isset($this->request->post['payment_pp_pro_iframe_checkout_method'])) { 171 $data['payment_pp_pro_iframe_checkout_method'] = $this->request->post['payment_pp_pro_iframe_checkout_method']; 172 } else { 173 $data['payment_pp_pro_iframe_checkout_method'] = $this->config->get('payment_pp_pro_iframe_checkout_method'); 174 } 175 176 if (isset($this->request->post['payment_pp_pro_iframe_debug'])) { 177 $data['payment_pp_pro_iframe_debug'] = $this->request->post['payment_pp_pro_iframe_debug']; 178 } else { 179 $data['payment_pp_pro_iframe_debug'] = $this->config->get('payment_pp_pro_iframe_debug'); 180 } 181 182 $data['ipn_url'] = HTTPS_CATALOG . 'index.php?route=extension/payment/pp_pro_iframe/notify'; 183 184 $data['header'] = $this->load->controller('common/header'); 185 $data['column_left'] = $this->load->controller('common/column_left'); 186 $data['footer'] = $this->load->controller('common/footer'); 187 188 $this->response->setOutput($this->load->view('extension/payment/pp_pro_iframe', $data)); 189 } 190 191 public function install() { 192 $this->load->model('extension/payment/pp_pro_iframe'); 193 194 $this->model_extension_payment_pp_pro_iframe->install(); 195 } 196 197 public function uninstall() { 198 $this->load->model('extension/payment/pp_pro_iframe'); 199 200 $this->model_extension_payment_pp_pro_iframe->uninstall(); 201 } 202 203 protected function validate() { 204 if (!$this->user->hasPermission('modify', 'extension/payment/pp_pro_iframe')) { 205 $this->error['warning'] = $this->language->get('error_permission'); 206 } 207 208 if (!$this->request->post['payment_pp_pro_iframe_sig']) { 209 $this->error['sig'] = $this->language->get('error_sig'); 210 } 211 212 if (!$this->request->post['payment_pp_pro_iframe_user']) { 213 $this->error['user'] = $this->language->get('error_user'); 214 } 215 216 if (!$this->request->post['payment_pp_pro_iframe_password']) { 217 $this->error['password'] = $this->language->get('error_password'); 218 } 219 220 return !$this->error; 221 } 222 223 public function order() { 224 $this->load->model('extension/payment/pp_pro_iframe'); 225 $this->load->language('extension/payment/pp_pro_iframe'); 226 227 $paypal_order = $this->model_extension_payment_pp_pro_iframe->getOrder($this->request->get['order_id']); 228 229 if ($paypal_order) { 230 $data['paypal_order'] = $paypal_order; 231 232 $data['user_token'] = $this->session->data['user_token']; 233 234 $data['order_id'] = $this->request->get['order_id']; 235 236 $captured = number_format($this->model_extension_payment_pp_pro_iframe->getTotalCaptured($data['paypal_order']['paypal_iframe_order_id']), 2); 237 $refunded = number_format($this->model_extension_payment_pp_pro_iframe->getTotalRefunded($data['paypal_order']['paypal_iframe_order_id']), 2); 238 239 $data['paypal_order']['captured'] = $captured; 240 $data['paypal_order']['refunded'] = $refunded; 241 $data['paypal_order']['remaining'] = number_format($data['paypal_order']['total'] - $captured, 2); 242 243 $data['transactions'] = array(); 244 245 $data['view_link'] = $this->url->link('extension/payment/pp_pro_iframe/info', 'user_token=' . $this->session->data['user_token'], true); 246 $data['refund_link'] = $this->url->link('extension/payment/pp_pro_iframe/refund', 'user_token=' . $this->session->data['user_token'], true); 247 $data['resend_link'] = $this->url->link('extension/payment/pp_pro_iframe/resend', 'user_token=' . $this->session->data['user_token'], true); 248 249 $captured = number_format($this->model_extension_payment_pp_pro_iframe->getTotalCaptured($paypal_order['paypal_iframe_order_id']), 2); 250 $refunded = number_format($this->model_extension_payment_pp_pro_iframe->getTotalRefunded($paypal_order['paypal_iframe_order_id']), 2); 251 252 $data['paypal_order'] = $paypal_order; 253 254 $data['paypal_order']['captured'] = $captured; 255 $data['paypal_order']['refunded'] = $refunded; 256 $data['paypal_order']['remaining'] = number_format($paypal_order['total'] - $captured, 2); 257 258 foreach ($paypal_order['transactions'] as $transaction) { 259 $data['transactions'][] = array( 260 'paypal_iframe_order_transaction_id' => $transaction['paypal_iframe_order_transaction_id'], 261 'transaction_id' => $transaction['transaction_id'], 262 'amount' => $transaction['amount'], 263 'date_added' => $transaction['date_added'], 264 'payment_type' => $transaction['payment_type'], 265 'payment_status' => $transaction['payment_status'], 266 'pending_reason' => $transaction['pending_reason'], 267 'view' => $this->url->link('extension/payment/pp_pro_iframe/info', 'user_token=' . $this->session->data['user_token'] . "&transaction_id=" . $transaction['transaction_id'] . '&order_id=' . $this->request->get['order_id'], true), 268 'refund' => $this->url->link('extension/payment/pp_pro_iframe/refund', 'user_token=' . $this->session->data['user_token'] . "&transaction_id=" . $transaction['transaction_id'] . "&order_id=" . $this->request->get['order_id'], true), 269 'resend' => $this->url->link('extension/payment/pp_pro_iframe/resend', 'user_token=' . $this->session->data['user_token'] . "&paypal_iframe_order_transaction_id=" . $transaction['paypal_iframe_order_transaction_id'], true), 270 ); 271 } 272 273 $data['reauthorise_link'] = $this->url->link('extension/payment/pp_pro_iframe/reauthorise', 'user_token=' . $this->session->data['user_token'], true); 274 275 return $this->load->view('extension/payment/pp_pro_iframe_order', $data); 276 } 277 } 278 279 public function refund() { 280 $this->load->language('extension/payment/pp_pro_iframe'); 281 $this->load->model('extension/payment/pp_pro_iframe'); 282 283 $this->document->setTitle($this->language->get('text_refund')); 284 285 $data['breadcrumbs'] = array(); 286 287 $data['breadcrumbs'][] = array( 288 'text' => $this->language->get('text_home'), 289 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true) 290 ); 291 292 $data['breadcrumbs'][] = array( 293 'text' => $this->language->get('heading_title'), 294 'href' => $this->url->link('extension/payment/pp_pro_iframe', 'user_token=' . $this->session->data['user_token'], true) 295 ); 296 297 $data['breadcrumbs'][] = array( 298 'text' => $this->language->get('text_refund'), 299 'href' => $this->url->link('extension/payment/pp_pro_iframe/refund', 'user_token=' . $this->session->data['user_token'], true) 300 ); 301 302 //button actions 303 $data['action'] = $this->url->link('extension/payment/pp_pro_iframe/doRefund', 'user_token=' . $this->session->data['user_token'], true); 304 305 if (isset($this->request->get['order_id'])) { 306 $data['cancel'] = $this->url->link('sale/order/info', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $this->request->get['order_id'], true); 307 } else { 308 $data['cancel'] = ''; 309 } 310 311 $data['transaction_id'] = $this->request->get['transaction_id']; 312 313 $pp_transaction = $this->model_extension_payment_pp_pro_iframe->getTransaction($this->request->get['transaction_id']); 314 315 $data['amount_original'] = $pp_transaction['AMT']; 316 $data['currency_code'] = $pp_transaction['CURRENCYCODE']; 317 318 $refunded = number_format($this->model_extension_payment_pp_pro_iframe->getTotalRefundedTransaction($this->request->get['transaction_id']), 2); 319 320 if ($refunded != 0.00) { 321 $data['refund_available'] = number_format($data['amount_original'] + $refunded, 2); 322 $data['attention'] = $this->language->get('text_current_refunds') . ': ' . $data['refund_available']; 323 } else { 324 $data['refund_available'] = ''; 325 $data['attention'] = ''; 326 } 327 328 $data['user_token'] = $this->session->data['user_token']; 329 330 if (isset($this->session->data['error'])) { 331 $data['error'] = $this->session->data['error']; 332 unset($this->session->data['error']); 333 } else { 334 $data['error'] = ''; 335 } 336 337 $data['header'] = $this->load->controller('common/header'); 338 $data['column_left'] = $this->load->controller('common/column_left'); 339 $data['footer'] = $this->load->controller('common/footer'); 340 341 $this->response->setOutput($this->load->view('extension/payment/pp_pro_iframe_refund', $data)); 342 } 343 344 public function doRefund() { 345 /** 346 * used to issue a refund for a captured payment 347 * 348 * refund can be full or partial 349 */ 350 if (isset($this->request->post['transaction_id']) && isset($this->request->post['refund_full'])) { 351 352 $this->load->model('extension/payment/pp_pro_iframe'); 353 $this->load->language('extension/payment/pp_pro_iframe'); 354 355 if ($this->request->post['refund_full'] == 0 && $this->request->post['amount'] == 0) { 356 $this->session->data['error'] = $this->language->get('error_capture'); 357 $this->response->redirect($this->url->link('extension/payment/pp_pro_iframe/refund', 'user_token=' . $this->session->data['user_token'] . '&transaction_id=' . $this->request->post['transaction_id'], true)); 358 } else { 359 $order_id = $this->model_extension_payment_pp_pro_iframe->getOrderId($this->request->post['transaction_id']); 360 $paypal_order = $this->model_extension_payment_pp_pro_iframe->getOrder($order_id); 361 362 if ($paypal_order) { 363 $call_data = array(); 364 $call_data['METHOD'] = 'RefundTransaction'; 365 $call_data['TRANSACTIONID'] = $this->request->post['transaction_id']; 366 $call_data['NOTE'] = urlencode($this->request->post['refund_message']); 367 $call_data['MSGSUBID'] = uniqid(mt_rand(), true); 368 369 $current_transaction = $this->model_extension_payment_pp_pro_iframe->getLocalTransaction($this->request->post['transaction_id']); 370 371 if ($this->request->post['refund_full'] == 1) { 372 $call_data['REFUNDTYPE'] = 'Full'; 373 } else { 374 $call_data['REFUNDTYPE'] = 'Partial'; 375 $call_data['AMT'] = number_format($this->request->post['amount'], 2); 376 $call_data['CURRENCYCODE'] = $this->request->post['currency_code']; 377 } 378 379 $result = $this->model_extension_payment_pp_pro_iframe->call($call_data); 380 381 $transaction = array( 382 'paypal_iframe_order_id' => $paypal_order['paypal_iframe_order_id'], 383 'transaction_id' => '', 384 'parent_id' => $this->request->post['transaction_id'], 385 'note' => $this->request->post['refund_message'], 386 'msgsubid' => $call_data['MSGSUBID'], 387 'receipt_id' => '', 388 'payment_type' => '', 389 'payment_status' => 'Refunded', 390 'transaction_entity' => 'payment', 391 'pending_reason' => '', 392 'amount' => '-' . (isset($call_data['AMT']) ? $call_data['AMT'] : $current_transaction['amount']), 393 'debug_data' => json_encode($result) 394 ); 395 396 if ($result == false) { 397 $transaction['payment_status'] = 'Failed'; 398 $this->model_extension_payment_pp_pro_iframe->addTransaction($transaction, $call_data); 399 $this->response->redirect($this->url->link('sale/order/info', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $paypal_order['order_id'], true)); 400 } else if ($result['ACK'] != 'Failure' && $result['ACK'] != 'FailureWithWarning') { 401 402 $transaction['transaction_id'] = $result['REFUNDTRANSACTIONID']; 403 $transaction['payment_type'] = $result['REFUNDSTATUS']; 404 $transaction['pending_reason'] = $result['PENDINGREASON']; 405 $transaction['amount'] = '-' . $result['GROSSREFUNDAMT']; 406 407 $this->model_extension_payment_pp_pro_iframe->addTransaction($transaction); 408 409 if ($result['TOTALREFUNDEDAMOUNT'] == $this->request->post['amount_original']) { 410 $this->model_extension_payment_pp_pro_iframe->updateRefundTransaction($this->request->post['transaction_id'], 'Refunded'); 411 } else { 412 $this->model_extension_payment_pp_pro_iframe->updateRefundTransaction($this->request->post['transaction_id'], 'Partially-Refunded'); 413 } 414 415 //redirect back to the order 416 $this->response->redirect($this->url->link('sale/order/info', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $paypal_order['order_id'], true)); 417 } else { 418 if ($this->config->get('payment_pp_pro_iframe_debug')) { 419 $log = new Log('pp_pro_iframe.log'); 420 $log->write(json_encode($result)); 421 } 422 423 $this->session->data['error'] = (isset($result['L_SHORTMESSAGE0']) ? $result['L_SHORTMESSAGE0'] : 'There was an error') . (isset($result['L_LONGMESSAGE0']) ? '<br />' . $result['L_LONGMESSAGE0'] : ''); 424 $this->response->redirect($this->url->link('extension/payment/pp_pro_iframe/refund', 'user_token=' . $this->session->data['user_token'] . '&transaction_id=' . $this->request->post['transaction_id'], true)); 425 } 426 } else { 427 $this->session->data['error'] = $this->language->get('error_data_missing'); 428 $this->response->redirect($this->url->link('extension/payment/pp_pro_iframe/refund', 'user_token=' . $this->session->data['user_token'] . '&transaction_id=' . $this->request->post['transaction_id'], true)); 429 } 430 } 431 } else { 432 $this->session->data['error'] = $this->language->get('error_data'); 433 $this->response->redirect($this->url->link('extension/payment/pp_pro_iframe/refund', 'user_token=' . $this->session->data['user_token'] . '&transaction_id=' . $this->request->post['transaction_id'], true)); 434 } 435 } 436 437 public function reauthorise() { 438 $this->load->language('extension/payment/pp_pro_iframe'); 439 $this->load->model('extension/payment/pp_pro_iframe'); 440 441 $json = array(); 442 443 if (isset($this->request->post['order_id'])) { 444 $paypal_order = $this->model_extension_payment_pp_pro_iframe->getOrder($this->request->post['order_id']); 445 446 $call_data = array(); 447 $call_data['METHOD'] = 'DoReauthorization'; 448 $call_data['AUTHORIZATIONID'] = $paypal_order['authorization_id']; 449 $call_data['AMT'] = number_format($paypal_order['total'], 2); 450 $call_data['CURRENCYCODE'] = $paypal_order['currency_code']; 451 452 $result = $this->model_extension_payment_pp_pro_iframe->call($call_data); 453 454 if ($result['ACK'] != 'Failure' && $result['ACK'] != 'FailureWithWarning') { 455 $this->model_extension_payment_pp_pro_iframe->updateAuthorizationId($paypal_order['paypal_iframe_order_id'], $result['AUTHORIZATIONID']); 456 457 $transaction = array( 458 'paypal_iframe_order_id' => $paypal_order['paypal_iframe_order_id'], 459 'transaction_id' => '', 460 'parent_id' => $paypal_order['authorization_id'], 461 'note' => '', 462 'msgsubid' => '', 463 'receipt_id' => '', 464 'payment_type' => 'instant', 465 'payment_status' => $result['PAYMENTSTATUS'], 466 'transaction_entity' => 'auth', 467 'pending_reason' => $result['PENDINGREASON'], 468 'amount' => '-' . '', 469 'debug_data' => json_encode($result) 470 ); 471 472 $this->model_extension_payment_pp_pro_iframe->addTransaction($transaction); 473 474 $transaction['date_added'] = date("Y-m-d H:i:s"); 475 476 $json['data'] = $transaction; 477 $json['error'] = false; 478 $json['msg'] = 'Ok'; 479 } else { 480 $json['error'] = true; 481 $json['msg'] = (isset($result['L_SHORTMESSAGE0']) ? $result['L_SHORTMESSAGE0'] : $this->language->get('error_general')); 482 } 483 } else { 484 $json['error'] = true; 485 $json['msg'] = $this->language->get('error_missing_data'); 486 } 487 488 $this->response->addHeader('Content-Type: application/json'); 489 $this->response->setOutput(json_encode($json)); 490 } 491 492 public function info() { 493 $this->load->model('extension/payment/pp_pro_iframe'); 494 $this->load->language('extension/payment/pp_pro_iframe'); 495 496 $data['breadcrumbs'] = array(); 497 498 $data['breadcrumbs'][] = array( 499 'text' => $this->language->get('text_home'), 500 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true) 501 ); 502 503 $data['breadcrumbs'][] = array( 504 'text' => $this->language->get('heading_title'), 505 'href' => $this->url->link('extension/payment/pp_pro_iframe', 'user_token=' . $this->session->data['user_token'], true) 506 ); 507 508 $data['breadcrumbs'][] = array( 509 'text' => $this->language->get('text_transaction'), 510 'href' => $this->url->link('extension/payment/pp_pro_iframe/info', 'user_token=' . $this->session->data['user_token'] . '&transaction_id=' . $this->request->get['transaction_id'], true) 511 ); 512 513 $transaction = $this->model_extension_payment_pp_pro_iframe->getTransaction($this->request->get['transaction_id']); 514 $transaction = array_map('urldecode', $transaction); 515 516 $data['transaction'] = $transaction; 517 $data['view_link'] = $this->url->link('extension/payment/pp_pro_iframe/info', 'user_token=' . $this->session->data['user_token'], true); 518 $data['user_token'] = $this->session->data['user_token']; 519 520 $this->document->setTitle($this->language->get('text_transaction')); 521 522 if (isset($this->request->get['order_id'])) { 523 $data['back'] = $this->url->link('sale/order/info', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $this->request->get['order_id'], true); 524 } else { 525 $data['back'] = ''; 526 } 527 528 $data['header'] = $this->load->controller('common/header'); 529 $data['column_left'] = $this->load->controller('common/column_left'); 530 $data['footer'] = $this->load->controller('common/footer'); 531 532 $this->response->setOutput($this->load->view('extension/payment/pp_pro_iframe_transaction', $data)); 533 } 534 535 public function capture() { 536 $this->load->language('extension/payment/pp_pro_iframe'); 537 /* 538 * used to capture authorised payments 539 * capture can be full or partial amounts 540 */ 541 if (isset($this->request->post['order_id']) && $this->request->post['amount'] > 0 && isset($this->request->post['order_id']) && isset($this->request->post['complete'])) { 542 543 $this->load->model('extension/payment/pp_pro_iframe'); 544 545 $paypal_order = $this->model_extension_payment_pp_pro_iframe->getOrder($this->request->post['order_id']); 546 547 if ($this->request->post['complete'] == 1) { 548 $complete = 'Complete'; 549 } else { 550 $complete = 'NotComplete'; 551 } 552 553 $call_data = array(); 554 $call_data['METHOD'] = 'DoCapture'; 555 $call_data['AUTHORIZATIONID'] = $paypal_order['authorization_id']; 556 $call_data['AMT'] = number_format($this->request->post['amount'], 2); 557 $call_data['CURRENCYCODE'] = $paypal_order['currency_code']; 558 $call_data['COMPLETETYPE'] = $complete; 559 $call_data['MSGSUBID'] = uniqid(mt_rand(), true); 560 561 $result = $this->model_extension_payment_pp_pro_iframe->call($call_data); 562 563 $transaction = array( 564 'paypal_iframe_order_id' => $paypal_order['paypal_iframe_order_id'], 565 'transaction_id' => '', 566 'parent_id' => $paypal_order['authorization_id'], 567 'note' => '', 568 'msgsubid' => $call_data['MSGSUBID'], 569 'receipt_id' => '', 570 'payment_type' => '', 571 'payment_status' => '', 572 'pending_reason' => '', 573 'transaction_entity' => 'payment', 574 'amount' => '', 575 'debug_data' => json_encode($result) 576 ); 577 578 if ($result == false) { 579 $transaction['amount'] = number_format($this->request->post['amount'], 2); 580 $paypal_iframe_order_transaction_id = $this->model_extension_payment_pp_pro_iframe->addTransaction($transaction, $call_data); 581 582 $json['error'] = true; 583 584 $json['failed_transaction']['paypal_iframe_order_transaction_id'] = $paypal_iframe_order_transaction_id; 585 $json['failed_transaction']['amount'] = $transaction['amount']; 586 $json['failed_transaction']['date_added'] = date("Y-m-d H:i:s"); 587 588 $json['msg'] = $this->language->get('error_timeout'); 589 } else if (isset($result['ACK']) && $result['ACK'] != 'Failure' && $result['ACK'] != 'FailureWithWarning') { 590 $transaction['transaction_id'] = $result['TRANSACTIONID']; 591 $transaction['payment_type'] = $result['PAYMENTTYPE']; 592 $transaction['payment_status'] = $result['PAYMENTSTATUS']; 593 $transaction['pending_reason'] = (isset($result['PENDINGREASON']) ? $result['PENDINGREASON'] : ''); 594 $transaction['amount'] = $result['AMT']; 595 596 $this->model_extension_payment_pp_pro_iframe->addTransaction($transaction); 597 598 unset($transaction['debug_data']); 599 $transaction['date_added'] = date("Y-m-d H:i:s"); 600 601 $captured = number_format($this->model_extension_payment_pp_pro_iframe->getTotalCaptured($paypal_order['paypal_iframe_order_id']), 2); 602 $refunded = number_format($this->model_extension_payment_pp_pro_iframe->getTotalRefunded($paypal_order['paypal_iframe_order_id']), 2); 603 604 $transaction['captured'] = $captured; 605 $transaction['refunded'] = $refunded; 606 $transaction['remaining'] = number_format($paypal_order['total'] - $captured, 2); 607 608 $transaction['status'] = 0; 609 if ($transaction['remaining'] == 0.00) { 610 $transaction['status'] = 1; 611 $this->model_extension_payment_pp_pro_iframe->updateOrder('Complete', $this->request->post['order_id']); 612 } 613 614 $transaction['void'] = ''; 615 616 if ($this->request->post['complete'] == 1 && $transaction['remaining'] > 0) { 617 $transaction['void'] = array( 618 'paypal_iframe_order_id' => $paypal_order['paypal_iframe_order_id'], 619 'transaction_id' => '', 620 'parent_id' => $paypal_order['authorization_id'], 621 'note' => '', 622 'msgsubid' => '', 623 'receipt_id' => '', 624 'payment_type' => '', 625 'payment_status' => 'Void', 626 'pending_reason' => '', 627 'amount' => '', 628 'debug_data' => 'Voided after capture', 629 'transaction_entity' => 'auth', 630 ); 631 632 $this->model_extension_payment_pp_pro_iframe->addTransaction($transaction['void']); 633 $this->model_extension_payment_pp_pro_iframe->updateOrder('Complete', $this->request->post['order_id']); 634 $transaction['void']['date_added'] = date("Y-m-d H:i:s"); 635 $transaction['status'] = 1; 636 } 637 638 $json['data'] = $transaction; 639 $json['error'] = false; 640 $json['msg'] = 'Ok'; 641 } else { 642 $json['error'] = true; 643 $json['msg'] = (isset($result['L_SHORTMESSAGE0']) ? $result['L_SHORTMESSAGE0'] : 'There was an error'); 644 } 645 } else { 646 $json['error'] = true; 647 $json['msg'] = 'Missing data'; 648 } 649 650 $this->response->addHeader('Content-Type: application/json'); 651 $this->response->setOutput(json_encode($json)); 652 } 653 654 public function void() { 655 $this->load->language('extension/payment/pp_pro_iframe'); 656 657 if (isset($this->request->post['order_id']) && $this->request->post['order_id'] != '') { 658 $this->load->model('extension/payment/pp_pro_iframe'); 659 660 $paypal_order = $this->model_extension_payment_pp_pro_iframe->getOrder($this->request->post['order_id']); 661 662 $call_data = array(); 663 $call_data['METHOD'] = 'DoVoid'; 664 $call_data['AUTHORIZATIONID'] = $paypal_order['authorization_id']; 665 666 $result = $this->model_extension_payment_pp_pro_iframe->call($call_data); 667 668 if ($result['ACK'] != 'Failure' && $result['ACK'] != 'FailureWithWarning') { 669 $transaction = array( 670 'paypal_iframe_order_id' => $paypal_order['paypal_iframe_order_id'], 671 'transaction_id' => '', 672 'parent_id' => $paypal_order['authorization_id'], 673 'note' => '', 674 'msgsubid' => '', 675 'receipt_id' => '', 676 'payment_type' => 'void', 677 'payment_status' => 'Void', 678 'pending_reason' => '', 679 'transaction_entity' => 'auth', 680 'amount' => '', 681 'debug_data' => json_encode($result) 682 ); 683 684 $this->model_extension_payment_pp_pro_iframe->addTransaction($transaction); 685 $this->model_extension_payment_pp_pro_iframe->updateOrder('Complete', $this->request->post['order_id']); 686 687 unset($transaction['debug_data']); 688 $transaction['date_added'] = date("Y-m-d H:i:s"); 689 690 $json['data'] = $transaction; 691 $json['error'] = false; 692 $json['msg'] = 'Transaction void'; 693 } else { 694 $json['error'] = true; 695 $json['msg'] = (isset($result['L_SHORTMESSAGE0']) ? $result['L_SHORTMESSAGE0'] : $this->language->get('error_general')); 696 } 697 } else { 698 $json['error'] = true; 699 $json['msg'] = $this->language->get('error_missing_data'); 700 } 701 702 $this->response->addHeader('Content-Type: application/json'); 703 $this->response->setOutput(json_encode($json)); 704 } 705 706 public function resend() { 707 $this->load->model('extension/payment/pp_pro_iframe'); 708 $this->load->language('extension/payment/pp_pro_iframe'); 709 710 $json = array(); 711 712 if (isset($this->request->get['paypal_iframe_order_transaction_id'])) { 713 $transaction = $this->model_extension_payment_pp_pro_iframe->getFailedTransaction($this->request->get['paypal_iframe_order_transaction_id']); 714 715 if ($transaction) { 716 $call_data = json_decode($transaction['call_data'], true); 717 718 $result = $this->model_extension_payment_pp_pro_iframe->call($call_data); 719 720 if ($result) { 721 $parent_transaction = $this->model_extension_payment_pp_pro_iframe->getLocalTransaction($transaction['parent_id']); 722 723 if ($parent_transaction['amount'] == abs($transaction['amount'])) { 724 $this->model_extension_payment_pp_pro_iframe->updateRefundTransaction($transaction['parent_id'], 'Refunded'); 725 } else { 726 $this->model_extension_payment_pp_pro_iframe->updateRefundTransaction($transaction['parent_id'], 'Partially-Refunded'); 727 } 728 729 if (isset($result['REFUNDTRANSACTIONID'])) { 730 $transaction['transaction_id'] = $result['REFUNDTRANSACTIONID']; 731 } else { 732 $transaction['transaction_id'] = $result['TRANSACTIONID']; 733 } 734 735 if (isset($result['PAYMENTTYPE'])) { 736 $transaction['payment_type'] = $result['PAYMENTTYPE']; 737 } else { 738 $transaction['payment_type'] = $result['REFUNDSTATUS']; 739 } 740 741 if (isset($result['PAYMENTSTATUS'])) { 742 $transaction['payment_status'] = $result['PAYMENTSTATUS']; 743 } else { 744 $transaction['payment_status'] = 'Refunded'; 745 } 746 747 if (isset($result['AMT'])) { 748 $transaction['amount'] = $result['AMT']; 749 } else { 750 $transaction['amount'] = $transaction['amount']; 751 } 752 753 $transaction['pending_reason'] = (isset($result['PENDINGREASON']) ? $result['PENDINGREASON'] : ''); 754 755 $this->model_extension_payment_pp_pro_iframe->updateTransaction($transaction); 756 757 $json['success'] = $this->language->get('success_transaction_resent'); 758 } else { 759 $json['error'] = $this->language->get('error_timeout'); 760 } 761 } else { 762 $json['error'] = $this->language->get('error_transaction_missing'); 763 } 764 } else { 765 $json['error'] = $this->language->get('error_missing_data'); 766 } 767 768 $this->response->addHeader('Content-Type: application/json'); 769 $this->response->setOutput(json_encode($json)); 770 } 771 }