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)

unomasmas 04-10-2021 08:13:24

Cita:

Empezado por sEngine (Mensaje 543265)
Os funciona bien Guipuzkoa? Porque me esta dando esta respuesta:

Código:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:TicketBaiResponse xmlns:ns2="urn:ticketbai:emision">
    <Salida>
        <IdentificadorTBAI>TBAI-XXXXXXX-011021-iUZNIGX8YcMeb-163</IdentificadorTBAI>
        <FechaRecepcion>01-10-2021 16:37:12</FechaRecepcion>
        <Estado>00</Estado>
        <Descripcion>Recibido</Descripcion>
        <Azalpena>Jasota</Azalpena>
        <ResultadosValidacion>
            <Codigo>008</Codigo>
            <Descripcion>org.apache.axis.InternalException: org.apache.axis.ConfigurationException: java.lang.NullPointerException
java.lang.NullPointerException

 ...
</Azalpena>
        </ResultadosValidacion>
        <CSV>TBAIc5c7f01a-7031-4d68-b8b7-3d6498dd5633</CSV>
    </Salida>
</ns2:TicketBaiResponse>

Se envía pero recibo ese cacho de error. Lo reduzco un poco porque era muy largo


008 es Error en verificación de firma. Se necesita corregir el problema para próximos envíos. Se acepta este envío. Tienen un error en el servidor; supongo que lo corregirán (si saben que está devolviendo este mensaje ¿Se lo has dicho?)

unomasmas 04-10-2021 08:28:10

Cita:

Empezado por Ramon88 (Mensaje 543271)
Me sabe fatal preguntar algo que ya está explicado en el foro, pero no logro entenderlo y no me sale.
Calcular el último CRC8...
He visto que si hay '+' '/' da problemas y que para ello hay que pasarlo a URI.


Os explico lo que hago aver si veis donde fallo, por que llevo todo el día dándole vueltas y seguramente lo tenga delante y ya no lo vea...

1- Calculo el primer CRC8 como siempre y me funcionaba.
2- Voy calculando todo y cuando tengo que calcular el ultimo CRC lo codifico a URI, y queda algo asi
Código:

https%3A%2F%2Ftbai.prep.....

Yo creo que sólo hay que codificar la parte del identificador TBAI, no la URL completa. Básicamente, con codificar la parte subrayada sería suficiente, aunque podrías hacerlo con toda la cadena negrita si te resulta más cómodo, pero no habría que incluir la parte inicial de la URL.
Código:

https://tbai.egoitza.gipuzkoa.eus/qr/?id=TBAI-12345678Z-290921-ViPV5QljO4BSh-103&s=R-2021&nf=0003&i=60.50&cr=255
No te fies de los valores. Los crc de este ejemplo son ficticios. Me he inventado una cadena que parece cierta para explicar cómo lo entiendo yo.

iMia 04-10-2021 09:01:22

Cita:

Empezado por unomasmas (Mensaje 543290)
Yo creo que sólo hay que codificar la parte del identificador TBAI, no la URL completa. Básicamente, con codificar la parte subrayada sería suficiente, aunque podrías hacerlo con toda la cadena negrita si te resulta más cómodo, pero no habría que incluir la parte inicial de la URL.
Código:

https://tbai.egoitza.gipuzkoa.eus/qr/?id=TBAI-12345678Z-290921-ViPV5QljO4BSh-103&s=R-2021&nf=0003&i=60.50&cr=255
No te fies de los valores. Los crc de este ejemplo son ficticios. Me he inventado una cadena que parece cierta para explicar cómo lo entiendo yo.

Exacto, Sólo hay que pasar a URI el código TBAI y sin recalcular el CRC...

p.Ej.

h t t p s://tbai.egoitza.gipuzkoa.eus/qr/?id=TBAI-12345678Z-290921-ViP+5Qlj/4BSh-103&s=R-2021&nf=0003&i=60.50&cr=255

debería ser

