public function payment()
 {
     if (!$this->active) {
         return;
     }
     global $cart;
     $id_currency = (int) $this->getModuleCurrency($cart);
     // If the currency is forced to a different one than the current one, then the cart must be updated
     if ($cart->id_currency != $id_currency) {
         if (Db::getInstance()->execute('UPDATE ' . _DB_PREFIX_ . 'cart SET id_currency = ' . (int) $id_currency . ' WHERE id_cart = ' . (int) $cart->id)) {
             $cart->id_currency = $id_currency;
         }
     }
     $currency = new Currency($id_currency);
     $language = new Language($cart->id_lang);
     $customer = new Customer($cart->id_customer);
     require_once dirname(__FILE__) . '/mapi/mapi_package.php';
     $hipayAccount = Configuration::get('HIPAY_ACCOUNT_' . $currency->iso_code);
     $hipayPassword = Configuration::get('HIPAY_PASSWORD_' . $currency->iso_code);
     $hipaySiteId = Configuration::get('HIPAY_SITEID_' . $currency->iso_code);
     $hipaycategory = Configuration::get('HIPAY_CATEGORY_' . $currency->iso_code);
     $paymentParams = new HIPAY_MAPI_PaymentParams();
     $paymentParams->setLogin($hipayAccount, $hipayPassword);
     $paymentParams->setAccounts($hipayAccount, $hipayAccount);
     // EN_us is not a standard format, but that's what Hipay uses
     if (isset($language->language_code)) {
         $paymentParams->setLocale($this->formatLanguageCode($language->language_code));
     } else {
         $paymentParams->setLocale(Tools::strtolower($language->iso_code) . '_' . Tools::strtoupper($language->iso_code));
     }
     $paymentParams->setMedia('WEB');
     $paymentParams->setRating(Configuration::get('HIPAY_RATING'));
     $paymentParams->setPaymentMethod(HIPAY_MAPI_METHOD_SIMPLE);
     $paymentParams->setCaptureDay(HIPAY_MAPI_CAPTURE_IMMEDIATE);
     $paymentParams->setCurrency(Tools::strtoupper($currency->iso_code));
     $paymentParams->setIdForMerchant($cart->id);
     $paymentParams->setMerchantSiteId($hipaySiteId);
     $paymentParams->setIssuerAccountLogin($this->context->customer->email);
     $paymentParams->setUrlCancel(Tools::getShopDomainSsl(true) . __PS_BASE_URI__ . 'order.php?step=3');
     $paymentParams->setUrlNok(Tools::getShopDomainSsl(true) . __PS_BASE_URI__ . 'order-confirmation.php?id_cart=' . (int) $cart->id . '&id_module=' . (int) $this->id . '&secure_key=' . $customer->secure_key);
     $paymentParams->setUrlOk(Tools::getShopDomainSsl(true) . __PS_BASE_URI__ . 'order-confirmation.php?id_cart=' . (int) $cart->id . '&id_module=' . (int) $this->id . '&secure_key=' . $customer->secure_key);
     $paymentParams->setUrlAck(Tools::getShopDomainSsl(true) . __PS_BASE_URI__ . 'modules/' . $this->name . '/validation.php?token=' . Tools::encrypt($cart->id . $cart->secure_key . Configuration::get('HIPAY_SALT')));
     $paymentParams->setBackgroundColor('#FFFFFF');
     if (!$paymentParams->check()) {
         return $this->l('[Hipay] Error: cannot create PaymentParams');
     }
     $item = new HIPAY_MAPI_Product();
     $item->setName($this->l('Cart'));
     $item->setInfo('');
     $item->setquantity(1);
     $item->setRef($cart->id);
     $item->setCategory($hipaycategory);
     $item->setPrice($cart->getOrderTotal());
     try {
         if (!$item->check()) {
             return $this->l('[Hipay] Error: cannot create "Cart" Product');
         }
     } catch (Exception $e) {
         return $this->l('[Hipay] Error: cannot create "Cart" Product');
     }
     $items = array($item);
     $order = new HIPAY_MAPI_Order();
     $order->setOrderTitle($this->l('Order total'));
     $order->setOrderCategory($hipaycategory);
     if (!$order->check()) {
         return $this->l('[Hipay] Error: cannot create Order');
     }
     try {
         $commande = new HIPAY_MAPI_SimplePayment($paymentParams, $order, $items);
     } catch (Exception $e) {
         return $this->l('[Hipay] Error:') . ' ' . $e->getMessage();
     }
     $xmlTx = $commande->getXML();
     $output = HIPAY_MAPI_SEND_XML::sendXML($xmlTx);
     $reply = HIPAY_MAPI_COMM_XML::analyzeResponseXML($output, $url, $err_msg, $err_keyword, $err_value, $err_code);
     if ($reply === true) {
         Tools::redirectLink($url);
     } else {
         global $smarty;
         include dirname(__FILE__) . '/../../header.php';
         $smarty->assign('errors', array('[Hipay] ' . strval($err_msg) . ' (' . $output . ')'));
         $_SERVER['HTTP_REFERER'] = Tools::getShopDomainSsl(true) . __PS_BASE_URI__ . 'order.php?step=3';
         $smarty->display(_PS_THEME_DIR_ . 'errors.tpl');
         include dirname(__FILE__) . '/../../footer.php';
     }
 }
 function createSinglePaymentDlg()
 {
     $params = new HIPAY_MAPI_PaymentParams();
     //The Hipay platform connection parameters. This is not the information used to connect to your Hipay
     //account, but the specific login and password used to connect to the payment platform.
     //The login is the ID of the hipay merchant account receiving the payment, and the password is
     //the « merchant password » set within your Hipay account (site info).
     $params->setLogin('22955', 'mypassword');
     // The amounts will be credited to account 22955, except the taxes which will be credited to account 23192
     $params->setAccounts(22955, 23192);
     // The payment interface will be in International French by default
     $params->setDefaultLang('de_DE');
     // The interface will be the Web interface
     $params->setMedia('WEB');
     //The order content is intended for people at least 16 years old.
     $params->setRating('16+');
     // This is a single payment
     $params->setPaymentMethod(HIPAY_MAPI_METHOD_SIMPLE);
     // The capture take place immediately
     $params->setCaptureDay(HIPAY_MAPI_CAPTURE_IMMEDIATE);
     // The amounts are expressed in Euros, this has to be the same currency as the merchant's account.
     $params->setCurrency('EUR');
     // The merchant-selected identifier for this order is REF6522
     $params->setIdForMerchant('REF6522');
     // Two data elements of type key=value are declared and will be returned to the merchant after the payment in the
     // notification data feed [C].
     $params->setMerchantDatas('id_client', '2000');
     $params->setMerchantDatas('credit', '10');
     // This order relates to the web site which the merchant declared in the Hipay platform.
     // The I.D. assigned to this website is '9'
     $params->setMerchantSiteId(9);
     // If the payment is accepted, the user will be redirected to this page
     $params->setURLOk('http://www.mywebsite.com/success.html ');
     // If the payment is refused, the user will be redirected to this page
     $params->setUrlNok('http://www.mywebsite.com/refused.html ');
     // If the user cancels the payment, he will be redirected to this page
     $params->setUrlCancel('http://www.mywebsite.com/cancel.html ');
     // The email address used to send the notifications, on top of the http notifications.
     // cf chap 19 : RECEIVING A RESULTS NOTIFICATION ABOUT A PAYMENT ACTION
     $params->setEmailAck('*****@*****.**');
     // The merchant's site will be notified of the result of the payment by a call to the script
     // "listen_hipay_notification.php"
     // cf chap 19 : RECEIVING A RESULTS NOTIFICATION ABOUT A PAYMENT ACTION
     $params->setUrlAck('http://www.mywebsite.com/listen_hipay_notification.php');
     // The background color of the interface will be #FFFFFF (default color recommended)
     $t = $params->setBackgroundColor('#FFFFFF');
     $t = $params->check();
     if (!$t) {
         echo "An error occurred while creating the paymentParams object";
         exit;
     }
     // ## Taxes ##
     // Tax at 19.6%
     $tax1 = new HIPAY_MAPI_Tax();
     $tax1->setTaxName('TVA (19.6)');
     $tax1->setTaxVal(19.6, true);
     $t = $tax1->check();
     if (!$t) {
         echo "An error occurred while creating a tax object";
         exit;
     }
     // Fixed tax of 3.50 euros
     $tax2 = new HIPAY_MAPI_Tax();
     $tax2->setTaxName('Taxe fixe');
     $tax2->setTaxVal(3.5, false);
     $t = $tax2->check();
     if (!$t) {
         echo "An error occurred while creating a tax object";
         exit;
     }
     // Tax at 5.5%
     $tax3 = new HIPAY_MAPI_Tax();
     $tax3->setTaxName('TVA (5.5)');
     $tax3->setTaxVal(5.5, true);
     $t = $tax3->check();
     if (!$t) {
         echo "An error occurred while creating a tax object";
         exit;
     }
     //		//## Affiliates ##
     //		// Affiliate who will receive 10% of all the items in the order
     //		$aff1 = new HIPAY_MAPI_Affiliate();
     //		$aff1->setCustomerId(331);
     //		$aff1->setAccountId(59074);
     //		$aff1->setValue(10.0,HIPAY_MAPI_TTARGET_ALL);
     //		$t=$aff1->check();
     //		if (!$t)
     //		{
     //			echo "An error occurred while creating an affiliate object";
     //			exit;
     //		}
     //		// Affiliate who will receive 15% of the amount of the products, insurance and delivery amounts
     //		$aff2 = new HIPAY_MAPI_Affiliate();
     //		$aff2->setCustomerId(332);
     //		$aff2->setAccountId(59075);
     //		$aff2->setValue(15.0,HIPAY_MAPI_TTARGET_ITEM | HIPAY_MAPI_TTARGET_INSURANCE | HIPAY_MAPI_TTARGET_SHIPPING);
     //		$t=$aff2->check();
     //		if (!$t)
     //		{
     //			echo "An error occurred while creating an affiliate object";
     //			exit;
     //		}
     // ##Products (order lines) ##
     // First product: 2 copies of a book at 12.5 Euros per unit on which two taxes are applied
     //(taxes $tax3 and $tax2)
     $item1 = new HIPAY_MAPI_Product();
     $item1->setName('The Fall of Hyperion');
     $item1->setInfo('Simmons, Dan – ISBN 0575076380');
     $item1->setquantity(2);
     $item1->setRef('JV005');
     $item1->setCategory(5);
     $item1->setPrice(12.5);
     $item1->setTax(array($tax3, $tax2));
     $t = $item1->check();
     if (!$t) {
         echo "An error occurred while creating a product object";
         exit;
     }
     // Second product: An example of a product at 2360 Euros, on which 3 taxes are applied
     //($tax1, $tax2 and $tax3)
     $item2 = new HIPAY_MAPI_Product();
     $item2->setName('PC Linux');
     $item2->setInfo('Computer 445');
     $item2->setquantity(1);
     $item2->setRef('PC445');
     $item2->setCategory(2);
     $item2->setPrice(2360);
     $item2->setTax(array($tax1, $tax2, $tax3));
     $t = $item2->check();
     if (!$t) {
         echo "An error occurred while creating a product object";
         exit;
     }
     // ## Order object ##
     $order = new HIPAY_MAPI_Order();
     // Order title and information
     $order->setOrderTitle('order on mywebsite.com');
     $order->setOrderInfo('best products');
     // The order category is 3 (Books)
     // Refer to annex 7 to see how to find out what category your site belongs to.
     $order->setOrderCategory(3);
     // The shipping costs are 1.50 Euros excluding taxes, and $tax1 is applied
     $order->setShipping(1.5, array($tax1));
     // The insurance costs are 2 Euros excluding taxes, and $tax1 and $tax3 are applied
     $order->setInsurance(2, array($tax3, $tax1));
     // The fixed costs are 2.25 Euros excluding taxes, and $tax3 is applied to this amount
     $order->setFixedCost(2.25, array($tax3));
     // This order has two affiliates, $aff1 and $aff2
     $order->setAffiliate(array($aff1, $aff2));
     $t = $order->check();
     if (!$t) {
         echo "An error occurred while creating a product object";
         exit;
     }
     // ## Payment object ##
     try {
         $payment = new HIPAY_MAPI_SimplePayment($params, $order, array($item1, $item2));
     } catch (Exception $e) {
         echo "Error" . $e->getMessage();
     }
     // ## XML representation of this order and sending the feed to the Hipay platform ##
     $xmlTx = $payment->getXML();
     $output = HIPAY_MAPI_SEND_XML::sendXML($xmlTx);
     // ## Processing the platform's response ##
     $r = HIPAY_MAPI_COMM_XML::analyzeResponseXML($output, &$url, &$err_msg);
     if ($r === true) {
         // The internet user is sent to the URL indicated by the Hipay platform
         //header('Location: '.$url) ;
         // echo $url;
         return $url;
     } else {
         // Une erreur est intervenue
         echo $err_msg;
         // $url_error = "/error.html";
         //header('Location: '.$url_error) ;
     }
 }
