shop.balmet.com

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

nochex.php (5626B)


      1 <?php
      2 // Nochex via form will work for both simple "Seller" account and "Merchant" account holders
      3 // Nochex via APC maybe only avaiable to "Merchant" account holders only - site docs a bit vague on this point
      4 class ControllerExtensionPaymentNochex extends Controller {
      5 	public function index() {
      6 		$this->load->language('extension/payment/nochex');
      7 
      8 		$this->load->model('checkout/order');
      9 
     10 		$order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);
     11 
     12 		$data['action'] = 'https://secure.nochex.com/';
     13 
     14 		// Nochex minimum requirements
     15 		// The merchant ID is usually your Nochex registered email address but can be altered for "Merchant" accounts see below
     16 		if ($this->config->get('payment_nochex_email') != $this->config->get('payment_nochex_merchant')) {
     17 			// This MUST be changed on your Nochex account!!!!
     18 			$data['merchant_id'] = $this->config->get('payment_nochex_merchant');
     19 		} else {
     20 			$data['merchant_id'] = $this->config->get('payment_nochex_email');
     21 		}
     22 
     23 		$data['amount'] = $this->currency->format($order_info['total'], 'GBP', false, false);
     24 		$data['order_id'] = $this->session->data['order_id'];
     25 		$data['description'] = $this->config->get('config_name');
     26 
     27 		$data['billing_fullname'] = $order_info['payment_firstname'] . ' ' . $order_info['payment_lastname'];
     28 
     29 		if ($order_info['payment_address_2']) {
     30 			$data['billing_address']  = $order_info['payment_address_1'] . "\r\n" . $order_info['payment_address_2'] . "\r\n" . $order_info['payment_city'] . "\r\n" . $order_info['payment_zone'] . "\r\n";
     31 		} else {
     32 			$data['billing_address']  = $order_info['payment_address_1'] . "\r\n" . $order_info['payment_city'] . "\r\n" . $order_info['payment_zone'] . "\r\n";
     33 		}
     34 
     35 		$data['billing_postcode'] = $order_info['payment_postcode'];
     36 
     37 		if ($this->cart->hasShipping()) {
     38 			$data['delivery_fullname'] = $order_info['shipping_firstname'] . ' ' . $order_info['shipping_lastname'];
     39 
     40 			if ($order_info['shipping_address_2']) {
     41 				$data['delivery_address'] = $order_info['shipping_address_1'] . "\r\n" . $order_info['shipping_address_2'] . "\r\n" . $order_info['shipping_city'] . "\r\n" . $order_info['shipping_zone'] . "\r\n";
     42 			} else {
     43 				$data['delivery_address'] = $order_info['shipping_address_1'] . "\r\n" . $order_info['shipping_city'] . "\r\n" . $order_info['shipping_zone'] . "\r\n";
     44 			}
     45 
     46 			$data['delivery_postcode'] = $order_info['shipping_postcode'];
     47 		} else {
     48 			$data['delivery_fullname'] = $order_info['payment_firstname'] . ' ' . $order_info['payment_lastname'];
     49 
     50 			if ($order_info['payment_address_2']) {
     51 				$data['delivery_address'] = $order_info['payment_address_1'] . "\r\n" . $order_info['payment_address_2'] . "\r\n" . $order_info['payment_city'] . "\r\n" . $order_info['payment_zone'] . "\r\n";
     52 			} else {
     53 				$data['delivery_address'] = $order_info['shipping_address_1'] . "\r\n" . $order_info['payment_city'] . "\r\n" . $order_info['payment_zone'] . "\r\n";
     54 			}
     55 
     56 			$data['delivery_postcode'] = $order_info['payment_postcode'];
     57 		}
     58 
     59 		$data['email_address'] = $order_info['email'];
     60 		$data['customer_phone_number']= $order_info['telephone'];
     61 		$data['test'] = $this->config->get('payment_nochex_test');
     62 		$data['success_url'] = $this->url->link('checkout/success', '', true);
     63 		$data['cancel_url'] = $this->url->link('checkout/payment', '', true);
     64 		$data['declined_url'] = $this->url->link('extension/payment/nochex/callback', 'method=decline', true);
     65 		$data['callback_url'] = $this->url->link('extension/payment/nochex/callback', 'order=' . $this->session->data['order_id'], true);
     66 
     67 		return $this->load->view('extension/payment/nochex', $data);
     68 	}
     69 
     70 	public function callback() {
     71 		$this->load->language('extension/payment/nochex');
     72 
     73 		if (isset($this->request->get['method']) && $this->request->get['method'] == 'decline') {
     74 			$this->session->data['error'] = $this->language->get('error_declined');
     75 
     76 			$this->response->redirect($this->url->link('checkout/cart'));
     77 		}
     78 
     79 		if (isset($this->request->post['order_id'])) {
     80 			$order_id = $this->request->post['order_id'];
     81 		} else {
     82 			$order_id = 0;
     83 		}
     84 
     85 		$this->load->model('checkout/order');
     86 
     87 		$order_info = $this->model_checkout_order->getOrder($order_id);
     88 
     89 		if (!$order_info) {
     90 			$this->session->data['error'] = $this->language->get('error_no_order');
     91 
     92 			$this->response->redirect($this->url->link('checkout/cart'));
     93 		}
     94 
     95 		// Fraud Verification Step.
     96 		$request = '';
     97 
     98 		foreach ($this->request->post as $key => $value) {
     99 			$request .= '&' . $key . '=' . urlencode(stripslashes($value));
    100 		}
    101 
    102 		$curl = curl_init('https://www.nochex.com/nochex.dll/apc/apc');
    103 
    104 		curl_setopt($curl, CURLOPT_POST, true);
    105 		curl_setopt($curl, CURLOPT_POSTFIELDS, trim($request, '&'));
    106 		curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    107 		curl_setopt($curl, CURLOPT_HEADER, false);
    108 		curl_setopt($curl, CURLOPT_TIMEOUT, 30);
    109 		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    110 
    111 		$response = curl_exec($curl);
    112 
    113 		curl_close($curl);
    114 
    115 		if (strcmp($response, 'AUTHORISED') == 0) {
    116 			$this->model_checkout_order->addOrderHistory($order_id, $this->config->get('payment_nochex_order_status_id'));
    117 		} else {
    118 			$this->model_checkout_order->addOrderHistory($order_id, $this->config->get('config_order_status_id'), 'Auto-Verification step failed. Manually check the transaction.');
    119 		}
    120 
    121 		// Since it returned, the customer should see success.
    122 		// It's up to the store owner to manually verify payment.
    123 		$this->response->redirect($this->url->link('checkout/success', '', true));
    124 	}
    125 }