/**
  *
  * @see FrontController::postProcess()
  */
 public function postProcess()
 {
     $hipay = new HiPay_Tpp();
     // Acceptable return status for iframe :
     // Accept, decline, cancel and exception
     // Default value = exception
     $return_status = Tools::getValue("return_status", "exception");
     switch ($return_status) {
         case 'accept':
             $redirect_url = HipayClass::getRedirectionUrl(Tools::getShopDomainSsl(true, true) . __PS_BASE_URI__ . 'index.php?fc=module&module=' . $hipay->name . '&controller=accept');
             break;
         case 'decline':
             $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':
             $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>
         ');
 }
    /**
     *
     * @see FrontController::postProcess()
     */
    public function postProcess()
    {
        // Disconnect User from cart
        HipayClass::unsetCart();
        // block 3s because
        sleep(3);
        // récupération des informations en GET ou POST venant de la page de paiement
        $cart_id = Tools::getValue('orderId');
        $transac = Tools::getValue('reference');
        $context = Context::getContext();
        // --------------------------------------------------------------------------
        // vérification si les informations ne sont pas = à FALSE
        if (!$cart_id) {
            // récupération du dernier panier via son compte client
            $sql = 'SELECT `id_cart`
					FROM `' . _DB_PREFIX_ . 'cart`
					WHERE `id_customer` = ' . $context->customer->id . '
					ORDER BY date_upd DESC';
            $result = Db::getInstance()->getRow($sql);
            $cart_id = isset($result['id_cart']) ? $result['id_cart'] : false;
            if ($cart_id) {
                $objCart = new Cart((int) $cart_id);
            }
        } else {
            // load cart
            $objCart = new Cart((int) $cart_id);
        }
        // load order for id_order
        $order_id = Order::getOrderByCartId($cart_id);
        if ($order_id && !empty($order_id) && $order_id > 0) {
            // load transaction by id_order
            $sql = 'SELECT DISTINCT(op.transaction_id)
					FROM `' . _DB_PREFIX_ . 'order_payment` op
					INNER JOIN `' . _DB_PREFIX_ . 'orders` o ON o.reference = op.order_reference
					WHERE o.id_order = ' . $order_id;
            $result = Db::getInstance()->getRow($sql);
        }
        $transaction = isset($result['transaction_id']) ? $result['transaction_id'] : 0;
        $context->smarty->assign(array('id_order' => $order_id, 'total' => $objCart->getOrderTotal(true), 'transaction' => $transaction, 'currency' => $context->currency->iso_code, 'email' => $context->customer->email));
        $this->setTemplate('payment_accept.tpl');
    }
 /**
  *
  * @see FrontController::postProcess()
  */
 public function postProcess()
 {
     // Disconnect User from cart
     HipayClass::unsetCart();
     $this->setTemplate('payment_exception.tpl');
 }
 /**
  *
  * @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');
     }
 }