Category: Programación

Error Excel: Carácter xml no válido. Línea 2, columna XXXX

Hace poco me encontré un error ultra extraño a la hora de exportar datos a un archivo XLSX desde la base de datos. Estos datos se muestran en un sistema de gestión de datos y éste utiliza una librería de Excel que lo único que hace es por cada registro de un array guardarlo en una respectiva celda. Nada raro.

Hasta ahora todo funciona correctamente y no es un error de la librería ni mucho menos. El excel ha detectado que hay un carácter extraño entre todos los registros y directamente devuelve un error. Si lo descargo directamente de la base de datos con PHPMYADMIN no se ve ningún dato raro.

Cuando quise abrir el excel el error que me da es el siguiente:

Se han detectado errores en el archivo «C:\Users\XX\Desktop\Archivo.xlsx»

Excel ha completado la validación y reparación en nivel de archivo. Puede que se hayan reparado o descartado algunas partes de este libro.

Parte quitada: /xl/sharedStrings.xml parte con error de XML. (Cadenas) Carácter xml no válido. Línea 2, columna 8471.

Registros quitados: Información de celda de /xl/worksheets/sheet1.xml parte

Al leer esto me sonaba todo a chino y directamente busqué en google y en principio no encontré nada que me sirviera para reparar el problema ya que lo que quería era saber que registro es el que me estaba dando error.

Hasta que encontré una solución:

Hay algo que pocos saben (incluyendome a mi hasta ahora) y es que el formato XLSX es un archivo comprimido. Sabiendo esto ya sabes lo que viene 😉

Hacemos una copia del archivo dañado. Modificamos el archivo copiado y cambiamos la extensión a .zip y lo descomprimimos.

Lo que habíamos leído antes en el error ahora tiene sentido ya que podemos encontrar entre los archivos descomprimidos una carpeta llamada «xl» en el que se encuentra un archivo llamado «sharedStrings.xml».

Abrimos este archivo xml con el NotePad++ y utilizando las herramientas de búsqueda de línea (CTRL+G), elegimos la opción «Desplazamiento» y nos vamos a la línea donde nos ha dado el error, que en mi caso era la 8471.

Desplazamiento NotePad++

Cuando hagamos clic en «Ir» puede que no veas el cursor, lo mejor es moverte con las flechas de izquierda / derecha del teclado para ver donde está y desplazarnos de igual manera hasta encontrar algún carácter extraño. Suele estar marcado de alguna manera como en mi caso, aparecía un «null» en negrita lo que me dió la pista para entrar a la base de datos, revisar el dato y descubrir que había un salto de línea en ese registro.

Registro SharedStrings.xml

Como veréis no es un problema de programación, pero como desarrollador nos encontramos a veces con este tipo de situaciones en el que necesitamos ser resolutivos y muchas veces no encontramos por donde empezar. Espero le sirva a alguien ;).

Nueva línea en textarea (HTML, PHP)

Para crear un salto de línea en PHP en una variable de tipo STRING que estamos concatenando, simplemente añadiremos la función nativa de PHP: PHP_EOL (END OF LINE).

Por ejemplo:

$nombresParticipantes = '';

foreach ($participantes as $participante){

$nombresParticipantes .= $participante[‘nombre’].’  ‘ $participante[‘apellidos’].PHP_EOL;

}

<textarea><?php echo $nombresParticipantes ?></textarea>

Para añadir una nueva línea vía HTML utilizaremos el código html:
<textarea>Manuel Prieto &#13;&#10; Enrique Prieto</textarea>
Esto nos mostrará en el textarea un texto tipo listado:

Instalar Laravel 5.5 en 1and1

Para crear nuestro proyecto con Laravel en 1and1.com necesitamos revisar que nuestro servicio contratado cumple los requisitos mínimos.

  • PHP >= 7.0.0
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Mbstring PHP Extension
  • Tokenizer PHP Extension
  • XML PHP Extension

En principio la mayoría de estos requisitos los cumplimos. Pero puede ser que la versión de PHP no la tengamos bien configurada. Para ello sigue los pasos de Cambiar la Configuración de PHP en 1and1.

 

