Adapte su conexión con el TPV Virtual al nuevo tipo de firma basado en SHA- 256
Pasar pago de sha1 a sha256 en paginas asp. Librerias para sha 256 en asp no han hecho, asi que tendremos que pasar importe a pagina php y usar las librerias de redsys en php para sha 256, muy sencillitas y con pagina de ejemplo y todo
(api php de la pagina http://www.redsys.es/wps/portal/redsys/publica/areadeserviciosweb/descargaDeDocumentacionYEjecutables/!ut/p/a1/04_Sj9CPykssy0xPLMnMz0vMAfGjzOItHS1dDT3dDTz9g82MDDzD_HyNfPwdDfwDDIAKInErcHczJ06_AQ7gaEBIf7h-FFiJh7-zu6FRsIGXu7mTJVCfoZOTQbCPgYGRCVQBPieCFeBxQ0FuaIRBpqciAJbEr50!/dl5/d5/L2dBISEvZ0FBIS9nQSEh/ dentro de la carpeta que te descargas use la subcarpeta redsysHMAC256_API_PHP_5.2.0)
Tenemos la web alojada en ordenador de la empresa, la mejor solucion que encontré a esto es poner servidor web de windows IIS que funcione con paginas asp y php. De la pagina de asp pasa el importe del pago a una pagina php. En la pagina de php se utilizan las librerias que proporciona redsys que funcionan muy bien. Y desde alli se llama a la pagina del tpv virtual http://sis-d.redsys.es/sis/realizarPago.
para cualquier duda me podeis escribir
en equipo con windows7 64 bits
1) instalamos iis7, opciones world wide web services marcamos asp, .net extensibility, asp.net, cgi, isapi extensions, isapi filters
dentro iis7:
- default web site, asp, Enable parent paths poner a true
- grupo aplicaciones y configuracion avanzada -> habilitar aplicaciones 32 bits poner a true
la carpeta con base de datos y pagina fuera de carpeta inetpub, no dejar modificar la bd dentro de inetpub, la carpeta donde se ponga la pagina web no compartirla
se modifica el directorio de la pagina web por defecto
conectar asp con oracle -> c:\windows\syswow64\odbcad32.exe crear dsn sistema con oracle11ghome
en conexion de red en el equipo, conexion area local, propiedades, protocolo de internet version 4 (tcp/ipv4) ponemos la ip fija y el puerto de enlace. En el router se dice en que ip de la red local esta alojada la pagina web
firewall desactivado
asi ya tenemos un servidor de pag web asp en el equipo, se puede probar desde cualquier otro ord fuera de la red local
2) instalamos php
descarga php-5.6....zip
se descomprime y se cambia el nombre a la carpeta por c:\php
php.ini-production se renombra cono php.ini
en ese archivo se quita comentario ";" de la linea extension_dir y a esa linea se añade ";c:\php\ext"
se cambia 4 lineas
cgi.force_redirect=0
cgi.fix_pathinfo=1
fastcgi.impersonate=1
fastcgi.logging=0
en iis7 hay que cambiar lo siguiente
- asignaciones de controlador - agregar asignacion de modulo
*.php
modulo fastcgimodule
c:\php\php-cgi.exe
php_via_fastcgi
boton solicitar restricciones: invocar controlador solo si la solicitud se asigna a un archivo o carpeta
asi ya tenemos un servidor de pag web asp y php en el equipo, se puede probar desde cualquier otro ord fuera de la red local
3)
a) pagina web asp clasico pasa importe a pag php
<%
Dim Ds_Merchant_Amount
Ds_Merchant_Amount=700
cadena="<form method='post' name='compra' action='ejemploGeneraPet.php' >" & VBCrLf
cadena = cadena& "<input type=HIDDEN name=importe value=" & Ds_Merchant_Amount & ">" & VBCrLf
cadena = cadena& "</form>" & VBCrLf
response.write cadena
%>
<script>document.forms["compra"].submit();</script>
<%
%>
b) pag php que recibe importe y hace peticion al tpv virtual
<?php
echo "Pasarela de pago Redsys";
// Se incluye la librería
include 'apiRedsys.php';
// Se crea Objeto
$miObj = new RedsysAPI;
// Valores de entrada
$fuc="333333333";
$terminal="1";
$moneda="978";
$trans="0";
$url="";
$urlOKKO="";
$id=time();
$amount=$_POST['importe'];
// Se Rellenan los campos
$miObj->setParameter("DS_MERCHANT_AMOUNT",$amount);
$miObj->setParameter("DS_MERCHANT_MERCHANTNAME","xxxxxxx");
$miObj->setParameter("DS_MERCHANT_ORDER",strval($id));
$miObj->setParameter("DS_MERCHANT_MERCHANTCODE",$fuc);
$miObj->setParameter("DS_MERCHANT_CURRENCY",$moneda);
$miObj->setParameter("DS_MERCHANT_TRANSACTIONTYPE",$trans);
$miObj->setParameter("DS_MERCHANT_TERMINAL",$terminal);
$miObj->setParameter("DS_MERCHANT_MERCHANTURL",$url);
$miObj->setParameter("DS_MERCHANT_URLOK",$urlOKKO);
$miObj->setParameter("DS_MERCHANT_URLKO",$urlOKKO);
//Datos de configuración
$version="HMAC_SHA256_V1";
$kc = 'xxxxxxxxxxxxxx';//Clave recuperada de CANALES
// Se generan los parámetros de la petición
$request = "";
$params = $miObj->createMerchantParameters();
$signature = $miObj->createMerchantSignature($kc);
//<form name="frm" action="http://sis-d.redsys.es/sis/realizarPago" method="POST" target="_blank">
?>
<html lang="es">
<head>
</head>
<body>
<form name="frm" action="https://sis.redsys.es/sis/realizarPago/utf-8" method="POST" >
<input type="hidden" name="Ds_SignatureVersion" value="<?php echo $version; ?>"/></br>
<input type="hidden" name="Ds_MerchantParameters" value="<?php echo $params; ?>"/></br>
<input type="hidden" name="Ds_Signature" value="<?php echo $signature; ?>"/></br>
<input type="submit" value="Enviar" >
</form>
<script>document.forms["frm"].submit();</script>
</body>
</html>
lunes, 23 de noviembre de 2015
lunes, 1 de junio de 2015
BDE ERROR $120D $210D
error de memoria
a) reinstalar bde
b) cambiar registro regedit
hkey_local_machine - software - Wow6432Node - borland - database engine - system - init
SharedMemoryLocation : 0x5BDE
SharedMemorySize : 4096
y reiniciar
a) reinstalar bde
b) cambiar registro regedit
hkey_local_machine - software - Wow6432Node - borland - database engine - system - init
SharedMemoryLocation : 0x5BDE
SharedMemorySize : 4096
y reiniciar
sábado, 23 de mayo de 2015
Hacer funcionar programas hechos con delphi 7 32 bits en Windows 7 64 bits
windows 7 64 bits -> instalar oracle 11 y delphi 7
Al final he podido instalando en win7 64bits, oracle 11 32 bits con compatibilidad
Creo odbc de la carpeta syswow67/odbcad32.exe que son los de 32 bits
y he conectado con BDE que era con lo que tenia hecho los programas en windows xp
Pasos para que funcionen en windows 7 64 bits programas de delphi7 32 bits hacer lo siguiente
a) en servidor
oracle 11g 32bits, instalar con compatibilidad
caracteres WE8ISO8859P1
(se instala 2 veces, la segunda vez funciona)
(poner a ese ordenador como ip fija la que tenga en ese momento, se pone en panel de control conexiones de redes, sino al apagarlo y volver a encender coge otra ip y ya no funciona oracle)
192.168.1.129:1158/em
listener 192.168.1.29 puerto 1522
tablespace
usuario dba cuota ilimitada tablespace <- pasar los datos
exp usuario/clave@bdgeneral file=c:\based.dmp owner=usuario
imp usuario/clave@bdgeneral file=c:\based.dmp fromuser=usuario touser=usuario
si delphi se conecta a oracle por odbc crear en
odbc c:\windows\syswow64\odbcad32.exe
servicios que se inician al reiniciar
oracledbconsoleBD1
oracleoradb11g_home2tnslistener
oracleserviceBD1
b) en cliente
cliente oracle 11g 32 bits, instalar con opcion "permisos adicionales"
administrador
configuracion de red
configuracion nombre servicio red local
BD1 192.168.1.29 (ip servidor) puerto 1522 (del listener)
BDE instalar con problemas de compatibilidad
Si nos les funciona escriban un comentario
Al final he podido instalando en win7 64bits, oracle 11 32 bits con compatibilidad
Creo odbc de la carpeta syswow67/odbcad32.exe que son los de 32 bits
y he conectado con BDE que era con lo que tenia hecho los programas en windows xp
Pasos para que funcionen en windows 7 64 bits programas de delphi7 32 bits hacer lo siguiente
a) en servidor
oracle 11g 32bits, instalar con compatibilidad
caracteres WE8ISO8859P1
(se instala 2 veces, la segunda vez funciona)
(poner a ese ordenador como ip fija la que tenga en ese momento, se pone en panel de control conexiones de redes, sino al apagarlo y volver a encender coge otra ip y ya no funciona oracle)
192.168.1.129:1158/em
listener 192.168.1.29 puerto 1522
tablespace
usuario dba cuota ilimitada tablespace <- pasar los datos
exp usuario/clave@bdgeneral file=c:\based.dmp owner=usuario
imp usuario/clave@bdgeneral file=c:\based.dmp fromuser=usuario touser=usuario
si delphi se conecta a oracle por odbc crear en
odbc c:\windows\syswow64\odbcad32.exe
servicios que se inician al reiniciar
oracledbconsoleBD1
oracleoradb11g_home2tnslistener
oracleserviceBD1
b) en cliente
cliente oracle 11g 32 bits, instalar con opcion "permisos adicionales"
administrador
configuracion de red
configuracion nombre servicio red local
BD1 192.168.1.29 (ip servidor) puerto 1522 (del listener)
BDE instalar con problemas de compatibilidad
Si nos les funciona escriban un comentario
miércoles, 20 de mayo de 2015
SQL ORACLE 11, Concatenar campo cadenas de la misma columna
sql oracle 11
Concatenar campo cadenas de la misma columna
tabla
1 hola
2 hola2
3 hola3
resultado de la consulta
hola, hola2, hola3
funcion de planetacodigo.com
CREATE OR REPLACE FUNCTION rowconcat(q IN VARCHAR2) RETURN VARCHAR2 IS
ret VARCHAR2(4000);
hold VARCHAR2(4000);
cur sys_refcursor;
BEGIN
OPEN cur FOR q;
LOOP
FETCH cur INTO hold;
EXIT WHEN cur%NOTFOUND;
IF ret IS NULL THEN
ret := hold;
ELSE
ret := ret || ',' || hold;
END IF;
END LOOP;
RETURN ret;
END;
consulta para usarla
select AR_CODIGO, OBS
from ARTICULO LEFT JOIN
( SELECT rowconcat('select trim(ods_tx1) from ordartsi where ods_codart LIKE 13029017 and (length(ods_tx1)>1)') OBS, '13029017' ART FROM DUAL) ON ART=AR_CODIGO
WHERE AR_CODIGO='13029017';
otra consulta mas sencilla
SELECT rowconcat('select trim(ods_tx1) from ordartsi where ods_codart LIKE 13029017 and (length(ods_tx1)>1)') FROM DUAL
Concatenar campo cadenas de la misma columna
tabla
1 hola
2 hola2
3 hola3
resultado de la consulta
hola, hola2, hola3
funcion de planetacodigo.com
CREATE OR REPLACE FUNCTION rowconcat(q IN VARCHAR2) RETURN VARCHAR2 IS
ret VARCHAR2(4000);
hold VARCHAR2(4000);
cur sys_refcursor;
BEGIN
OPEN cur FOR q;
LOOP
FETCH cur INTO hold;
EXIT WHEN cur%NOTFOUND;
IF ret IS NULL THEN
ret := hold;
ELSE
ret := ret || ',' || hold;
END IF;
END LOOP;
RETURN ret;
END;
consulta para usarla
select AR_CODIGO, OBS
from ARTICULO LEFT JOIN
( SELECT rowconcat('select trim(ods_tx1) from ordartsi where ods_codart LIKE 13029017 and (length(ods_tx1)>1)') OBS, '13029017' ART FROM DUAL) ON ART=AR_CODIGO
WHERE AR_CODIGO='13029017';
otra consulta mas sencilla
SELECT rowconcat('select trim(ods_tx1) from ordartsi where ods_codart LIKE 13029017 and (length(ods_tx1)>1)') FROM DUAL
Suscribirse a:
Entradas (Atom)