h t t p s://tbai.egoitza.gipuzkoa.eus/qr/?id=TBAI-12345678Z-290921-ViP%2B5Qlj%2F4BSh-103&s=R-2021&nf=0003&i=60.50&cr=128

- Sólo se cambian los caracteres + y / del codigo TBAI
- El CRC del código TBAI -> 103, no varía
- El CRC de todo el valor de la dirección se calcula una vez se han cambiado los valores + y / del codigo TBAI

Código Delphi [-]
    strCodigoTBAI := 'TBAI-12345678Z-290921-ViP+5Qlj/4BSh-103';
    strUrlQR := 'https://tbai.egoitza.gipuzkoa.eus/qr/';
    strURI := strUrlQR + '?id=' + TbaiToURI(strCodigoTBAI) + '&s=' + strSerie + '&nf=' strNumeroFactura + '&i=' + strImporteFactura;
    strURI := strURI + '&cr=' + CRC8(strURI);
-

Noe277 04-10-2021 09:06:56

Cita:

Empezado por ermendalenda (Mensaje 543275)
Lo prometiddo es deuda
Aquí os dejo los calculos de los cifs, españa, extranjero.
Aún me queda una duda, que no me he peleado mucho, pero ya veo codigo fuente flotando en el aire y es hora del descanso.

Resulta que para la comprobación del cif extranjeero se envia el cif dividido en 2 campos;
Por un lado el identificador del pais
Por otro Lado el resto del identificador.
He probado con el identificador del Pais de 2 caracteres, por que resulta que hay de 2 caracteres, de 3 y otro identificadorn úmerico (os mando la tabla de paises en una excell), los probaré todos el Lunes, si probais vosotros antes decidme.

Los Alpha 3 se usan para factura-e, para listados oficiales, modelos y SII Alpha 2


Y una pregunta el Zuzendu de Gipuzkoa sabemos algo de el ?

JoseLeeTo 04-10-2021 09:27:02

Cita:

Empezado por ermendalenda (Mensaje 543275)
Lo prometiddo es deuda
Aquí os dejo los calculos de los cifs, españa, extranjero.
Aún me queda una duda, que no me he peleado mucho, pero ya veo codigo fuente flotando en el aire y es hora del descanso.

Resulta que para la comprobación del cif extranjeero se envia el cif dividido en 2 campos;
Por un lado el identificador del pais
Por otro Lado el resto del identificador.
He probado con el identificador del Pais de 2 caracteres, por que resulta que hay de 2 caracteres, de 3 y otro identificadorn úmerico (os mando la tabla de paises en una excell), los probaré todos el Lunes, si probais vosotros antes decidme.

XML Petición ejemplo comproobacion nif ESPAÑA
Código:

<?xml version="1.0" encoding="utf-8"?>
<Spain:Envelope xmlns:Spain="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ELNIF="http://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV2Ent.xsd">
    <Spain:Header/>
    <Spain:Body>
        <ELNIF:VNifV2Ent>
            <ELNIF:Contribuyente>
                <ELNIF:Nif>B63272603</ELNIF:Nif>
                <ELNIF:Nombre>GOOGLE </ELNIF:Nombre>
            </ELNIF:Contribuyente>
        </ELNIF:VNifV2Ent>
    </Spain:Body>
</Spain:Envelope>

CURL CIF ESPAÑOL:
curl.exe --connect-timeout 60 -m 60 -S -L -d "@C:\[path donde esta ubicado]\EnvioNif.xml" -o C:\[path respuesta]\RespuestaNif.xml --cert-type P12 --cert c:\[path certificado]\Ciudadano.pfx:82388133 https://www1.agenciatributaria.gob.e.../ws/VNifV2SOAP



Ejemplo xml Petición Nif Extranjero
Código:

<?xml version="1.0" encoding="utf-8"?>
<Extranjero:Envelope xmlns:Extranjero='http://schemas.xmlsoap.org/soap/envelope/'>
    <Extranjero:Body>
        <Datos:checkVat xmlns:Datos='urn:ec.europa.eu:taxud:vies:services:checkVat:types'>
            <Datos:countryCode>FR</Datos:countryCode>
            <Datos:vatNumber>08353523418</Datos:vatNumber>
        </Datos:checkVat>
    </Extranjero:Body>