Una vez revisado estos puntos vamos a proceder a crear nuestra carpeta de proyecto. Simplemente puedes entrar con el Filezilla y crearla en el raíz o dentro de la carpeta clickandbuilds. No importa donde sea, lo importante es que recuerdes donde lo has creado.

Instalar Composer en 1and1

Nos conectaremos vía SSH con nuestras credenciales vía PUTTY. Las podemos encontrar en la misma sección de «Hosting» en el menú de 1and1 y suelen ser las mismas de acceso FTP.

Una vez dentro buscamos nuestra carpeta de proyecto e instalamos el composer con el siguiente comando:

curl -sS https://getcomposer.org/installer | /usr/bin/php7.1-cli

NOTA: Utilizo la versión 7.1 porque la 7.0 no se encontraba en mi directorio bin. Puedes comprobar si tienes esta versión instalada listando los archivos del directorio: ls -l /usr/bin/ | grep "php7"

Esto nos descargará el composer.phar que es un ejecutable de php para buscar las dependencias de nuestro proyecto.

Ahora ejecutamos el composer por primera vez: /usr/bin/php7.1-cli composer.phar

Para mantenernos actualizados podemos hacerlo con la opción selfupdate: /usr/bin/php7.1-cli composer.phar selfupdate

Crea una BBDD en 1and1

En el menú de la izquierda entramos a la pestaña de «Base de Daots Mysql». Las bases de datos se crean con un nombre que proporciona 1and1. No es personalizable, pero puedes añadir una descripción para diferenciarlas. Introduce tu contraseña y recuerda que esta debe ser lo más segura posible. 1and1 ya nos da un nivel de seguridad según la clave que introducimos.

El proceso de creación tardará unos minutos. Puedes ver el estado de creación en la lista de BBDD.

 

Crear Proyecto Laravel

Puedes crear tu proyecto Laravel en LOCAL (TU PC) o directamente en el servidor conectandonos vía SSH utilizando el composer.

Yo prefiero hacerlo desde LOCAL para trabajar en el entorno habitual de DESARROLLO y PRODUCCIÓN.   (Ver instalación)

Una vez instalado, súbelo a la carpeta de tu proyecto en 1and1 vía Filezilla.

Suponiendo que ya conoces el archivo de conexión .env de laravel, continuaremos con la modificación de éste.

Ya que utilizamos nuestra base de datos en MySql, buscamos la línea de conexión y modificaremos los datos con los que nos da 1and1 para conectarnos a nuestra BBDD de PRODUCCIÓN. Estos datos los puedes encontrar haciendo clic en el nombre de la bbdd dentro del listado.

DB_CONNECTION=mysql
DB_HOST=db709977146.db.1and1.com
DB_PORT=3306
DB_DATABASE=db709977146
DB_USERNAME=dbo709977146
DB_PASSWORD=»Password que has introducido al crearla«

Crear Dominio / Subdominio

Para probar que nuestro proyecto funciona tenemos que hacer que un dominio o subdominio apunte a nuestra carpeta del proyecto.

Entramos a la zona de dominios y buscamos el enlace para crear un subdominio.

 

Una vez se haya creado, entramos a la configuración del subdominio y hacemos clic en el enlace «Ajustar directorio de espacio web». Aquí nos mostrará las carpetas que tenemos en nuestro espacio web. Seleccionamos la de nuestro proyecto, buscamos la carpeta public y la seleccionamos. (Esta configuración también tardará lo suyo)

Si todo ha ido bien, al colocar el nombre de nuestro subdominio veremos que nos mostrará la página de inicio de nuestro nuevo proyecto Laravel.

Actualizar versión PHP en 1and1

Para cambiar la Versión PHP en 1and1 tenemos que logearnos con nuestro usuario y buscar en la sección de «MIS PRODUCTOS» del menú la opción de «Hosting«. Aquí buscamos en la sección de «Administrar espacio web» la opción de «Ajustes de PHP«.

Una vez adentro veremos nuestros productos contratados en un listado con los nombres de dominio. Vamos a seleccionar el que nos interesa y haciendo clic en el checkbox y continuaremos haciendo clic en Modificar versión PHP. Como podrás observar yo ya tengo la versión PHP7.0, pero esto es porque yo he seguido estos pasos previamente.

