/**
  *
  * @see FrontController::postProcess()
  */
 public function postProcess()
 {
     $hipay = new HiPay_Tpp();
     //$cart = $this->context->cart;
     $context = Context::getContext();
     $cart = $context->cart;
     if (!$this->module->checkCurrency($cart)) {
         Tools::redirect('index.php?controller=order&xer=1');
     }
     $context->smarty->assign(array('nbProducts' => $cart->nbProducts(), 'cust_currency' => $cart->id_currency, 'currencies' => $this->module->getCurrency((int) $cart->id_currency), 'total' => $cart->getOrderTotal(true, Cart::BOTH), 'this_path' => $this->module->getPathUri(), 'this_path_bw' => $this->module->getPathUri(), 'this_path_ssl' => Tools::getShopDomainSsl(true, true) . __PS_BASE_URI__ . 'modules/' . $this->module->name . '/'));
     // Token is called when the user ENTERS the card details.
     $paymentproductswitcher = Tools::getValue('paymentproductswitcher');
     if ($paymentproductswitcher == 'american-express') {
         // American Express
         // No cardHolder, but firstname and lastname
         $cardNumber = Tools::getValue('cardNumber');
         $cardHolder = null;
         $cardFirstName = Tools::getValue('cardFirstName');
         $cardLastName = Tools::getValue('cardLastName');
         $cardExpiryMonth = Tools::getValue('cardExpiryMonth');
         $cardExpiryYear = Tools::getValue('cardExpiryYear');
         $cardSecurityCode = Tools::getValue('cardSecurityCode');
         $cardMemorizeCode = Tools::getValue('cardMemorizeCode');
         $cartUseExistingToken = Tools::getValue('cartUseExistingToken');
         $cardToken = Tools::getValue('cardToken');
     } else {
         if ($paymentproductswitcher == 'bcmc') {
             // BanckContact/MisterCash
             // No CRC check
             $cardNumber = Tools::getValue('cardNumber');
             $cardHolder = Tools::getValue('cardHolder');
             $cardFirstName = null;
             $cardLastName = null;
             $cardExpiryMonth = Tools::getValue('cardExpiryMonth');
             $cardExpiryYear = Tools::getValue('cardExpiryYear');
             $cardSecurityCode = null;
             $cardMemorizeCode = Tools::getValue('cardMemorizeCode');
             $cartUseExistingToken = Tools::getValue('cartUseExistingToken');
             $cardToken = Tools::getValue('cardToken');
         } else {
             $cardNumber = Tools::getValue('cardNumber');
             $cardHolder = Tools::getValue('cardHolder');
             $cardFirstName = null;
             $cardLastName = null;
             $cardExpiryMonth = Tools::getValue('cardExpiryMonth');
             $cardExpiryYear = Tools::getValue('cardExpiryYear');
             $cardSecurityCode = Tools::getValue('cardSecurityCode');
             $cardMemorizeCode = Tools::getValue('cardMemorizeCode');
             $cartUseExistingToken = Tools::getValue('cartUseExistingToken');
             $cardToken = Tools::getValue('cardToken');
         }
     }
     if ($cartUseExistingToken) {
         // $cartUseExistingToken = 1 -> Use memorized card token.
         // Pre-check
         $errors = true;
         // Initialize to true
         if ($cardToken != '' || $cardToken != null) {
             if ($cardToken) {
                 $token_to_use = $cardToken;
                 // This variable will be used to make the payment. Assign only when token is present.
                 $errors = false;
                 // proceed with the submit
             }
         }
         // If $cardToken is null or empty or false
         // Send error 999 to indicate that user should select the card
         if ($errors) {
             $cardtoken = '999';
         }
     } else {
         // $cartUseExistingToken = 0 -> Default processing of fetching card token.
         $cardtoken = HipayToken::createToken($cardNumber, $cardHolder, $cardExpiryMonth, $cardExpiryYear, $cardSecurityCode, $cardFirstName, $cardLastName, $paymentproductswitcher);
         // Pre-check
         $errors = true;
         // Initialize to true
         if (is_object($cardtoken)) {
             // Verify if token is not 0 or false
             if ($cardtoken->token) {
                 if ($cardMemorizeCode == 'memorize') {
                     HipayToken::saveToken($cardtoken, $cart);
                 }
                 $token_to_use = $cardtoken->token;
                 // This variable will be used to make the payment. Assign only when token is present.
                 $errors = false;
                 // proceed with the submit
             }
         }
     }
     if ($errors) {
         $cart = $context->cart;
         $context->smarty->assign(array('nbProducts' => $cart->nbProducts(), 'cust_currency' => $cart->id_currency, 'currencies' => $this->module->getCurrency((int) $cart->id_currency), 'total' => $cart->getOrderTotal(true, Cart::BOTH), 'this_path' => $this->module->getPathUri(), 'this_path_bw' => $this->module->getPathUri(), 'this_path_ssl' => Tools::getShopDomainSsl(true, true) . __PS_BASE_URI__ . 'modules/' . $this->module->name . '/'));
         $currency_array = $this->module->getCurrency((int) $cart->id_currency);
         $currency = $currency_array[0]['iso_code'];
         foreach ($currency_array as $key => $value) {
             if ($value['id_currency'] == $cart->id_currency) {
                 $actual_currency = $value['iso_code'];
             }
         }
         if ($currency != $actual_currency) {
             $currency = $actual_currency;
         }
         $context->smarty->assign(array('status_error' => (int) $cardtoken, 'cart_id' => $cart->id, 'currency' => $currency, 'amount' => $cart->getOrderTotal(true, Cart::BOTH)));
         // Tpl will load a form that will store those infomations.
         $context->controller->addCSS(_MODULE_DIR_ . $this->module->name . '/css/hipay.css');
         $context->controller->addJs(_MODULE_DIR_ . $this->module->name . '/js/15hipay.js');
         $card_str = Configuration::get('HIPAY_ALLOWED_CARDS');
         $selection_cards = array('american-express' => $hipay->l('American Express'), 'bcmc' => $hipay->l('Bancontact / Mister Cash'), 'cb' => $hipay->l('Carte Bancaire'), 'maestro' => $hipay->l('Maestro'), 'mastercard' => $hipay->l('MasterCard'), 'visa' => $hipay->l('Visa'));
         $cart_arr = explode(',', $card_str);
         $carte = array();
         foreach ($cart_arr as $key => $value) {
             foreach ($selection_cards as $key1 => $value1) {
                 if ($key1 && $value == $key1) {
                     $carte[$key1] = $value1;
                 }
             }
         }
         $context->smarty->assign(array('cartes' => $carte));
         $tokens = HipayToken::getTokens($cart->id_customer);
         //
         if ($tokens['0']) {
             $token_display = 'true';
         } else {
             $token_display = 'false';
         }
         $allow_memorize = HipayClass::getShowMemorization();
         if (_PS_VERSION_ >= '1.6') {
             $show_breadcrumb = false;
         } else {
             $show_breadcrumb = true;
         }
         $context->smarty->assign(array('token_display' => $token_display, 'allow_memorize' => $allow_memorize, 'show_breadcrumb' => $show_breadcrumb, 'tokens' => $tokens));
         $payment_tpl = 'payment_execution_api.tpl';
         return $this->setTemplate($payment_tpl);
         die;
     } else {
         // Mode API
         // Constructs data array and sends it as a parameter to the tpl
         $data = HipayToken::getApiData($cart, $token_to_use, null, $cartUseExistingToken);
         $response = HipayApi::restApi('order', $data);
         // Check if 3D secure is activated
         //if((int)$data['authentication_indicator'])
         //{
         // Check if forwardURL is true
         if ($response->forwardUrl) {
             // Redirect user
             Tools::redirect($response->forwardUrl);
         }
         //}
         if (get_class($response) != 'Exception') {
             switch ($response->state) {
                 case 'completed':
                     $response_state = 'completed';
                     break;
                 case 'forwarding':
                     $response_state = 'forwarding';
                     break;
                 case 'pending':
                     $response_state = 'pending';
                     break;
                 case 'declined':
                     $response_state = 'declined';
                     break;
                 case 'error':
                 default:
                     $response_state = 'error';
                     break;
             }
             $context->smarty->assign(array('error_code' => '', 'error_message' => '', 'error_response' => '', 'response_state' => $response_state));
         } else {
             $response_code = $response->getCode();
             $response_message = $response->getMessage();
             $context->smarty->assign(array('error_code' => $response_code, 'error_message' => $response_message, 'error_response' => 'exception_error', 'response_state' => 'error'));
         }
         switch ($response_state) {
             case 'completed':
                 $redirect_url = HipayClass::getRedirectionUrl(Tools::getShopDomainSsl(true, true) . __PS_BASE_URI__ . 'index.php?fc=module&module=' . $hipay->name . '&controller=accept');
                 break;
             case 'declined':
                 $redirect_url = HipayClass::getRedirectionUrl(Tools::getShopDomainSsl(true, true) . __PS_BASE_URI__ . 'index.php?fc=module&module=' . $hipay->name . '&controller=decline');
                 break;
             case 'cancel':
                 $redirect_url = HipayClass::getRedirectionUrl(Tools::getShopDomainSsl(true, true) . __PS_BASE_URI__ . 'index.php?fc=module&module=' . $hipay->name . '&controller=cancel');
                 break;
             case 'pending':
             case 'forwarding':
                 $redirect_url = HipayClass::getRedirectionUrl(Tools::getShopDomainSsl(true, true) . __PS_BASE_URI__ . 'index.php?fc=module&module=' . $hipay->name . '&controller=pending');
                 // Implementing challenge url
                 // Redirecting to challenge url if url present
                 if (Configuration::get('HIPAY_CHALLENGE_URL')) {
                     $redirect_url = Configuration::get('HIPAY_CHALLENGE_URL');
                 }
                 break;
             case 'exception':
             default:
                 $redirect_url = HipayClass::getRedirectionUrl(Tools::getShopDomainSsl(true, true) . __PS_BASE_URI__ . 'index.php?fc=module&module=' . $hipay->name . '&controller=exception');
                 break;
         }
         // Disconnect User from cart
         HipayClass::unsetCart();
         die('
             <script type="text/javascript">
                 try{
                     parent.window.location.replace("' . $redirect_url . '");
                 }catch(e){
                     alert(e);
                 }
             </script>
             <h1>' . Tools::displayError('Now loading..') . '</h1>
         ');
         $this->setTemplate('payment_api_response.tpl');
     }
 }
 /**
  *
  * @see FrontController::initContent()
  */
 public function initContent()
 {
     $hipay = new HiPay_Tpp();
     $this->display_column_left = false;
     $this->display_column_right = false;
     parent::initContent();
     #PROFILEO64 - Multishop issue when using $this->context->cart. Switching to Context::getContext()
     //$cart = $this->context->cart;
     $context = Context::getContext();
     $cart = $context->cart;
     if (!$this->module->checkCurrency($cart)) {
         Tools::redirect('index.php?controller=order&xer=1');
     }
     // Check if cart_id has already been stored in tbl cart_sent
     $override_payment_mode = false;
     $cart_id_count = Db::getInstance()->getValue("SELECT COUNT( cart_id ) FROM  `" . _DB_PREFIX_ . "hipay_cart_sent` WHERE cart_id = '" . (int) $cart->id . "'");
     if ($cart_id_count == 0) {
         // Not found. Add new entry
         $sql_add_cart_id = "INSERT INTO `" . _DB_PREFIX_ . "hipay_cart_sent` (`cart_id`, `timestamp`)\r\n            VALUES('" . (int) $cart->id . "', NOW() )";
         Db::getInstance()->execute($sql_add_cart_id);
     }
     /*
     		// TPPPRS-23
     		else{
     			// Found. Duplicate cart
     			$duplicate_status_msg = HipayClass::duplicateCart();
     			if($duplicate_status_msg)
     			{
     				$override_payment_mode = true;
     			}
     		}*/
     $context->smarty->assign(array('nbProducts' => $cart->nbProducts(), 'cust_currency' => $cart->id_currency, 'currencies' => $this->module->getCurrency((int) $cart->id_currency), 'total' => $cart->getOrderTotal(true, Cart::BOTH), 'this_path' => $this->module->getPathUri(), 'this_path_bw' => $this->module->getPathUri(), 'this_path_ssl' => Tools::getShopDomainSsl(true, true) . __PS_BASE_URI__ . 'modules/' . $this->module->name . '/'));
     $context->controller->addCSS(_MODULE_DIR_ . $this->module->name . '/css/hipay.css');
     $context->controller->addJs(_MODULE_DIR_ . $this->module->name . '/js/15hipay.js');
     $hipay_payment_mode = Configuration::get('HIPAY_PAYMENT_MODE');
     if (Tools::getValue('cartMemorizeToken')) {
         $sql_insert = "INSERT INTO `" . _DB_PREFIX_ . "hipay_tokens_tmp` (`cart_id`) VALUES('" . $cart->id . "')";
         @Db::getInstance()->execute($sql_insert);
     }
     // Initializing the payment mode to the default configuration mode
     $payment_mode = Configuration::get('HIPAY_PAYMENT_MODE');
     // Check card used - if card used is a local card, force mode 'dedicated page'
     if (Tools::isSubmit('localcardToken') && tools::getValue('localcardToken')) {
         // Override to mode page dedicated
         $payment_mode = 3;
     }
     // Last check, if $override_payment_mode = true then override all payement modes and force error message display
     /*
     		// TPPPRS-23
     		if($override_payment_mode) {
     			// Override to mode page cart duplicated
     			$payment_mode = 4;
     			// Use $duplicate_status_msg to display msg err
     		}*/
     // Different calls depending on Payment mode
     switch ($payment_mode) {
         case 1:
             // Mode Iframe
             $data = HipayApi::getApiData($cart, 'iframe');
             $response = $this->restApi('hpayment', $data);
             // Update to display montant
             $currency_array = $this->module->getCurrency((int) $cart->id_currency);
             $currency = $currency_array[0]['iso_code'];
             foreach ($currency_array as $key => $value) {
                 if ($value['id_currency'] == $cart->id_currency) {
                     $actual_currency = $value['iso_code'];
                 }
             }
             if ($currency != $actual_currency) {
                 $currency = $actual_currency;
             }
             if (Tools::strlen(Configuration::get('HIPAY_IFRAME_WIDTH')) > 0) {
                 $iframe_width = Configuration::get('HIPAY_IFRAME_WIDTH');
             } else {
                 $iframe_width = '100%';
             }
             if (Tools::strlen(Configuration::get('HIPAY_IFRAME_HEIGHT')) > 0) {
                 $iframe_height = Configuration::get('HIPAY_IFRAME_HEIGHT');
             } else {
                 $iframe_height = '670';
             }
             if (_PS_VERSION_ >= '1.6') {
                 $show_breadcrumb = false;
             } else {
                 $show_breadcrumb = true;
             }
             $context->smarty->assign(array('iframe_url' => $response->forwardUrl, 'cart_id' => $cart->id, 'currency' => $currency, 'show_breadcrumb' => $show_breadcrumb, 'amount' => $cart->getOrderTotal(true, Cart::BOTH), 'iframe_width' => $iframe_width, 'iframe_height' => $iframe_height));
             $payment_tpl = 'payment_execution_iframe.tpl';
             break;
         case 2:
             // Mode API
             // Constructs data array and sends it as a parameter to the tpl
             $currency_array = $this->module->getCurrency((int) $cart->id_currency);
             $currency = $currency_array[0]['iso_code'];
             foreach ($currency_array as $key => $value) {
                 if ($value['id_currency'] == $cart->id_currency) {
                     $actual_currency = $value['iso_code'];
                 }
             }
             if ($currency != $actual_currency) {
                 $currency = $actual_currency;
             }
             $context->smarty->assign(array('status_error' => '200', 'cart_id' => $cart->id, 'currency' => $currency, 'amount' => $cart->getOrderTotal(true, Cart::BOTH)));
             // Tpl will load a form that will store those infomations.
             $card_str = Configuration::get('HIPAY_ALLOWED_CARDS');
             $selection_cards = array('american-express' => $hipay->l('American Express'), 'bcmc' => $hipay->l('Bancontact / Mister Cash'), 'cb' => $hipay->l('Carte Bancaire'), 'maestro' => $hipay->l('Maestro'), 'mastercard' => $hipay->l('MasterCard'), 'visa' => $hipay->l('Visa'));
             $cart_arr = explode(',', $card_str);
             $carte = array();
             foreach ($cart_arr as $key => $value) {
                 foreach ($selection_cards as $key1 => $value1) {
                     if ($key1 && $value == $key1) {
                         $carte[$key1] = $value1;
                     }
                 }
             }
             $context->smarty->assign(array('cartes' => $carte));
             $tokens = HipayToken::getTokens($cart->id_customer);
             //
             if (isset($tokens['0'])) {
                 $token_display = 'true';
             } else {
                 $token_display = 'false';
             }
             $allow_memorize = HipayClass::getShowMemorization();
             if (_PS_VERSION_ >= '1.6') {
                 $show_breadcrumb = false;
             } else {
                 $show_breadcrumb = true;
             }
             $context->smarty->assign(array('token_display' => $token_display, 'allow_memorize' => $allow_memorize, 'show_breadcrumb' => $show_breadcrumb, 'tokens' => $tokens));
             $payment_tpl = 'payment_execution_api.tpl';
             break;
         case 3:
             $local_card = tools::getValue('localcardToken');
             $data = HipayApi::getApiData($cart, null, null, $local_card);
             if ($local_card == 'sofort-uberweisung' || $local_card == 'sisal' || $local_card == 'przelewy24' || $local_card == 'webmoney' || $local_card == 'yandex' || $local_card == 'paypal') {
                 $data['payment_product'] = $local_card;
                 unset($data['payment_product_list']);
                 unset($data['merchant_display_name']);
                 unset($data['css']);
                 $response = $this->restApi('order', $data);
             } else {
                 $response = $this->restApi('hpayment', $data);
             }
             if ($response == false) {
                 // Wrong response, redirect to page order first step
                 Tools::redirect('index.php?controller=order&xer=2');
             }
             Tools::redirect($response->forwardUrl);
             break;
         case 4:
             // Use $duplicate_status_msg to display msg err
             if (_PS_VERSION_ >= '1.6') {
                 $show_breadcrumb = false;
             } else {
                 $show_breadcrumb = true;
             }
             $context->smarty->assign(array('duplicate_status_msg' => $duplicate_status_msg, 'show_breadcrumb' => $show_breadcrumb));
             $payment_tpl = 'payment_cart_duplicate.tpl';
             break;
         case 0:
         default:
             // Dedicated page
             // NO TPL NEEDED, will redirect to response forwardURL
             if (Tools::isSubmit('localcardToken') && tools::getValue('localcardToken')) {
                 $local_card = tools::getValue('localcardToken');
             } else {
                 $local_card = null;
             }
             $data = HipayApi::getApiData($cart, null, null, $local_card);
             $response = $this->restApi('hpayment', $data);
             if ($response == false) {
                 // Wrong response, redirect to page order first step
                 Tools::redirect('index.php?controller=order&xer=2');
             }
             Tools::redirect($response->forwardUrl);
             break;
     }
     $this->setTemplate($payment_tpl);
 }