shop.balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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 }