Ahora sólo nos queda utilizar la herramienta para cambiar nuestra versión de PHP. Veremos que tenemos la versión 5.6, 7.0, 7.1  y  7.2. Vamos a elegir la 7.0 porque es la versión más estable.

1&1 PHP Versión 1and1

Con esto ya tendríamos actualizada la versión de PHP en nuestro servicio contratado de 1and1.

Añadir Google Fonts en tu Página Web (CSS)

Todos hemos empezado creando páginas web con nuestras fuentes típicas: Arial, Times New Roman, Century Gothic, Verdana, etc... Estas son las llamadas fuentes seguras. Son accesibles desde cualquier navegador y no necesitan librerías externas para ser cargadas.

Hoy en día podemos encontrar varios recursos que nos facilitan dar un look personalizado a nuestra web instalando otros tipos de fuentes o tipografías.

Google Fonts es la más accesible y fiable. Nos da la posibilidad de utilizar filtros para encontrar el tipo de fuente que buscamos según las necesidades y el tipo de página web que estemos diseñando.

Hasta aquí todo bien, pero también hay que tener en cuenta el lado negativo. Al ser un recurso externo también nos penaliza el tiempo de carga de nuestra web. Lo recomendable es utilizar como máximo 3 fuentes diferentes: una para los títulos, otra para el texto de nuestra web y la última para textos que queremos resaltar o utilizar en casos especiales. Además, la homogeneidad es uno de los principios del diseño web y si empezamos a mezclar tipos de fuentes y tamaños estaremos infringiendo esta ley universal.

Instalar una fuente de Google Fonts es fácil. Utilizaremos como ejemplo la fuente ROBOTO y MODAK. La herramienta ya nos da información de como instalarlo. Lo haremos paso a paso:

INSTALACIÓN STANDARD

Añadiremos a nuestro html entre la etiqueta <head></head> este código:

<link href="https://fonts.googleapis.com/css?family=Modak|Roboto" rel="stylesheet">

INSTALACIÓN VÍA @IMPORT

Esta es la forma más recomendada de hacerlo. Insertamos en primera línea donde tengamos nuestro CSS el código generado:

@import url('https://fonts.googleapis.com/css?family=Modak|Roboto');

 

UTILIZACIÓN

Para el body utilizaremos la fuente ROBOTO:

body { font-family: 'Roboto', sans-serif; }

Para las etiquetas de títulos h1, h2 y h3 la fuente MODAK:

h1, h2, h3 {font-family: 'Modak', cursive;}

RESULTADO

Para los títulos:

Título H1, Título H2, Título H3

Para el body:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque a dictum erat. Nullam lobortis non metus eget ultrices. Phasellus commodo dictum purus sed fermentum.

WooCommerce My Account CSS

Es la primera vez que trabajo con WooCommerce. Hoy en día es la herramienta más completa a la hora de realizar una web de compras con WordPress. Es complejo pero tienes muchas utilidades y un sin fin de opciones.

En este caso se encuentra instalado como parte de un template llamado EduGate que se utiliza ofrecer cursos educacionales online. Es un template muy completo pero, como todos los templates, hay que dedicar tiempo a dejar un diseño limpio y dejar bien configurados los valores por defecto.

A la hora de configurar la visualización de la zona de usuarios me he encontrado con esto:

No sé si es algo habitual, pero buscando por internet WooCommerce My Account Css me he encontrado gente con el mismo problema.

Encontré un CSS que se adaptaba a lo que buscaba que era simplemente crear un menú de navegación sencillo. Le he dado otro aire y he añadido unas cuantas modificaciones más para poder visualizar de mejor manera el menú:

Mucho más descente para mi gusto 😉

Aquí dejo el CSS:


