<?php
class TpvController extends Controller {
public function actionShowError() {
echo "
<html>
<head>
<title>Results</title>
</head>
<body>
<table width=100% height=50%>
<tr>
<td>
<p>
<h2><center>Compruebe que todos los datos del formulario son correctos!!</center></h2>
</p>
</td>
</tr>
</table>
</body>
</html>\n";
}# End of function ShowError
public function actionShowForm() {
// Posted data
global $HTTP_POST_VARS;
// Valores constantes del comercio
$url_tpvv = 'https://sis-t.redsys.es:25443/sis/realizarPago';
$Ds_Merchant_Amount = '500';
$Ds_Merchant_Order = '123456789012';
$Ds_Merchant_MerchantCode = '306002981';
$Ds_Merchant_Currency = '978';
$Ds_Merchant_TransactionType = '0';
$Ds_Merchant_MerchantURL = 'http://sis-d5.redsys.es/sis/pruebaCom.jsp';
$Ds_Key = 'qwertyasdf0123456789';
$Ds_Merchant_Terminal = '001';
$name = 'Eflamencos';
$producto = 'Recarga de Créditos';
// Now, print the HTML script
echo "<html><head><title>Comercio Simulador</title></head>
<script language=JavaScript>
function calc() {
vent=window.open('','tpv','width=725,height=600,scrollbars=no,resizable=yes,status=yes,menubar=no,location=no');
document.forms[0].submit();}
</script>
<body bgcolor=white>
<form name=compra action=$url_tpvv method=post target=tpv>
<pre>
<table>
<tr><td>
<h2>Comercio de prueba.</h2>
</td></tr><tr><td>
Comercio: <font color=blue>$name</font>
</td></tr><tr><td>
Producto: <font color=blue>$producto</font>
</td></tr><tr><td>
URL del comercio: <font color=blue>$Ds_Merchant_MerchantURL</font>
</td></tr><tr><td>";
// Currency strings
if ($currency == "0978") {
echo "Moneda: <font color=blue>Euros</font>";
}
$signature = $Ds_Merchant_Amount + $Ds_Merchant_Order + $Ds_Merchant_MerchantCode + $Ds_Merchant_Currency + $Ds_Merchant_TransactionType + $Ds_Merchant_MerchantURL + $Ds_Key;
$Ds_Merchant_MerchantSignature = strtoupper(sha_1($signature));
echo "
<html>
<head>
</head>
<body>
<form action=$url_tpvv method=post target=tpv>
<table>
<tr>
<td>
<input type=hidden name=Ds_Merchant_Amount value=$Ds_Merchant_Amount />
</td>
</tr>
<tr>
<td>
<input type=hidden name=Ds_Merchant_Currency value=$Ds_Merchant_Currency />
</td>
</tr>
<tr>
<td>
<input type=hidden name=Ds_Merchant_Order value=$Ds_Merchant_Order />
</td>
</tr>
<tr>
<td>
<input type=hidden name=Ds_Merchant_MerchantCode value=$Ds_Merchant_MerchantCode />
</td>
</tr>
<tr>
<td>
<input type=hidden name=Ds_Merchant_Terminal value=$Ds_Merchant_Terminal>
</td>
</tr>
<tr>
<td>
<input type=hidden name=Ds_Merchant_TransactionType value=$Ds_Merchant_TransactionType>
</td>
</tr>
<tr>
<td>
<input type=hidden name=Ds_Merchant_MerchantURL value=$Ds_Merchant_MerchantURL />
</td>
</tr>
<tr>
<td>
<input type=hidden name=Ds_Merchant_MerchantName value=$name />
</td>
</tr>
<tr>
<td>
<input type=hidden name=Ds_Merchant_MerchantSignature value=$Ds_Merchant_MerchantSignature />
</td>
</tr>
<tr>
<td>
<a href='javascript:calc()'><img src='/tpvirtual.jpg' border=0 ALT='TPV Virtual'>asdas</a>
</td>
</tr>
</table>
</form>
</body>
</html>";
}# End of function ShowForm
public function actionIndex() {
$this -> render('index');
}
}
function sha1_str2blks_SHA1($str) {
$strlen_str = strlen($str);
$nblk = (($strlen_str + 8)>>6) + 1;
for ($i = 0; $i < $nblk * 16; $i++)
$blks[$i] = 0;
for ($i = 0; $i < $strlen_str; $i++) {
$blks[$i>>2] |= ord(substr($str, $i, 1))<<(24 - ($i % 4) * 8);
}
$blks[$i>>2] |= 0x80<<(24 - ($i % 4) * 8);
$blks[$nblk * 16 - 1] = $strlen_str * 8;
return $blks;
}
function sha1_safe_add($x, $y) {
$lsw = ($x & 0xFFFF) + ($y & 0xFFFF);
$msw = ($x>>16) + ($y>>16) + ($lsw>>16);
return ($msw<<16) | ($lsw & 0xFFFF);
}
function sha1_rol($num, $cnt) {
return ($num<<$cnt) | sha1_zeroFill($num, 32 - $cnt);
}
function sha1_zeroFill($a, $b) {
$bin = decbin($a);
$strlen_bin = strlen($bin);
$bin = $strlen_bin < $b ? 0 : substr($bin, 0, $strlen_bin - $b);
for ($i = 0; $i < $b; $i++)
$bin = '0' . $bin;
return bindec($bin);
}
function sha1_ft($t, $b, $c, $d) {
if ($t < 20)
return ($b & $c) | ((~$b) & $d);
if ($t < 40)
return $b ^ $c ^ $d;
if ($t < 60)
return ($b & $c) | ($b & $d) | ($c & $d);
return $b ^ $c ^ $d;
}
function sha1_kt($t) {
if ($t < 20)
return 1518500249;
if ($t < 40)
return 1859775393;
if ($t < 60)
return -1894007588;
return -899497514;
}
function sha_1($str, $raw_output = FALSE) {
if ($raw_output === TRUE)
return pack('H*', sha_1($str, FALSE));
$x = sha1_str2blks_SHA1($str);
$a = 1732584193;
$b = -271733879;
$c = -1732584194;
$d = 271733878;
$e = -1009589776;
$x_count = count($x);
for ($i = 0; $i < $x_count; $i += 16) {
$olda = $a;
$oldb = $b;
$oldc = $c;
$oldd = $d;
$olde = $e;
for ($j = 0; $j < 80; $j++) {
$w[$j] = ($j < 16) ? $x[$i + $j] : sha1_rol($w[$j - 3] ^ $w[$j - 8] ^ $w[$j - 14] ^ $w[$j - 16], 1);
$t = sha1_safe_add(sha1_safe_add(sha1_rol($a, 5), sha1_ft($j, $b, $c, $d)), sha1_safe_add(sha1_safe_add($e, $w[$j]), sha1_kt($j)));
$e = $d;
$d = $c;
$c = sha1_rol($b, 30);
$b = $a;
$a = $t;
}
$a = sha1_safe_add($a, $olda);
$b = sha1_safe_add($b, $oldb);
$c = sha1_safe_add($c, $oldc);
$d = sha1_safe_add($d, $oldd);
$e = sha1_safe_add($e, $olde);
}
return sprintf('%08x%08x%08x%08x%08x', $a, $b, $c, $d, $e);
}