Buenos días, quiero aportar el código que programé para adaptar el módulo de pagos TPV de cuatrob ZhenIT para que funcione con la nueva plataforma de RedSys , convirtiendo cualquier moneda que tengas en tu Opencart a Euros(Es la única moneda que acepta el TPV de ING). Funciona con los TPV de cualquier banco 4b.
Considero que es muy útil. Estuve buscando algo similar durante mucho tiempo y como no encontré nada, pues me tocó realizarlo a mi.
Primeramente decir que el módulo de ZhenIT dejó de funcionarme cuando 4B cambió de plataforma a Redsys, por lo que tuve que adaptar el código al nuevo sistema. Otro problema que tuve fue que al solo aceptar Euros como monedas, mis clientes de otros países no podían utilizar el pago por TPV, por lo que tuve que crear un algoritmo que convertia cualquier moneda a Euros, basándose en la tabla currency de mi Opencart(Se ajusta a las monedas introducidas en el panel de Administración).
Solo hay que modificar el archivo /catalog/view/theme/default/payment/cuatrob.tpl , modificar los parámetros de este en función de la configuración de cada TPV y base de datos. En este caso está predeterminado que convierta la moneda predeterminada de la tienda (USD) a Euros, pero funciona para convertir cualquier moneda que quieras a Euros, o dejarlo en EUR para tiendas que funcione en Euros.
El código es :
<?php
$link = mysql_connect("localhost", "usuario_base_de_datos","clave_bbdd") or trigger_error(mysql_error(),E_USER_ERROR);
if (!isset($_SESSION)) {
session_start();
}
$url_tpvv='https://sis.redsys.es/sis/realizarPago';
$clave='clave_encriptada_tpv';
$name='nombre_comercio';
$code='codigo_comercio';
$terminal='001';
$order=$order;
$ds_Merchant_URLOK="url_tienda/4B_ZhenIT_ok.php";
$ds_Merchant_URLKO="url_tienda/4B_ZhenIT_nok.php";
$order_id=$this->session->data['order_id'];
$query1 = "select value from ".DB_DATABASE.".order_total where order_id='{$order_id}' and code='total' limit 1 ";
$result1 = mysql_query($query1,$link) or die(mysql_error());
$datos = mysql_fetch_array($result1);
$amount=round($datos['value']*100) ;
mysql_free_result($result1);
$moneda="EUR";
$from="USD";
$to=$moneda;
$query1 = "select value from ".DB_DATABASE.".currency where code='{$to}' limit 1";
$result1 = mysql_query($query1,$link) or die(mysql_error());
$datos = mysql_fetch_array($result1);
$multiplicador=round($datos['value'],3) ;
mysql_free_result($result1);
$amount=round($amount * $multiplicador);
$currency='978';
$transactionType='0';
$urlMerchant='url_tienda/index.php?route=payment/cuatrob/callback';
$message = $amount.$order.$code.$currency.$transactionType.$urlMerchant.$clave;
$signature = strtoupper(sha1($message));
$Ds_Merchant_ConsumerLanguage =2
?>
<form action="<?php echo $url_tpvv; ?>" method="post" id="payment">
<input type=hidden name=Ds_Merchant_Amount value="<?php echo $amount;?>">
<input type=hidden name=Ds_Merchant_Currency value="<?php echo $currency;?>">
<input type=hidden name=Ds_Merchant_Order value="<?php echo $order;?>">
<input type=hidden name=Ds_Merchant_MerchantCode value="<?php echo $code;?>">
<input type=hidden name=Ds_Merchant_Terminal value="<?php echo $terminal;?>">
<input type=hidden name=Ds_Merchant_TransactionType value="<?php echo $transactionType;?>">
<input type=hidden name=Ds_Merchant_MerchantURL value="<?php echo $urlMerchant;?>">
<input type=hidden name=ds_Merchant_URLOK value="<?php echo $ds_Merchant_URLOK;?>">
<input type=hidden name=ds_Merchant_URLKO value="<?php echo $ds_Merchant_URLKO;?>">
<input type=hidden name=Ds_Merchant_ConsumerLanguage value="<?php echo $Ds_Merchant_ConsumerLanguage;?>">
<input type=hidden name=Ds_Merchant_MerchantSignature value="<?php echo $signature;?>">
</form>
<div class="buttons">
<div class="right"><a id="button-confirm" class="button" onclick="$('#payment').submit();"><span><?php echo $button_confirm; ?></span></a></div>
</div>
Podéis verlo en funcionamiento en una de mis tiendas online : http://www.sexshoponline.biz
Espero que os resulte de utilidad
Considero que es muy útil. Estuve buscando algo similar durante mucho tiempo y como no encontré nada, pues me tocó realizarlo a mi.
Primeramente decir que el módulo de ZhenIT dejó de funcionarme cuando 4B cambió de plataforma a Redsys, por lo que tuve que adaptar el código al nuevo sistema. Otro problema que tuve fue que al solo aceptar Euros como monedas, mis clientes de otros países no podían utilizar el pago por TPV, por lo que tuve que crear un algoritmo que convertia cualquier moneda a Euros, basándose en la tabla currency de mi Opencart(Se ajusta a las monedas introducidas en el panel de Administración).
Solo hay que modificar el archivo /catalog/view/theme/default/payment/cuatrob.tpl , modificar los parámetros de este en función de la configuración de cada TPV y base de datos. En este caso está predeterminado que convierta la moneda predeterminada de la tienda (USD) a Euros, pero funciona para convertir cualquier moneda que quieras a Euros, o dejarlo en EUR para tiendas que funcione en Euros.
El código es :
<?php
$link = mysql_connect("localhost", "usuario_base_de_datos","clave_bbdd") or trigger_error(mysql_error(),E_USER_ERROR);
if (!isset($_SESSION)) {
session_start();
}
$url_tpvv='https://sis.redsys.es/sis/realizarPago';
$clave='clave_encriptada_tpv';
$name='nombre_comercio';
$code='codigo_comercio';
$terminal='001';
$order=$order;
$ds_Merchant_URLOK="url_tienda/4B_ZhenIT_ok.php";
$ds_Merchant_URLKO="url_tienda/4B_ZhenIT_nok.php";
$order_id=$this->session->data['order_id'];
$query1 = "select value from ".DB_DATABASE.".order_total where order_id='{$order_id}' and code='total' limit 1 ";
$result1 = mysql_query($query1,$link) or die(mysql_error());
$datos = mysql_fetch_array($result1);
$amount=round($datos['value']*100) ;
mysql_free_result($result1);
$moneda="EUR";
$from="USD";
$to=$moneda;
$query1 = "select value from ".DB_DATABASE.".currency where code='{$to}' limit 1";
$result1 = mysql_query($query1,$link) or die(mysql_error());
$datos = mysql_fetch_array($result1);
$multiplicador=round($datos['value'],3) ;
mysql_free_result($result1);
$amount=round($amount * $multiplicador);
$currency='978';
$transactionType='0';
$urlMerchant='url_tienda/index.php?route=payment/cuatrob/callback';
$message = $amount.$order.$code.$currency.$transactionType.$urlMerchant.$clave;
$signature = strtoupper(sha1($message));
$Ds_Merchant_ConsumerLanguage =2
?>
<form action="<?php echo $url_tpvv; ?>" method="post" id="payment">
<input type=hidden name=Ds_Merchant_Amount value="<?php echo $amount;?>">
<input type=hidden name=Ds_Merchant_Currency value="<?php echo $currency;?>">
<input type=hidden name=Ds_Merchant_Order value="<?php echo $order;?>">
<input type=hidden name=Ds_Merchant_MerchantCode value="<?php echo $code;?>">
<input type=hidden name=Ds_Merchant_Terminal value="<?php echo $terminal;?>">
<input type=hidden name=Ds_Merchant_TransactionType value="<?php echo $transactionType;?>">
<input type=hidden name=Ds_Merchant_MerchantURL value="<?php echo $urlMerchant;?>">
<input type=hidden name=ds_Merchant_URLOK value="<?php echo $ds_Merchant_URLOK;?>">
<input type=hidden name=ds_Merchant_URLKO value="<?php echo $ds_Merchant_URLKO;?>">
<input type=hidden name=Ds_Merchant_ConsumerLanguage value="<?php echo $Ds_Merchant_ConsumerLanguage;?>">
<input type=hidden name=Ds_Merchant_MerchantSignature value="<?php echo $signature;?>">
</form>
<div class="buttons">
<div class="right"><a id="button-confirm" class="button" onclick="$('#payment').submit();"><span><?php echo $button_confirm; ?></span></a></div>
</div>
Podéis verlo en funcionamiento en una de mis tiendas online : http://www.sexshoponline.biz
Espero que os resulte de utilidad
Programación Opencart | Desarrollo web
El mejor sitio dónde comprar vino online
Comprar vino online
Tienda online juguetes de adultos
Precios con IVA
Las copas de vino y sus tipos
Tienda de suplementos deportivos
Veo que en la carpeta que indicas tengo el módulo redsys.tpl con el siguiente código.
Me funcionaría si agrego el código que propones? Tengo la plataforma de ING y veo que da error cuando la gente quiere pagar en otra moneda.
Me funcionaría si agrego el código que propones? Tengo la plataforma de ING y veo que da error cuando la gente quiere pagar en otra moneda.
Code: Select all
<form action="<?php echo $action; ?>" method="post" id="payment">
<input type="hidden" name="Ds_Merchant_MerchantCode" value="<?php echo $merchantCode; ?>">
<input type="hidden" name="Ds_Merchant_Terminal" value="<?php echo $terminal; ?>">
<input type="hidden" name="Ds_Merchant_Amount" value="<?php echo $amount; ?>">
<input type="hidden" name="Ds_Merchant_Currency" value="<?php echo $currency; ?>">
<input type="hidden" name="Ds_Merchant_Order" value="<?php echo $order; ?>">
<input type="hidden" name="Ds_Merchant_ConsumerLanguage" value="<?php echo $language; ?>">
<input type="hidden" name="Ds_Merchant_TransactionType" value="<?php echo $transaction_type; ?>">
<input type="hidden" name="Ds_Merchant_MerchantURL" value="<?php echo $merchant_url; ?>">
<input type="hidden" name="Ds_Merchant_UrlOK" value="<?php echo $url_ok; ?>">
<input type="hidden" name="Ds_Merchant_UrlKO" value="<?php echo $url_ko; ?>">
<input type="hidden" name="Ds_Merchant_MerchantSignature" value="<?php echo $signature; ?>">
</form>
<div class="buttons">
<div class="right"><a id="button-confirm" class="button" onclick="$('#payment').submit();"><span><?php echo $button_confirm; ?></span></a></div>
</div>
Who is online
Users browsing this forum: No registered users and 3 guests