</Extranjero:Envelope>

Curl Extranjero:
curl.exe --connect-timeout 60 -m 60 -S -L -d "@C:\[path donde esta ubicado]\EnvioNif_extranjero.xml" -o C:\[path respuesta]\RespuestaNif_extranjero.xml http://ec.europa.eu/taxation_customs...heckVatService
Ojo: un cif extranjero no es el que empieza por X o Y, esos son cifs extranjeros adaptados a España y hay que comprobarlos según el Curl de España.


Muchísimas gracias por la aportación.

ermendalenda 04-10-2021 09:35:35

Cita:

Empezado por Noe277 (Mensaje 543292)
Los Alpha 3 se usan para factura-e, para listados oficiales, modelos y SII Alpha 2


Y una pregunta el Zuzendu de Gipuzkoa sabemos algo de el ?

Gracias
Ni idea de Zuzendu

ermendalenda 04-10-2021 09:41:45

Cita:

Empezado por JoseLeeTo (Mensaje 543293)
Muchísimas gracias por la aportación.

Nada. Es buenísimo. Para los cifs españoles no hace falta que mandes nada en el nombre, te lo devuelve. Y te devuelve el cif, si te equivocas de letra te devuelve la letra correcta.
Para los nifs y nie tienes que mandarle una parte del nombre aproximada y te lo devuelve completo, lo que tienen registrado.
Para los ESN se le quita El Es y se manda la consulta a la de España, son los no residentes (Extranjeros con un nif de alta en españa pero no están en el registro ROI), por ejemplo los chinos de Aliexpress, amazon, muchos laboratorios Europeos...