Exemple #3
0
 public function payment()
 {
     if (!$this->active) {
         return;
     }
     global $cart;
     $id_currency = (int) $this->getModuleCurrency($cart);
     // If the currency is forced to a different one than the current one, then the cart must be updated
     if ($cart->id_currency != $id_currency) {
         if (Db::getInstance()->execute('UPDATE ' . _DB_PREFIX_ . 'cart SET id_currency = ' . (int) $id_currency . ' WHERE id_cart = ' . (int) $cart->id)) {
             $cart->id_currency = $id_currency;
         }
     }
     $currency = new Currency($id_currency);
     $language = new Language($cart->id_lang);
     $customer = new Customer($cart->id_customer);
     require_once dirname(__FILE__) . '/mapi/mapi_package.php';
     $hipayAccount = Configuration::get('HIPAY_ACCOUNT_' . $currency->iso_code);
     $hipayPassword = Configuration::get('HIPAY_PASSWORD_' . $currency->iso_code);
     $hipaySiteId = Configuration::get('HIPAY_SITEID_' . $currency->iso_code);
     $hipaycategory = Configuration::get('HIPAY_CATEGORY_' . $currency->iso_code);
     $paymentParams = new HIPAY_MAPI_PaymentParams();
     $paymentParams->setLogin($hipayAccount, $hipayPassword);
     $paymentParams->setAccounts($hipayAccount, $hipayAccount);
     // EN_us is not a standard format, but that's what Hipay uses
     if (isset($language->language_code)) {
         $paymentParams->setLocale($this->formatLanguageCode($language->language_code));
     } else {
         $paymentParams->setLocale(Tools::strtolower($language->iso_code) . '_' . Tools::strtoupper($language->iso_code));
     }
     $paymentParams->setMedia('WEB');
     $paymentParams->setRating(Configuration::get('HIPAY_RATING'));
     $paymentParams->setPaymentMethod(HIPAY_MAPI_METHOD_SIMPLE);
     $paymentParams->setCaptureDay(HIPAY_MAPI_CAPTURE_IMMEDIATE);
     $paymentParams->setCurrency(Tools::strtoupper($currency->iso_code));
     $paymentParams->setIdForMerchant($cart->id);
     $paymentParams->setMerchantSiteId($hipaySiteId);
     $paymentParams->setIssuerAccountLogin(Context::getContext()->customer->email);
     if (version_compare(_PS_VERSION_, '1.5.0.0', '<')) {
         $paymentParams->setUrlCancel(Tools::getShopDomainSsl(true) . __PS_BASE_URI__ . 'order.php?step=3');
         $paymentParams->setUrlNok(Tools::getShopDomainSsl(true) . __PS_BASE_URI__ . 'order.php?step=3&hipay_error=1');
         $paymentParams->setUrlOk(Tools::getShopDomainSsl(true) . __PS_BASE_URI__ . 'order-confirmation.php?id_cart=' . (int) $cart->id . '&id_module=' . (int) $this->id . '&key=' . $customer->secure_key);
         $paymentParams->setUrlAck(Tools::getShopDomainSsl(true) . __PS_BASE_URI__ . 'modules/' . $this->name . '/validation.php?token=' . Tools::encrypt($cart->id . $cart->secure_key . Configuration::get('HIPAY_SALT')));
         #
         # Patch transfert du logo vers la page de paiement
         # Le 16/11/2015 par Johan PROTIN (jprotin at hipay dot com)
         #
         if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
             // Si le site utilise le protocol HTTPS alors on envoit l'URL avec HTTPS
             $logo_url = Tools::getShopDomainSsl(true) . _PS_IMG_ . Configuration::get('PS_LOGO');
             $paymentParams->setLogoUrl($logo_url);
         }
         # ------------------------------------------------
     } else {
         $paymentParams->setUrlCancel(Context::getContext()->link->getPageLink('order', null, null, array('step' => 3)));
         $paymentParams->setUrlNok(Context::getContext()->link->getPageLink('order', null, null, array('step' => 3, 'hipay_error' => 1)));
         $paymentParams->setUrlOk(Context::getContext()->link->getPageLink('order-confirmation', null, null, array('id_cart' => (int) $cart->id, 'id_module' => (int) $this->id, 'key' => $customer->secure_key)));
         $paymentParams->setUrlAck(Context::getContext()->link->getModuleLink('hipay', 'validation', array('token' => Tools::encrypt($cart->id . $cart->secure_key . Configuration::get('HIPAY_SALT')))));
         #
         # Patch transfert du logo vers la page de paiement
         # Le 16/11/2015 par Johan PROTIN (jprotin at hipay dot com)
         #
         if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
             // Si le site utilise le protocol HTTPS alors on envoit l'URL avec HTTPS
             $logo_url = $this->context->link->getMediaLink(_PS_IMG_ . Configuration::get('PS_LOGO'));
             $paymentParams->setLogoUrl($logo_url);
         }
         # ------------------------------------------------
     }
     $paymentParams->setBackgroundColor('#FFFFFF');
     if (!$paymentParams->check()) {
         return $this->l('[Hipay] Error: cannot create PaymentParams');
     }
     $item = new HIPAY_MAPI_Product();
     $item->setName($this->l('Cart'));
     $item->setInfo('');
     $item->setquantity(1);
     $item->setRef($cart->id);
     $item->setCategory($hipaycategory);
     $item->setPrice($cart->getOrderTotal());
     try {
         if (!$item->check()) {
             return $this->l('[Hipay] Error: cannot create "Cart" Product');
         }
     } catch (Exception $e) {
         return $this->l('[Hipay] Error: cannot create "Cart" Product');
     }
     $items = array($item);
     $order = new HIPAY_MAPI_Order();
     $order->setOrderTitle($this->l('Order total'));
     $order->setOrderCategory($hipaycategory);
     if (!$order->check()) {
         return $this->l('[Hipay] Error: cannot create Order');
     }
     try {
         $commande = new HIPAY_MAPI_SimplePayment($paymentParams, $order, $items);
     } catch (Exception $e) {
         return $this->l('[Hipay] Error:') . ' ' . $e->getMessage();
     }
     $xmlTx = $commande->getXML();
     $output = HIPAY_MAPI_SEND_XML::sendXML($xmlTx);
     $reply = HIPAY_MAPI_COMM_XML::analyzeResponseXML($output, $url, $err_msg, $err_keyword, $err_value, $err_code);
     if ($reply === true) {
         Tools::redirectLink($url);
     } else {
         if (version_compare(_PS_VERSION_, '1.5.0.0', '<')) {
             global $smarty;
             include dirname(__FILE__) . '/../../header.php';
             $smarty->assign('errors', array('[Hipay] ' . strval($err_msg) . ' (' . $output . ')'));
             $_SERVER['HTTP_REFERER'] = Tools::getShopDomainSsl(true) . __PS_BASE_URI__ . 'order.php?step=3';
             $smarty->display(_PS_THEME_DIR_ . 'errors.tpl');
             include dirname(__FILE__) . '/../../footer.php';
         } else {
             Context::getContext()->controller->errors[] = '[Hipay] ' . strval($err_msg) . ' (' . $output . ')';
             $_SERVER['HTTP_REFERER'] = Context::getContext()->link->getPageLink('order', true, null, array('step' => 3));
         }
     }
     return $reply;
 }