.section-padding {padding: 10px 0;}
@media only screen and (min-width: 769px) {
.woocommerce-account .woocommerce-MyAccount-navigation {width: 22%;}
.woocommerce-account .woocommerce-MyAccount-content {width: 75%;}
}
nav.woocommerce-MyAccount-navigation ul {
list-style-type: none;
padding-left: 0;
font-size: 1em;
line-height: 26px;
float:left;
width:100%;
margin:25px auto;
}
nav.woocommerce-MyAccount-navigation ul li {
padding: 8px 20px;
background-color: rgba(0,0,0,0.05);
border-bottom: 1px solid rgba(0,0,0,0.05);
float:left;
}
nav.woocommerce-MyAccount-navigation ul li.is-active {
background-color: rgba(0,0,0,0.1);
}
nav.woocommerce-MyAccount-navigation ul li.is-active a {
color: rgba(0,0,0,0.8); cursor: default;
}
nav.woocommerce-MyAccount-navigation ul li:not(.is-active):hover {
background-color: rgba(0,0,0,0.07);
}
.woocommerce .woocommerce-error, .sw-woocommerce .woocommerce-message, .woocommerce .woocommerce-message, .sw-woocommerce .woocommerce-error, .sw-woocommerce .woocommerce-info, .woocommerce .woocommerce-info{
float: left;
}
.woocommerce-error::before, .woocommerce-info::before, .woocommerce-message::before{
left: 0.5em;
}

Validación Cuenta IBAN PHP

El código IBAN sirve para identificar a nivel internacional una cuenta bancaria. Su nombre viene de las siglas en inglés de la norma IBAN (Internacional Bank Account Number), la cual nació para que los las entidades financieras pudieran automatizar fácilmente las transferencias entre bancos de la Unión Europea.

El código IBAN es un código que lleva 4 caracteres iniciales y, a continuación, el número de cuenta:

  • 4 caracteres iniciales: código del país (2 dígitos) + código de control (2 dígitos). Ejemplo: ES21 (código de país “ES” para España) + código de control (“21”).
  • Número de cuenta: 20 caracteres que identifican la cuenta. Ejemplo:1465 0100 72 2030876293.

VALIDACIÓN IBAN

Ejemplos Cuentas IBAN

Para gestionar perfectamente algunas validaciones necesitamos tener ejemplos concretos de algunos datos. A la hora de desarrollar la validación para el control de cuentas bancarias he utilizado estas cuentas de ejemplo:

España IBAN Ejemplo
Banco IBAN Entidad Oficina Digito Control Cuenta
CAIXABANK ES6621000418401234567891 1210 0418 40 1234567891
BANCO SANTANDER ES6000491500051234567892 0049 1500 05 1234567892
ABANCA CORPORACION BANCARIA ES9420805801101234567891 2080 5801 10 1234567891
BANCO DE CREDITO BALEAR ES9000246912501234567891 0024 6912 50 1234567891
BANCO ESPAÑOL DE CREDITO ES7100302053091234567895 0030 2053 09 1234567895
BANCO SANTANDER ES1000492352082414205416 0049 2352 08 2414205416
IBERCAJA BANCO ES1720852066623456789011 2085 2066 62 3456789011
Italia IBAN Ejemplo
IBAN Número de control BBAN Entidad Oficina Cuenta
IT60X0542811101000000123456 X 05428 11101 000000123456
IT86L0617501432000001134250 L 06175 01432 000001134250

Validar Tamaño y Tipo de Archivo Input File con HTML + Jquery

Validar tipo de archivo con HTML

Para validar el tipo de archivo que puede aceptar un Input File necesitaremos el atributo «accept» para que una vez se abra el dialogo para elegir el archivo se aplique un filtro para solo aceptar los archivos que añadamos en el atributo.


<input id="campoFile" accept="tipo_de_archivo|audio/*|video/*|image/*|media_type" name="archivo" type="file" value="" />

FILTROS NORMALMENTE UTILIZADOS:

AUDIO (.mp3, .wav, etc): accept=»audio/*»
IMAGES: accept=»image/gif,image/jpeg,image/jpg,image/png»
EXCEL 97-2003 (.xls): accept=»application/vnd.ms-excel»
EXCEL 2007+ (.xlsx): accept=»application/vnd.openxmlformats-officedocument.spreadsheetml.sheet»
PDF: accept=».pdf»
VIDEO (.avi, .mpg, .mpeg, .mp4): accept=»video/*»

Validar Tamaño y Extensión con Javascript y Jquery

Para validar el tamaño del archivo utilizaremos una función muy sencilla utilizando JQUERY antes de enviarlo por POST.

Prueba con las diferentes extensiones y cambia el código Javascript para ver los resultados:

Tarjetas de prueba iberCaja

 

Tarjetas de pruebas

Con el fin de que los comercios puedan comprobar el correcto funcionamiento de su aplicación, se ponen a disposición en el entorno de PRUEBAS las siguientes tarjetas:

Tarjeta: 5540500001000004 – Caducidad: AAAA12 (Diciembre del año en curso) – CVV2: 989

Tarjeta: 5020470001370055 – Caducidad: AAAA12 (Diciembre del año en curso) – CVV2: 989

Tarjeta: 5020080001000006 – Caducidad: AAAA12 (Diciembre del año en curso) – CVV2: 989

Tarjeta: 4507670001000009 – Caducidad: AAAA12 (Diciembre del año en curso) – CVV2: 989

AAAA será sustituido por el año en curso. Las tarjetas se renuevan anualmente. Transcurrido el año en curso, simplemente aumentar un año la fecha.

No existen tarjetas para probar en el entorno de producción, por lo que el comercio deberá probar con sus propias tarjetas y posteriormente anular la operación desde la consola de administración del TPV de Cecabank.

Códigos de respuesta en los TPV de Redsys

El sistmea de pago de RedSys nos devuelve códigos de respuesta según el tipo de incidencia que ocurre a la hora de pasar por la pasarela de pago. Ahora la encripatción de los terminales se ha actualizado en sha256 y estos son los códigos que nos podmeos encontrar.

Códigos de Error RedSys

SIS0429 Error en la versión enviada por el comercio en el parámetro Ds_SignatureVersion
SIS0430 Error al decodificar el parámetro Ds_MerchantParameters
SIS0431 Error del objeto JSON que se envía codificado en el parámetro Ds_MerchantParameters
SIS0432 Error FUC del comercio erróneo
SIS0433 Error Terminal del comercio erróneo
SIS0434 Error ausencia de número de pedido en la operación enviada por el comercio
SIS0435 Error en el cálculo de la firma

Códigos de respuesta restantes y de terminales basados en sha1


0102 Tarjeta en excepción transitoria o bajo sospecha de fraude.
0104 Operación no permitida para esa tarjeta o terminal.
0106 Intentos de PIN excedidos.
0116 Disponible Insuficiente.
0118 Tarjeta no Registrada.
0125 Tarjeta no efectiva.
0129 Código de seguridad (CVV2/CVC2) incorrecto.
0180 Tarjeta ajena al servicio.
0184 Error en la autenticación del titular.
0190 Denegación sin especificar motivo.
0191 Fecha de caducidad errónea.
0202 Tarjeta en excepción transitoria o bajo sospecha de fraude con retirada de tarjeta.
0904 Comercio no registrado en FUC.
0909 Error de sistema.
0912 Emisor no disponible.
0913 Pedido repetido.
0944 Sesión Incorrecta.
0950 Operación de devolución no permitida.
9064 Número de posiciones de la tarjeta incorrecto.
9078 No existe método de pago válido para esa tarjeta.
9093 Tarjeta no existente.
9094 Rechazo servidores internacionales.
9104 Comercio con “titular seguro” y titular sin clave de compra segura.
9218 El comercio no permite op. seguras por entrada /operaciones.
9253 Tarjeta no cumple el check-digit.
9256 El comercio no puede realizar preautorizaciones.
9257 Esta tarjeta no permite operativa de preautorizaciones.
9261 Operación detenida por superar el control de restricciones en la entrada al SIS.
9912 Emisor no disponible.
9913 Error en la confirmación que el comercio envía al TPV Virtual (solo aplicable en la opción de sincronización SOAP).
9914 Confirmación “KO” del comercio (solo aplicable en la opción de sincronización SOAP).
9915 A petición del usuario se ha cancelado el pago.
9928 Anulación de autorización en diferido realizada por el SIS (proceso batch).
9929 Anulación de autorización en diferido realizada por el comercio.
9997 Se está procesando otra transacción en SIS con la misma tarjeta.
9998 Operación en proceso de solicitud de datos de tarjeta.
9999 Operación que ha sido redirigida al emisor a autenticar.
SIS0007 Error al desmontar el XML de entrada.
SIS0008 Error falta Ds_Merchant_MerchantCode.
SIS0009 Error de formato en Ds_Merchant_MerchantCode.
SIS0010 Error falta Ds_Merchant_Terminal.
SIS0011 Error de formato en Ds_Merchant_Terminal.
SIS0014 Error de formato en Ds_Merchant_Order.
SIS0015 Error falta Ds_Merchant_Currency.
SIS0016 Error de formato en Ds_Merchant_Currency.
SIS0017 Error no se admiten operaciones en pesetas.
SIS0018 Error falta Ds_Merchant_Amount.
SIS0019 Error de formato en Ds_Merchant_Amount.
SIS0020 Error falta Ds_Merchant_MerchantSignature.
SIS0021 Error la Ds_Merchant_MerchantSignature viene vacía.
SIS0022 Error de formato en Ds_Merchant_TransactionType.
SIS0023 Error Ds_Merchant_TransactionType desconocido.
SIS0024 Error Ds_Merchant_ConsumerLanguage tiene mas de 3 posiciones.
SIS0025 Error de formato en Ds_Merchant_ConsumerLanguage.
SIS0026 Error No existe el comercio / terminal enviado.
SIS0027 Error Moneda enviada por el comercio es diferente a la que tiene asignada para ese terminal.
SIS0028 Error Comercio / terminal está dado de baja.
SIS0030 Error en un pago con tarjeta ha llegado un tipo de operación no valido.
SIS0031 Método de pago no definido.
SIS0033 Error en un pago con móvil ha llegado un tipo de operación que no es ni pago ni preautorización.
SIS0034 Error de acceso a la Base de Datos.
SIS0037 El número de teléfono no es válido.
SIS0038 Error en java.
SIS0040 Error el comercio / terminal no tiene ningún método de pago asignado.
SIS0041 Error en el cálculo de la firma de datos del comercio.
SIS0042 La firma enviada no es correcta.
SIS0043 Error al realizar la notificación on-line.
SIS0046 El BIN de la tarjeta no está dado de alta.
SIS0051 Error número de pedido repetido.
SIS0054 Error no existe operación sobre la que realizar la devolución.
SIS0055 Error no existe más de un pago con el mismo número de pedido.
SIS0056 La operación sobre la que se desea devolver no está autorizada.
SIS0057 El importe a devolver supera el permitido.
SIS0058 Inconsistencia de datos, en la validación de una confirmación.
SIS0059 Error no existe operación sobre la que realizar la devolución.
SIS0060 Ya existe una confirmación asociada a la preautorización.
SIS0061 La preautorización sobre la que se desea confirmar no está autorizada.
SIS0062 El importe a confirmar supera el permitido.
SIS0063 Error. Número de tarjeta no disponible.
SIS0064 Error. El número de tarjeta no puede tener más de 19 posiciones.
SIS0065 Error. El número de tarjeta no es numérico.
SIS0066 Error. Mes de caducidad no disponible.
SIS0067 Error. El mes de la caducidad no es numérico.
SIS0068 Error. El mes de la caducidad no es válido.
SIS0069 Error. Año de caducidad no disponible.
SIS0070 Error. El Año de la caducidad no es numérico.
SIS0071 Tarjeta caducada.
SIS0072 Operación no anulable.
SIS0074 Error falta Ds_Merchant_Order.
SIS0075 Error el Ds_Merchant_Order tiene menos de 4 posiciones o más de 12.
SIS0076 Error el Ds_Merchant_Order no tiene las cuatro primeras posiciones numéricas.
SIS0078 Método de pago no disponible.
SIS0079 Error al realizar el pago con tarjeta.
SIS0081 La sesión es nueva, se han perdido los datos almacenados.
SIS0084 El valor de Ds_Merchant_Conciliation es nulo.
SIS0085 El valor de Ds_Merchant_Conciliation no es numérico.
SIS0086 El valor de Ds_Merchant_Conciliation no ocupa 6 posiciones.
SIS0089 El valor de Ds_Merchant_ExpiryDate no ocupa 4 posiciones.
SIS0092 El valor de Ds_Merchant_ExpiryDate es nulo.
SIS0093 Tarjeta no encontrada en la tabla de rangos.
SIS0094 La tarjeta no fue autenticada como 3D Secure.
SIS0097 Valor del campo Ds_Merchant_CComercio no válido.
SIS0098 Valor del campo Ds_Merchant_CVentana no válido.
SIS0112 Error. El tipo de transacción especificado en Ds_Merchant_Transaction_Type no esta permitido.
SIS0113 Excepción producida en el servlet de operaciones.
SIS0114 Error, se ha llamado con un GET en lugar de un POST.
SIS0115 Error no existe operación sobre la que realizar el pago de la cuota.
SIS0116 La operación sobre la que se desea pagar una cuota no es una operación válida.
SIS0117 La operación sobre la que se desea pagar una cuota no está autorizada.
SIS0118 Se ha excedido el importe total de las cuotas.
SIS0119 Valor del campo Ds_Merchant_DateFrecuency no válido.
SIS0120 Valor del campo Ds_Merchant_CargeExpiryDate no válido.
SIS0121 Valor del campo Ds_Merchant_SumTotal no válido.
SIS0122 Valor del campo Ds_merchant_DateFrecuency o Ds_Merchant_SumTotal tiene formato incorrecto.
SIS0123 Se ha excedido la fecha tope para realizar transacciones.
SIS0124 No ha transcurrido la frecuencia mínima en un pago recurrente sucesivo.
SIS0132 La fecha de Confirmación de Autorización no puede superar en más de 7 días a la de Preautorización.
SIS0133 La fecha de Confirmación de Autenticación no puede superar en mas de 45 días a la de Autenticación Previa.
SIS0139 Error el pago recurrente inicial está duplicado.
SIS0142 Tiempo excedido para el pago.
SIS0197 Error al obtener los datos de cesta de la compra en operación tipo pasarela.
SIS0198 Error el importe supera el límite permitido para el comercio.
SIS0199 Error el número de operaciones supera el límite permitido para el comercio.
SIS0200 Error el importe acumulado supera el límite permitido para el comercio.
SIS0214 El comercio no admite devoluciones.
SIS0216 Error Ds_Merchant_CVV2 tiene mas de 3/4 posiciones.
SIS0217 Error de formato en Ds_Merchant_CVV2.
SIS0218 El comercio no permite operaciones seguras por la entrada /operaciones.
SIS0219 Error el número de operaciones de la tarjeta supera el límite permitido para el comercio.
SIS0220 Error el importe acumulado de la tarjeta supera el límite permitido para el comercio.
SIS0221 Error el CVV2 es obligatorio.
SIS0222 Ya existe una anulación asociada a la preautorización.
SIS0223 La preautorización que se desea anular no está autorizada.
SIS0224 El comercio no permite anulaciones por no tener firma ampliada.
SIS0225 Error no existe operación sobre la que realizar la anulación.
SIS0226 Inconsistencia de datos, en la validación de una anulación.
SIS0227 Valor del campo Ds_Merchan_TransactionDate no válido.
SIS0229 No existe el código de pago aplazado solicitado.
SIS0252 El comercio no permite el envío de tarjeta.
SIS0253 La tarjeta no cumple el check-digit.
SIS0254 El número de operaciones de la IP supera el límite permitido por el comercio.
SIS0255 El importe acumulado por la IP supera el límite permitido por el comercio.
SIS0256 El comercio no puede realizar preautorizaciones.
SIS0257 Esta tarjeta no permite operativa de preautorizaciones.
SIS0258 Inconsistencia de datos, en la validación de una confirmación.
SIS0261 Operación detenida por superar el control de restricciones en la entrada al SIS.
SIS0270 El comercio no puede realizar autorizaciones en diferido.
SIS0274 Tipo de operación desconocida o no permitida por esta entrada al SIS.
SIS0298 El comercio no permite realizar operaciones de Tarjeta en Archivo.
SIS0319 El comercio no pertenece al grupo especificado en Ds_Merchant_Group.
SIS0321 La referencia indicada en Ds_Merchant_Identifier no está asociada al comercio.
SIS0322 Error de formato en Ds_Merchant_Group.
SIS0325 Se ha pedido no mostrar pantallas pero no se ha enviado ninguna referencia de tarjeta.