Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco (https://www.clubdelphi.com/foros/showthread.php?t=94264)

Galaxian 15-07-2021 09:46:40

Cita:

Empezado por batuzail (Mensaje 541793)
Hola,
Alguien sabe como recuperar la firma de un xml firmado con Chilckat?


Saludos

La mejor forma es con un analizador (parser) XML. El problema es hacerse con uno bueno.

Yo lo necesitaba para otras cosas y al final tuve que hacérmelo. No es difícil, aunque requiere bastantes horas de trabajo para pulirlo, pero una vez hecho es una delicia poder procesar cualquier XML sin despeinarse.

Si quieres salir del paso, puedes buscar "<ds:SignatureValue" en el texto. Una vez encontrado tienes que buscar el siguiente '>', apuntar la posición, buscar el siguiente '<', apuntar la posición, y extraer el fragmento comprendido entre las dos posiciones.

b4aronDeLaBirr4 15-07-2021 09:50:26

Genial! Voy a probar, muchas gracias! Pero cómo te aseguras que lo envías con esa codificación? Porque lo tengo en el código en varios puntos y luego lo tengo adjuntado en el header de la petición. Tú cómo lo estás haciendo?

Galaxian 15-07-2021 09:53:13

Cita:

Empezado por skatologiko (Mensaje 541796)
A Guipuzcoa. Si envío un NIF español, sí que llega

<Destinatarios>
<IDDestinatario>
<NIF>NL855820627B01</NIF>
<ApellidosNombreRazonSocial>ITX MERKEN B.V.</ApellidosNombreRazonSocial>
</IDDestinatario>
</Destinatarios>

Y me da el siguiente error:
Error: El fichero de alta TicketBAI no cumple el esquema XSD. Detalle del error: cvc-pattern-valid: Value 'NL855820627B01' is not facet-valid with respect to pattern '(([a-z|A-Z]{1}\d{7}[a-z|A-Z]{1})|(\d{8}[a-z|A-Z]{1})|([a-z|A-Z]{1}\d{8}))' for type 'NIFType'.</Descripcion>

Para los destinatarios extranjeros tiene que usar la definición "IDOtroType" del XSD

Galaxian 15-07-2021 09:57:06

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 541803)


Y el IDOtro:


¡No me digas que tienes una herramienta que analiza XSD! :eek:

¡LA QUIERO! ¡PORFI, PORFI, PORFI... :D

batuzail 15-07-2021 10:00:22

Cita:

Empezado por b4aronDeLaBirr4 (Mensaje 541812)
Genial! Voy a probar, muchas gracias! Pero cómo te aseguras que lo envías con esa codificación? Porque lo tengo en el código en varios puntos y luego lo tengo adjuntado en el header de la petición. Tú cómo lo estás haciendo?

Yo tengo el mismo problema de error en tránsito, le he metido utf-8 por todo slo sitios y sigo igual, alguien puede poner la firma y envío con Chilkat en VB6? estoy encallado. La firma está bien o eso dicen todos los validadores. Uso el ejemplo que genera las tools de Chilkat.

Galaxian 15-07-2021 10:07:23

Me apunto a lo de los CRC8. Ahí va mi aportación en C++:

Código:

static const unsigned char tabla_crc8[]=
{
  0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15,0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D,
  0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65,0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D,
  0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5,0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA,0xCD,
  0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85,0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD,
  0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2,0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA,
  0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2,0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A,
  0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32,0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A,
  0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42,0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A,
  0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C,0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4,
  0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC,0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4,
  0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C,0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44,
  0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C,0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34,
  0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B,0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63,
  0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B,0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13,
  0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB,0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83,
  0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB,0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3
};
 

uchar CRC8(const unsigned char *dat)
{
  if(dat==nullptr)return(0xff);
  int lng=strlen(dat);
  uchar crc=0;

  for(int cta=0;cta<lng;cta++)crc=tabla_crc8[(crc ^ dat[cta]) & 0xff];

  return(crc);
}


Galaxian 15-07-2021 10:16:45

Cita:

Empezado por b4aronDeLaBirr4 (Mensaje 541812)
Genial! Voy a probar, muchas gracias! Pero cómo te aseguras que lo envías con esa codificación? Porque lo tengo en el código en varios puntos y luego lo tengo adjuntado en el header de la petición. Tú cómo lo estás haciendo?

Tengo mi propia función de conversión. Sé que Chilkat tiene varias formas de convertirlo aunque no las he usado.

IMPORTANTE: recuerda que hay que convertirlo a UTF8 antes de firmarlo.

Neftali [Germán.Estévez] 15-07-2021 10:19:09

Cita:

Empezado por edari (Mensaje 541808)
Porque lo que es imposible es calcular el crc desde cmd con un comando al estilo del autofirmacommandline.exe al que le puedas pasar los parámetros de manera externa, verdad?

Mi lenguaje tiene complicado llamar a dll externas y recuperar como parámetro el resultado y me estoy volviendo un poco gilipichis para encontrar la manera


Mírate este mensaje del hilo, a ver si te sirve:
http://clubdelphi.com/foros/showpost...&postcount=606
También puedes hacerlo directamente en un EXE si te es más útil.

