Ver Mensaje Individual
  #1751  
Antiguo 04-10-2021
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 886
Reputación: 3
ermendalenda Va por buen camino
Cita:
Empezado por espinete Ver Mensaje
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="
Responder Con Cita