public function hookPayment($params) { global $smarty, $cookie; if (!$this->active) { return; } // Verify if customer has memorized tokens // $cart = $this->context->cart; // v1.5 $cart = new Cart((int) $cookie->id_cart); $tokens = HipayToken::getTokens($cart->id_customer); // Retrieve list of tokens if (isset($tokens['0'])) { $token_display = 'true'; } else { $token_display = 'false'; } // Verify if systems should display memorized tokens $allow_memorize = HipayClass::getShowMemorization(); // If both are true, activate additional info to allow payment via existing token if ($allow_memorize == 'true') { $currency_array = $this->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; } $smarty->assign(array('cart_id' => $cart->id, 'currency' => $currency, 'amount' => $cart->getOrderTotal(true, Cart::BOTH))); } // Create dynamic payment button $card_str = Configuration::get('HIPAY_ALLOWED_CARDS'); $cart_arr = explode(',', $card_str); $card_currency = Configuration::get('HIPAY_CURRENCY_CARDS'); if (Tools::strlen($card_currency) > 3) { $currency_array = $this->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']; } } $card_currency_arr = explode(',', Tools::substr($card_currency, 1, -1)); foreach ($card_currency_arr as $key => $value) { foreach ($cart_arr as $cardkey => $cardvalue) { if ($value == '"' . $actual_currency . '-' . $cardvalue . '"') { $card_curr_val[$cardvalue] = true; } } } } else { foreach ($cart_arr as $cardkey => $cardvalue) { $card_curr_val[$cardvalue] = true; } } $btn_image = ''; $card_currency_ok = '0'; $payment_product_list_upd = ''; $count_ccards = 0; foreach ($cart_arr as $key => $value) { if ($value == 'visa' && $card_curr_val['visa']) { $btn_image .= '<img class= "hipay_method" src="' . _MODULE_DIR_ . $this->name . '/img/visa_small.png" alt="Visa" />'; $card_currency_ok = '1'; $payment_product_list_upd .= 'visa,'; $count_ccards++; } if ($value == 'mastercard' && $card_curr_val['mastercard']) { $btn_image .= '<img class= "hipay_method" src="' . _MODULE_DIR_ . $this->name . '/img/mc_small.png" alt="MasterCard" />'; $card_currency_ok = '1'; $payment_product_list_upd .= 'mastercard,'; $count_ccards++; } if ($value == 'american-express' && $card_curr_val['american-express']) { $btn_image .= '<img class= "hipay_method" src="' . _MODULE_DIR_ . $this->name . '/img/amex_small.png" alt="American Express" />'; $card_currency_ok = '1'; $payment_product_list_upd .= 'american-express,'; $count_ccards++; } if ($value == 'bcmc' && $card_curr_val['bcmc']) { $btn_image .= '<img class= "hipay_method" src="' . _MODULE_DIR_ . $this->name . '/img/bcmc_small.png" alt="Bancontact / Mister Cash" />'; $card_currency_ok = '1'; $payment_product_list_upd .= 'bcmc,'; $count_ccards++; } if ($value == 'cb' && $card_curr_val['cb']) { $btn_image .= '<img class= "hipay_method" src="' . _MODULE_DIR_ . $this->name . '/img/cb_small.png" alt="CB" />'; $card_currency_ok = '1'; $payment_product_list_upd .= 'cb,'; $count_ccards++; } if ($value == 'maestro' && $card_curr_val['maestro']) { $btn_image .= '<img class= "hipay_method" src="' . _MODULE_DIR_ . $this->name . '/img/maestro_small.png" alt="Maestro" />'; $card_currency_ok = '1'; $payment_product_list_upd .= 'maestro,'; $count_ccards++; } } // Assign smarty variables $smarty->assign(array('token_display' => $token_display, 'allow_memorize' => $allow_memorize, 'tokens' => $tokens, 'payment_mode' => Configuration::get('HIPAY_PAYMENT_MODE'), 'PS_VERSION' => _PS_VERSION_, 'btn_image' => $btn_image, 'card_currency_ok' => $card_currency_ok, 'payment_product_list_upd' => $payment_product_list_upd, 'count_ccards' => $count_ccards)); // Assign paths $smarty->assign(array('this_path' => $this->_path, 'this_path_bw' => $this->_path, 'this_path_ssl' => Tools::getShopDomainSsl(true, true) . __PS_BASE_URI__ . 'modules/' . $this->name . '/')); // Local cards variables $localPayments = Tools::jsonDecode(Configuration::get('HIPAY_LOCAL_PAYMENTS')); $local_cards = $this->checkLocalCards(); // Retrieving images and storing in any array associate to the card code. $local_cards_img = array(); $local_cards_name = array(); $show_cards = array(); if (count($local_cards)) { $currency_array = $this->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']; } } foreach ($local_cards as $key => $value) { $local_cards_img[(string) $value->code] = (string) $value->image; $local_cards_name[(string) $value->code] = (string) $value->name; $show_cards[(string) $value->code] = 'false'; // Initialize to false // Assigning temporary code to variable $card_code = (string) $value->code; foreach ($value->currencies as $key => $value) { foreach ($value->iso_code as $key => $value) { if (Tools::strtoupper($actual_currency) == Tools::strtoupper((string) $value)) { $show_cards[$card_code] = 'true'; // Update to true } } } } } if (count($localPayments)) { $allow_local_cards = 'true'; } else { $allow_local_cards = 'false'; } $smarty->assign(array('allow_local_cards' => $allow_local_cards, 'local_cards_list' => $localPayments, 'local_cards_img' => $local_cards_img, 'local_cards_name' => $local_cards_name, 'show_cards' => $show_cards)); // modif One Page Checkout // Check if cart is in OPC $is_opc = Configuration::get('PS_ORDER_PROCESS_TYPE') ? 'true' : 'false'; $id_opc = ''; // Set id_opc to empty by default if ($is_opc == 'true') { $id_opc = 'OPC'; // This will update hidden field 'ioBB' to 'ioBBOPC' to prevent duplicate id } // Add generic smarty variables; $smarty->assign(array('id_opc' => $id_opc)); return $this->display(__FILE__, '1.4/views/templates/hook/payment.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'); } }
/** * * @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); }