b4aronDeLaBirr4 15-07-2021 10:29:32

Lo mismo yo, aunque en C#

b4aronDeLaBirr4 15-07-2021 10:31:02

¿Y en qué consiste esa función de conversión?

Galaxian 15-07-2021 10:34:44

Cita:

Empezado por b4aronDeLaBirr4 (Mensaje 541820)
¿Y en qué consiste esa función de conversión?

Código:

std::string cdfCodificarUtf8(const char *txt)
{
  int lnga=MultiByteToWideChar(CP_ACP,0,txt,-1,nullptr,0);
  WCHAR *tmpa=new WCHAR[lnga];
  MultiByteToWideChar(CP_ACP,0,txt,-1,tmpa,lnga);

  int lngb=WideCharToMultiByte(CP_UTF8,0,tmpa,-1,nullptr,0,nullptr,nullptr);
  char *tmpb=new char[lngb];
  WideCharToMultiByte(CP_UTF8,0,tmpa,-1,tmpb,lngb,nullptr,nullptr);

  std::string dst=tmpb;

  delete tmpa;
  delete tmpb;

  return(dst);
}


b4aronDeLaBirr4 15-07-2021 10:39:21

Gracias! pero me refería más que nada a lo qué codificas. Es el XML sin firmar y luego lo firmas?

tejano 15-07-2021 10:47:13

Cita:

Empezado por edari (Mensaje 541808)
Porque lo que es imposible es calcular el crc desde cmd con un comando al estilo del autofirmacommandline.exe al que le puedas pasar los parámetros de manera externa, verdad?



Mi lenguaje tiene complicado llamar a dll externas y recuperar como parámetro el resultado y me estoy volviendo un poco gilipichis para encontrar la manera

Hola Edari, yo he encontrado un programa en Java que por línea de comando te deja el archivo dónde tu quieras y luego es leer el contenido de ese archivo

java -jar c:\amis\exes\crc8.jar -a crc8 -q "txt:CODIGO_TBAI" -F #CHECKSUM >archivo_destino

Si te interesa te paso el programa

batuzail 15-07-2021 11:13:27

Cita:

Empezado por batuzail (Mensaje 541815)
Yo tengo el mismo problema de error en tránsito, le he metido utf-8 por todo slo sitios y sigo igual, alguien puede poner la firma y envío con Chilkat en VB6? estoy encallado. La firma está bien o eso dicen todos los validadores. Uso el ejemplo que genera las tools de Chilkat.

:mad::mad::mad::mad::mad: El error era pq el nombre del cliente tenía un acento. ya podia ir probando cosas



Saludos

edari 15-07-2021 11:34:12

Cita:

Empezado por tejano (Mensaje 541823)
Hola Edari, yo he encontrado un programa en Java que por línea de comando te deja el archivo dónde tu quieras y luego es leer el contenido de ese archivo

java -jar c:\amis\exes\crc8.jar -a crc8 -q "txt:CODIGO_TBAI" -F #CHECKSUM >archivo_destino

Si te interesa te paso el programa




Me interesa porque he estado mirando la otra opción del amigo neftali y me da la sensación de que no puedo pasarle el código por parámetro sino que se me para en cada uno de ellos para pedirme y darme el resultado, lo cual no me es muy práctico porque en mi proceso normal una empresa puede imprimir de una tacada 300 facturas seguidas y necesito buscar algo más como lo que me dices tú.

tejano 15-07-2021 11:42:52

1 Archivos Adjunto(s)
Cita:

Empezado por edari (Mensaje 541825)
Me interesa porque he estado mirando la otra opción del amigo neftali y me da la sensación de que no puedo pasarle el código por parámetro sino que se me para en cada uno de ellos para pedirme y darme el resultado, lo cual no me es muy práctico porque en mi proceso normal una empresa puede imprimir de una tacada 300 facturas seguidas y necesito buscar algo más como lo que me dices tú.

Creo que va adjunto

batuzail 15-07-2021 12:03:09

Crc8
 
Alguna función para calcular el CRC8 para VB6?


Gracias

edari 15-07-2021 12:28:02

Cita:

Empezado por tejano (Mensaje 541826)
Creo que va adjunto


Uff, te debo una cerveza bien grande. :D

Galaxian 15-07-2021 12:35:48

Cita:

Empezado por b4aronDeLaBirr4 (Mensaje 541822)
Gracias! pero me refería más que nada a lo qué codificas. Es el XML sin firmar y luego lo firmas?

Sí. Si lo firmas y después lo codificas puede cambiar la firma.

Galaxian 15-07-2021 12:39:51

Cita:

Empezado por batuzail (Mensaje 541815)
Yo tengo el mismo problema de error en tránsito, le he metido utf-8 por todo slo sitios y sigo igual, alguien puede poner la firma y envío con Chilkat en VB6? estoy encallado. La firma está bien o eso dicen todos los validadores. Uso el ejemplo que genera las tools de Chilkat.

Ten en cuenta que ese error también lo puede ocasionar un problema en el XML. Echa un vistazo a los encabezados de la respuesta. A mí, en una ocasión, me dijo tan claro lo que pasaba que no me lo creía.


La franja horaria es GMT +2. Ahora son las 02:39:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi