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"