Exemple #4
0
    public function payment()
    {
        global $cookie, $cart;
        $id_currency = (int) Db::getInstance()->getValue('SELECT id_currency FROM `' . _DB_PREFIX_ . 'module_currency` WHERE id_module = ' . (int) $this->id);
        if (!$id_currency or $id_currency == -2) {
            $id_currency = Configuration::get('PS_CURRENCY_DEFAULT');
        } elseif ($id_currency == -1) {
            $id_currency = $cart->id_currency;
        }
        if ($cart->id_currency != $id_currency) {
            if (Db::getInstance()->execute('UPDATE ' . _DB_PREFIX_ . 'cart SET id_currency = ' . (int) $id_currency . ' WHERE id_cart = ' . (int) $cart->id)) {
                $cart->id_currency = $id_currency;
            }
        }
        $currency = new Currency($id_currency);
        $language = new Language($cart->id_lang);
        $customer = new Customer($cart->id_customer);
        $carrier = new Carrier($cart->id_carrier, $cart->id_lang);
        $id_zone = Db::getInstance()->getValue('SELECT id_zone FROM ' . _DB_PREFIX_ . 'address a INNER JOIN ' . _DB_PREFIX_ . 'country c ON a.id_country = c.id_country WHERE id_address = ' . (int) $cart->id_address_delivery);
        // Define extracted from mapi/mapi_defs.php
        define('HIPAY_GATEWAY_URL', 'https://' . ($this->prod ? '' : 'test.') . 'payment.hipay.com/order/');
        require_once dirname(__FILE__) . '/mapi/mapi_package.php';
        $paymentParams = new HIPAY_MAPI_PaymentParams();
        $paymentParams->setLogin(Configuration::get('HIPAY_ACCOUNT'), Configuration::get('HIPAY_PASSWORD'));
        $paymentParams->setAccounts(Configuration::get('HIPAY_ACCOUNT'), Configuration::get('HIPAY_TAX_ACCOUNT') ? Configuration::get('HIPAY_TAX_ACCOUNT') : Configuration::get('HIPAY_ACCOUNT'));
        $paymentParams->setDefaultLang(strtolower($language->iso_code) . '_' . strtoupper($language->iso_code));
        $paymentParams->setMedia('WEB');
        $paymentParams->setRating(Configuration::get('HIPAY_RATING'));
        $paymentParams->setPaymentMethod(HIPAY_MAPI_METHOD_SIMPLE);
        $paymentParams->setCaptureDay(HIPAY_MAPI_CAPTURE_IMMEDIATE);
        $paymentParams->setCurrency(strtoupper($currency->iso_code));
        $paymentParams->setIdForMerchant($cart->id);
        $paymentParams->setMerchantSiteId(Configuration::get('HIPAY_SITEID'));
        $paymentParams->setUrlCancel(Tools::getHttpHost(true, true) . __PS_BASE_URI__ . 'order.php?step=3');
        $paymentParams->setUrlNok(Tools::getHttpHost(true, true) . __PS_BASE_URI__ . 'order-confirmation.php?id_cart=' . (int) $cart->id . '&amp;id_module=' . (int) $this->id . '&amp;secure_key=' . $customer->secure_key);
        $paymentParams->setUrlOk(Tools::getHttpHost(true, true) . __PS_BASE_URI__ . 'order-confirmation.php?id_cart=' . (int) $cart->id . '&amp;id_module=' . (int) $this->id . '&amp;secure_key=' . $customer->secure_key);
        $paymentParams->setUrlAck(Tools::getHttpHost(true, true) . __PS_BASE_URI__ . 'modules/' . $this->name . '/validation.php');
        $paymentParams->setBackgroundColor('#FFFFFF');
        if (!$paymentParams->check()) {
            return $this->l('[Hipay] Error: cannot create PaymentParams');
        }
        $taxes = array();
        $result = Db::getInstance()->executeS('
		SELECT DISTINCT t.id_tax, tl.name, t.rate
		FROM ' . _DB_PREFIX_ . 'cart_product cp
		INNER JOIN ' . _DB_PREFIX_ . 'product p ON cp.id_product = p.id_product
		INNER JOIN ' . _DB_PREFIX_ . 'tax t ON p.id_tax = t.id_tax
		INNER JOIN ' . _DB_PREFIX_ . 'tax_lang tl ON tl.id_tax = t.id_tax AND tl.id_lang = ' . (int) $cookie->id_lang . '
		WHERE cp.id_cart = ' . (int) $cart->id . '
		UNION
		SELECT t2.id_tax, tl2.name, t2.rate
		FROM ' . _DB_PREFIX_ . 'cart c
		INNER JOIN ' . _DB_PREFIX_ . 'carrier ca ON c.id_carrier = ca.id_carrier
		INNER JOIN ' . _DB_PREFIX_ . 'tax t2 ON ca.id_tax = t2.id_tax
		INNER JOIN ' . _DB_PREFIX_ . 'tax_lang tl2 ON tl2.id_tax = t2.id_tax AND tl2.id_lang = ' . (int) $cookie->id_lang . '
		WHERE c.id_cart = ' . (int) $cart->id);
        foreach ($result as $row) {
            $tax = new HIPAY_MAPI_Tax();
            $tax->setTaxName($row['name']);
            $tax->setTaxVal($row['rate']);
            if (!$tax->check()) {
                return $this->l('[Hipay] Error: cannot create Tax');
            }
            $taxes[$row['id_tax']] = $tax;
        }
        $items = array();
        foreach ($cart->getProducts($cookie->id_lang) as $product) {
            $item = new HIPAY_MAPI_Product();
            $item->setName($product['name']);
            $item->setInfo($product['reference']);
            $item->setquantity($product['cart_quantity']);
            $item->setRef($product['id_product'] . ($product['id_product_attribute'] ? '-' . $product['id_product_attribute'] : ''));
            $item->setCategory(Configuration::get('HIPAY_CATEGORY_' . (int) $product['id_category_default']) ? Configuration::get('HIPAY_CATEGORY_' . (int) $product['id_category_default']) : Configuration::get('HIPAY_CATEGORY'));
            $price = Product::getPriceStatic($product['id_product'], false, $product['id_product_attribute'], 2, NULL, false, true, $product['cart_quantity']);
            $item->setPrice($price);
            if (Tax::checkTaxZone($product['id_tax'], $id_zone)) {
                $item->setTax(array($taxes[$product['id_tax']]));
            }
            if (!$item->check()) {
                return $this->l('[Hipay] Error: cannot create Product') . ' (' . $product['id_product'] . ($product['id_product_attribute'] ? '-' . $product['id_product_attribute'] : '') . ')';
            }
            $items[] = $item;
        }
        foreach ($cart->getDiscounts() as $voucher) {
            // For the moment, if there is a couher you can't use hipay
            return;
            $item = new HIPAY_MAPI_Product();
            $item->setName($voucher['name']);
            $item->setInfo($voucher['description']);
            $item->setquantity(1);
            $item->setRef('voucher_' . $voucher['id_discount']);
            $item->setCategory(Configuration::get('HIPAY_CATEGORY'));
            $item->setPrice(-1 * $voucher['value_real']);
            if (!$item->check()) {
                return $this->l('[Hipay] Error: cannot create Voucher') . ' (' . $voucher['name'] . ')';
            }
            $items[] = $item;
        }
        $order = new HIPAY_MAPI_Order();
        $order->setOrderTitle(Configuration::get('PS_SHOP_NAME'));
        $order->setOrderCategory(Configuration::get('HIPAY_CATEGORY'));
        $price = $cart->getOrderShippingCost($carrier->id, false);
        $shippingTax = Tax::checkTaxZone($carrier->id_tax, $id_zone) ? array($taxes[$carrier->id_tax]) : array();
        $order->setShipping($price, $shippingTax);
        if (!$order->check()) {
            return $this->l('[Hipay] Error: cannot create Order');
        }
        try {
            $commande = new HIPAY_MAPI_SimplePayment($paymentParams, $order, $items);
        } catch (Exception $e) {
            return $this->l('[Hipay] Error:') . ' ' . $e->getMessage();
        }
        $xmlTx = $commande->getXML();
        //d(htmlentities($xmlTx));
        $output = HIPAY_MAPI_SEND_XML::sendXML($xmlTx);
        $reply = HIPAY_MAPI_COMM_XML::analyzeResponseXML($output, $url, $err_msg, $err_keyword, $err_value, $err_code);
        if ($reply === true) {
            Tools::redirectLink($url);
        } else {
            global $smarty;
            include dirname(__FILE__) . '/../../header.php';
            $smarty->assign('errors', array('[Hipay] ' . strval($err_msg)));
            $_SERVER['HTTP_REFERER'] = Tools::getHttpHost(true, true) . __PS_BASE_URI__ . 'order.php?step=3';
            $smarty->display(_PS_THEME_DIR_ . 'errors.tpl');
            include dirname(__FILE__) . '/../../footer.php';
        }
    }