Para los extranjeros: En el primer campo, siempre los 2 caracteres del país, y en el segundo el código. Y te devuelve nombre y dirección, que además creo que la he conseguido formatear para sacar dirección, ciudad, población y cod. Postal(aunque es un algoritmo aprox creo que vale para la mayoría de los casos, ya que al devolver la dirección en un solo campo hay que hacer inventos. Ten en cta que como devuelve la dirección con saltos de líneas (asc(10)) se puede más o menos formatear.

Un consejo, cuando compreis productos chinos, normalmente el proveedor tiene un ESN o un VIES(Registro en el ROI), muchas veces falso, en ese caso no comprar nada, y podeis comprobarlo con estos CURLS.

Ramon88 04-10-2021 12:37:18

Cita:

Empezado por unomasmas (Mensaje 543290)
Yo creo que sólo hay que codificar la parte del identificador TBAI, no la URL completa. Básicamente, con codificar la parte subrayada sería suficiente, aunque podrías hacerlo con toda la cadena negrita si te resulta más cómodo, pero no habría que incluir la parte inicial de la URL.
Código:

https://tbai.egoitza.gipuzkoa.eus/qr/?id=TBAI-12345678Z-290921-ViPV5QljO4BSh-103&s=R-2021&nf=0003&i=60.50&cr=255
No te fies de los valores. Los crc de este ejemplo son ficticios. Me he inventado una cadena que parece cierta para explicar cómo lo entiendo yo.


He estado probándolo y si cambio los caracteres o lo convierto a uri no me funciona, sin embargo si lo dejo tal cual, si. No entiendo nada...


FUNCIONA:

https://tbai.prep.gipuzkoa.eus/qr/?i...&i=0.00&cr=046


NO FUNCIONA:
https://tbai.prep.gipuzkoa.eus/qr/?i...&i=0.00&cr=046

ermendalenda 04-10-2021 12:50:49

Cita:

Empezado por Ramon88 (Mensaje 543298)
He estado probándolo y si cambio los caracteres o lo convierto a uri no me funciona, sin embargo si lo dejo tal cual, si. No entiendo nada...


FUNCIONA:

https://tbai.prep.gipuzkoa.eus/qr/?i...&i=0.00&cr=046


NO FUNCIONA:
https://tbai.prep.gipuzkoa.eus/qr/?i...&i=0.00&cr=046

El último crc del último caso está mal.
No puedes poner el mismo. Tienes que calcularlo según lo que has cambiado. Es lioso pero es así

espinete 04-10-2021 14:05:27

el mensaje ha sido modificado en tránsito o la firma no está bien realizada
 
Buenas...

Estoy haciendo pruebas con Gipuzkoa y, aunque la factura se envía, me devuelve el error "...el mensaje ha sido modificado en tránsito o la firma no está bien realizada...".

He leído en el foro y en las Preguntas Frecuentes de Gipuzkoa, que puede deberse a problemas en la codificación del archivo antes y después de firmar/enviar, pero he revisado todo y no encuentro dónde puede estar el problema.
Me he asegurado de que todo se guarda como UTF-8 (sin BOM) y el envío se realiza también en UTF-8 (sin BOM).
El nombre de la empresa no contiene ningún carácter especial, ni tildes, etc.

Estos son los pasos que sigo:

1. Creo el XML de la factura a partir del xml data binding:

Código Delphi [-]
        f:=ticketBaiV12.NewTicketBai;
        f.Cabecera.IDVersionTBAI := '1.2';
        .......

2. Cargo el contenido de "f" en un XMLDocument:

Código Delphi [-]
        XMLDocument1.XML.Text:=f.XML;
        xmldocument1.Active:=True;
        xmldocument1.SaveToFile('factura.xml');

3. Realizo las modificaciones de hay que hacer en el XML generado por Delphi, siguiendo los pasos encontrados en el foro:

Código Delphi [-]
        FicheroCorregir := TStringList.Create;
        FicheroCorregir.LoadFromFile('factura.xml');
        FicheroCorregir.Text := AnsiReplaceStr(FicheroCorregir.Text, '','');
        FicheroCorregir.Text := AnsiReplaceStr(FicheroCorregir.Text,'', '');

        FicheroCorregir.WriteBOM := false;
        FicheroCorregir.SaveToFile('factura.xml', TEncoding.UTF8);

4. Firmo la factura

Código Delphi [-]
    firmante.r_SigPolicyID := 'https://www.gipuzkoa.eus/ticketbai/sinadura';                        
    firmante.r_SigPolicyHash := 'e8daca026eb4a3bbbad85510c3365ec36e2b6b6bdef4f4506300b6d4033a227d';     //6NrKAm60o7u62FUQwzZew24ra2ve9PRQYwC21AM6In0= convertido a HEX 
    firmante.r_SigPolicyURI := 'https://www.gipuzkoa.eus/ticketbai/sinadura';

    FirmarXML('factura.xml',firmante);

5. Vuelvo a cargar el XML ya firmado en un XMLDocument:

Código Delphi [-]
    xmldocument1.Active:=false;
    xmldocument1.LoadFromFile('firmado.xml');
    xmldocument1.Active:=true;

6. Uso el código SaveAsUTF8 encontrado en el foro para guardar el archivo en UTF-8 SIN BOM

Código Delphi [-]
    SaveAsUTF8('firmado.xml', xmldocument1.XML);

7. Ya tenemos el archivo firmado. Ahora hago el envío:

Código Delphi [-]
    RequestBody := TFileStream.Create('firmado.xml', fmOpenRead);

    NetHTTPClient1.SecureProtocols := [THTTPSecureProtocol.TLS12];
    NetHTTPClient1.CustomHeaders['Content-Type'] := 'application/xml';
    NetHTTPClient1.CustomHeaders['Charset'] := 'UTF-8';

    AResponse := NetHTTPClient1.Post('https://tbai-prep.egoitza.gipuzkoa.eus/WAS/HACI/HTBRecepcionFacturasWEB/rest/recepcionFacturas/alta',RequestBody);

¿Dónde puede estar el problema? Las facturas se envían (en el entorno de pruebas). De hecho si intento reenviarla, me dice que ya ha sido enviada.

PD: aunque conste como enviada, si voy a la URL del TicketBAI obtenido...

Por ejemplo: https://tbai.prep.gipuzkoa.eus/qr/?i...=100.00&cr=112

...me devuelve "No se ha podido determinar el estado de la factura"

ermendalenda 04-10-2021 14:50:09

Cita:

Empezado por espinete (Mensaje 543300)
Buenas...

Estoy haciendo pruebas con Gipuzkoa y, aunque la factura se envía, me devuelve el error "...el mensaje ha sido modificado en tránsito o la firma no está bien realizada...".

He leído en el foro y en las Preguntas Frecuentes de Gipuzkoa, que puede deberse a problemas en la codificación del archivo antes y después de firmar/enviar, pero he revisado todo y no encuentro dónde puede estar el problema.
Me he asegurado de que todo se guarda como UTF-8 (sin BOM) y el envío se realiza también en UTF-8 (sin BOM).
El nombre de la empresa no contiene ningún carácter especial, ni tildes, etc.

Estos son los pasos que sigo:

1. Creo el XML de la factura a partir del xml data binding:

Código Delphi [-] f:=ticketBaiV12.NewTicketBai; f.Cabecera.IDVersionTBAI := '1.2'; .......


2. Cargo el contenido de "f" en un XMLDocument:

Código Delphi [-] XMLDocument1.XML.Text:=f.XML; xmldocument1.Active:=True; xmldocument1.SaveToFile('factura.xml');


3. Realizo las modificaciones de hay que hacer en el XML generado por Delphi, siguiendo los pasos encontrados en el foro:

Código Delphi [-] FicheroCorregir := TStringList.Create; FicheroCorregir.LoadFromFile('factura.xml'); FicheroCorregir.Text := AnsiReplaceStr(FicheroCorregir.Text, '',''); FicheroCorregir.Text := AnsiReplaceStr(FicheroCorregir.Text,'', ''); FicheroCorregir.WriteBOM := false; FicheroCorregir.SaveToFile('factura.xml', TEncoding.UTF8);


4. Firmo la factura

Código Delphi [-] firmante.r_SigPolicyID := 'https://www.gipuzkoa.eus/ticketbai/sinadura'; firmante.r_SigPolicyHash := 'e8daca026eb4a3bbbad85510c3365ec36e2b6b6bdef4f4506300b6d4033a227d'; //6NrKAm60o7u62FUQwzZew24ra2ve9PRQYwC21AM6In0= convertido a HEX firmante.r_SigPolicyURI := 'https://www.gipuzkoa.eus/ticketbai/sinadura'; FirmarXML('factura.xml',firmante);


5. Vuelvo a cargar el XML ya firmado en un XMLDocument:

Código Delphi [-] xmldocument1.Active:=false; xmldocument1.LoadFromFile('firmado.xml'); xmldocument1.Active:=true;


6. Uso el código SaveAsUTF8 encontrado en el foro para guardar el archivo en UTF-8 SIN BOM

Código Delphi [-] SaveAsUTF8('firmado.xml', xmldocument1.XML);


7. Ya tenemos el archivo firmado. Ahora hago el envío:

Código Delphi [-] RequestBody := TFileStream.Create('firmado.xml', fmOpenRead); NetHTTPClient1.SecureProtocols := [THTTPSecureProtocol.TLS12]; NetHTTPClient1.CustomHeaders['Content-Type'] := 'application/xml'; NetHTTPClient1.CustomHeaders['Charset'] := 'UTF-8'; AResponse := NetHTTPClient1.Post('https://tbai-prep.egoitza.gipuzkoa.eus/WAS/HACI/HTBRecepcionFacturasWEB/rest/recepcionFacturas/alta',RequestBody);


¿Dónde puede estar el problema? Las facturas se envían (en el entorno de pruebas). De hecho si intento reenviarla, me dice que ya ha sido enviada.

PD: aunque conste como enviada, si voy a la URL del TicketBAI obtenido...

Por ejemplo: https://tbai.prep.gipuzkoa.eus/qr/?i...=100.00&cr=112

...me devuelve "No se ha podido determinar el estado de la factura"

Hola, no sé si te va a funcionar pero yo hago un par de cosas diferentes:

1. Una vez firmado no lo paso a UTF-8, solo antes.
2. Prueba a cambiar esto en la Cabecera:
xsi:schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"

3: Las politicas de firma no cuadran con las mias, falta el digest:
"name" => "Politica de firma TicketBAI 1.0",
"url" => "https://www.gipuzkoa.eus/ticketbai/sinadura",
"digest" => "dTtPpv4fWTcejeVx7+91ILruFX3HysbngBlllJm4i/E="

espinete 04-10-2021 15:22:09

Cita:

Empezado por ermendalenda (Mensaje 543301)
Hola, no sé si te va a funcionar pero yo hago un par de cosas diferentes:

1. Una vez firmado no lo paso a UTF-8, solo antes.
2. Prueba a cambiar esto en la Cabecera:
xsi:schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"

3: Las politicas de firma no cuadran con las mias, falta el digest:
"name" => "Politica de firma TicketBAI 1.0",
"url" => "https://www.gipuzkoa.eus/ticketbai/sinadura",
"digest" => "dTtPpv4fWTcejeVx7+91ILruFX3HysbngBlllJm4i/E="

Si elimino el SaveAsUTF8 tras hacer la firma, no me admite el envío. Me devuelve un error que dice algo así como "no se admite contenido en el prolog".

Cambiando el xsi:schemaLocation del XML por "http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd" en vez de "urn:ticketbai:emision ticketBaiV12.xsd" no afecta al resultado. Obtengo el mismo error 008 de mi anterior post.

Por cierto, en mi anterior post al convertir el texto a código Delphi se comió parte del código.
Esto es lo que hago para cambiar la cabecera del XML, una vez generado:

....
FicheroCorregir.Text := AnsiReplaceStr(FicheroCorregir.Text, '<TicketBai xmlns="urn:ticketbai:emision">','<T:TicketBai xmlns:T="urn:ticketbai:emision" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ticketbai:emision ticketBaiV12.xsd">');
FicheroCorregir.Text := AnsiReplaceStr(FicheroCorregir.Text,'</TicketBai>', '</T:TicketBai>');
....

No he entendido lo de las políticas de firma y que falta el digest... Antes solo puse parte del código, para resumir. Pongo ahora el resto, si es que te refieres a esta parte:

firmante.r_Nombre_firma := nom_emp_emisora;
firmante.r_ID := '';
firmante.r_Metodo_Canonicalization := '';
firmante.r_Hash_algorithm := 'SHA256';
firmante.r_SigPolicyHashAlgorithm := 'SHA256';
//Gipuzkoa
firmante.r_SigPolicyID := 'https://www.gipuzkoa.eus/ticketbai/sinadura';
firmante.r_SigPolicyHash := 'e8daca026eb4a3bbbad85510c3365ec36e2b6b6bdef4f4506300b6d4033a227d'; //6NrKAm60o7u62FUQwzZew24ra2ve9PRQYwC21AM6In0= convertido a HEX es e8daca026eb4a3bbbad85510c3365ec36e2b6b6bdef4f4506300b6d4033a227d
firmante.r_SigPolicyURI := 'https://www.gipuzkoa.eus/ticketbai/sinadura';

Utilizo los componentes de SecureBlackBox 2020 para la firma.

Alguna pista?

ermendalenda 04-10-2021 15:27:59

Ese error la mayoría de las veces es por que hay caracteres extraños o el uri ml definido(que no parece el caso?) Edita el fichero antes de firmarlo con mswordpad. No pases utf8 firmalo y envíalo.
Si quieres mandar el xml par que lo repasemos cambiándole los datos...

espinete 04-10-2021 15:44:16

Hola

Estoy probando a hacer varios envíos seguidos de facturas a distintos clientes, para comprobar si hay algún caracter especial en el nombre del cliente, etc.

En algunos envíos me devuelve el error Codigo 008: Error en verificación de firma.
En otros me devuelve el error Codigo 008: El mensaje ha sido modificado en tránsito o la firma no está bien realizada -- Reference URI="" failed to verify. Reference URI="#SignedProperties-1610103204" failed to verify. [src/xml2signatureobj.cpp(315)] - (10606)

En cualquier caso, el envío se realiza y la factura consta como enviada (no puedo subirla de nuevo porque ya existe).

En el entorno de pruebas que estoy desarrollando, guardo el archivo xml ANTES y DESPUÉS de firmarlo. Abriéndolos con el Notepad++ veo que ambos tienen codificación UTF-8 SIN BOM.

¿Hay alguna utilidad online donde poder verificar los XML de ticketbai?

Band 04-10-2021 16:13:29

Cita:

Empezado por espinete (Mensaje 543307)
Hola

Estoy probando a hacer varios envíos seguidos de facturas a distintos clientes, para comprobar si hay algún caracter especial en el nombre del cliente, etc.

En algunos envíos me devuelve el error Codigo 008: Error en verificación de firma.
En otros me devuelve el error Codigo 008: El mensaje ha sido modificado en tránsito o la firma no está bien realizada -- Reference URI="" failed to verify. Reference URI="#SignedProperties-1610103204" failed to verify. [src/xml2signatureobj.cpp(315)] - (10606)

En cualquier caso, el envío se realiza y la factura consta como enviada (no puedo subirla de nuevo porque ya existe).

En el entorno de pruebas que estoy desarrollando, guardo el archivo xml ANTES y DESPUÉS de firmarlo. Abriéndolos con el Notepad++ veo que ambos tienen codificación UTF-8 SIN BOM.

¿Hay alguna utilidad online donde poder verificar los XML de ticketbai?


Una vez firmado el xml no puedes volver a guardarlo. Es decir, cuando lo firmas tienes que dejarlo tal cual y no puedes realizar ninguna acción sobre el (obviamente si puedes enviar el fichero, copiarlo, moverlo... pero nada más, ni volver a guardarlo ni añadir un caracter en blanco al final ni nada).

Yo para probar el tema de caracteres raros, uso como propuso alguien del foro (igual voy equivocado, pero creo que era Neftali) esta cadena: áéíóúÁÉÍÓÚÜçÇñÑ€~#@ <--- Puede ser más compleja y rara, pero con esto a mi me vale

ermendalenda 04-10-2021 16:29:55

Cita:

Empezado por espinete (Mensaje 543307)
Hola

Estoy probando a hacer varios envíos seguidos de facturas a distintos clientes, para comprobar si hay algún caracter especial en el nombre del cliente, etc.

En algunos envíos me devuelve el error Codigo 008: Error en verificación de firma.
En otros me devuelve el error Codigo 008: El mensaje ha sido modificado en tránsito o la firma no está bien realizada -- Reference URI="" failed to verify. Reference URI="#SignedProperties-1610103204" failed to verify. [src/xml2signatureobj.cpp(315)] - (10606)

En cualquier caso, el envío se realiza y la factura consta como enviada (no puedo subirla de nuevo porque ya existe).

En el entorno de pruebas que estoy desarrollando, guardo el archivo xml ANTES y DESPUÉS de firmarlo. Abriéndolos con el Notepad++ veo que ambos tienen codificación UTF-8 SIN BOM.

¿Hay alguna utilidad online donde poder verificar los XML de ticketbai?


Tiene que quedar así:
Código:

<?xml version="1.0" encoding="UTF-8"?>
<T:TicketBai xmlns:T="urn:ticketbai:emision" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd">
<Cabecera>
<IDVersionTBAI>1.2</IDVersionTBAI>
</Cabecera>

.
.
.
.
<HuellaTBAI>
.
.
.
</HuellaTBAI>
<ds:Signature
.
.
..
</ds:Signature>
</T:TicketBai>

Aquí te dejo un par de verificadores de xmls firmados, que están en el foro(No de ticketbai, son genéricos):
http://tools.chilkat.io/xmlDsigVerif...#generatedCode
https://web.uanataca.com/pe/servicio...ma-electronica

Ramon88 04-10-2021 17:35:35

Cita:

Empezado por espinete (Mensaje 543307)
Hola

Estoy probando a hacer varios envíos seguidos de facturas a distintos clientes, para comprobar si hay algún caracter especial en el nombre del cliente, etc.

En algunos envíos me devuelve el error Codigo 008: Error en verificación de firma.
En otros me devuelve el error Codigo 008: El mensaje ha sido modificado en tránsito o la firma no está bien realizada -- Reference URI="" failed to verify. Reference URI="#SignedProperties-1610103204" failed to verify. [src/xml2signatureobj.cpp(315)] - (10606)

En cualquier caso, el envío se realiza y la factura consta como enviada (no puedo subirla de nuevo porque ya existe).

En el entorno de pruebas que estoy desarrollando, guardo el archivo xml ANTES y DESPUÉS de firmarlo. Abriéndolos con el Notepad++ veo que ambos tienen codificación UTF-8 SIN BOM.

¿Hay alguna utilidad online donde poder verificar los XML de ticketbai?


A mi me pasaba algo aprecido y era por que al pasarlo a una variable luego lo ponía todo en 1 linea.


Código:

Dim xmlDoc As New XmlDocument
xmlDoc.PreserveWhitespace = True
xmlDoc.Load(pathXML)


iMia 04-10-2021 19:00:58

Cita:

Empezado por Ramon88 (Mensaje 543298)
He estado probándolo y si cambio los caracteres o lo convierto a uri no me funciona, sin embargo si lo dejo tal cual, si. No entiendo nada...


FUNCIONA:

https://tbai.prep.gipuzkoa.eus/qr/?i...&i=0.00&cr=046


NO FUNCIONA:
https://tbai.prep.gipuzkoa.eus/qr/?i...&i=0.00&cr=046

http://www.clubdelphi.com/foros/show...postcount=1743

espinete 04-10-2021 19:20:28

Cita:

Empezado por Band (Mensaje 543309)
Una vez firmado el xml no puedes volver a guardarlo. Es decir, cuando lo firmas tienes que dejarlo tal cual y no puedes realizar ninguna acción sobre el (obviamente si puedes enviar el fichero, copiarlo, moverlo... pero nada más, ni volver a guardarlo ni añadir un caracter en blanco al final ni nada).

Quizás me he explicado mal o no entiendo lo que quieres decir... Después de firmar el XML, no se debe guardar ese XML firmado para poder enviarlo en la petición?

Es decir... creo el XML (factura.xml), firmo ese XML (con los componentes de SecureBlackBox) y tras firmarlo, lo guardo (firmado) como firmado.xml, que es el que envío.

Después de firmarlo no he hecho ninguna modificación (salvo guardarlo con otro nombre).

Revisaré mañana el contenido del XML por si hay caracteres especiales, pero lo dudo mucho porque estoy usando datos de prueba muy básicos.

ermendalenda 04-10-2021 19:37:14

Cita:

Empezado por espinete (Mensaje 543321)
Quizás me he explicado mal o no entiendo lo que quieres decir... Después de firmar el XML, no se debe guardar ese XML firmado para poder enviarlo en la petición?

Es decir... creo el XML (factura.xml), firmo ese XML (con los componentes de SecureBlackBox) y tras firmarlo, lo guardo (firmado) como firmado.xml, que es el que envío.

Después de firmarlo no he hecho ninguna modificación (salvo guardarlo con otro nombre).

Revisaré mañana el contenido del XML por si hay caracteres especiales, pero lo dudo mucho porque estoy usando datos de prueba muy básicos.

La clase stream lleva implícita cambios en la codificación del fichero a grabar. Revisa el comando:
Creo que El fichero firmado al grabarlo lo modificas:
TFileStream.Create('firmado.xml
Este problema ya lo han tenido y ha salido en otro post del hilo


La franja horaria es GMT +2. Ahora son las 01:38:17.

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