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)

keys 10-11-2020 12:31:46

Acabo de hacer un envío y funciona bien.

¿Estas rellenado el campo número de dispositivo? Yo envíe una factura sin rellenar ese campo y tambien me daba error. Luego hablando con ellos me han dicho que lo tienen que solucionar que es un problema de ellos.

Tambien puede ser algo de fichero que estas intentando enviar.

Un Saludo.

elcharlie 10-11-2020 12:40:29

Yo les enviaría un email a los de de Lantik con el fichero que intentas enviar, para que te lo validen manualmente, y asi ir descartando cosas.

juramisa 10-11-2020 13:03:35

Es lo que he hecho, les he mandado el fichero, tiene que ser algo de las validaciones. Yo pensaba que en el fichero de respuesta vendrían los errores.
El ticketbai va como sigue:

- <Software>
<LicenciaTBAI>TBAIPRUEBA</LicenciaTBAI>
- <EntidadDesarrolladora>
<NIF>14xxxxxxxx</NIF>
</EntidadDesarrolladora>
<Nombre>FACT01</Nombre>
<Version>1.0.0.0</Version>
</Software>
El número de dispositivo no era ya obligatorio. De todas formas esperemos que me contestan. Ya os contaré.

Me entran dudas del GZip, si lo hago adecuadamente, que herramienta usaís?. A ver si es un problema del fichero enviado.

Gracias

elcharlie 10-11-2020 13:09:41

Cita:

Empezado por juramisa (Mensaje 539038)
Es lo que he hecho, les he mandado el fichero, tiene que ser algo de las validaciones. Yo pensaba que en el fichero de respuesta vendrían los errores.
El ticketbai va como sigue:

- <Software>
<LicenciaTBAI>TBAIPRUEBA</LicenciaTBAI>
- <EntidadDesarrolladora>
<NIF>14xxxxxxxx</NIF>
</EntidadDesarrolladora>
<Nombre>FACT01</Nombre>
<Version>1.0.0.0</Version>
</Software>
El número de dispositivo no era ya obligatorio. De todas formas esperemos que me contestan. Ya os contaré.

Me entran dudas del GZip, si lo hago adecuadamente, que herramienta usaís?. A ver si es un problema del fichero enviado.

Gracias


yo uso la ZLib
http://docwiki.embarcadero.com/CodeE...press_(Delphi))

keys 10-11-2020 13:10:18

Cita:

Empezado por juramisa (Mensaje 539038)
Es lo que he hecho, les he mandado el fichero, tiene que ser algo de las validaciones. Yo pensaba que en el fichero de respuesta vendrían los errores.
El ticketbai va como sigue:

- <Software>
<LicenciaTBAI>TBAIPRUEBA</LicenciaTBAI>
- <EntidadDesarrolladora>
<NIF>14xxxxxxxx</NIF>
</EntidadDesarrolladora>
<Nombre>FACT01</Nombre>
<Version>1.0.0.0</Version>
</Software>
El número de dispositivo no era ya obligatorio. De todas formas esperemos que me contestan. Ya os contaré.

Me entran dudas del GZip, si lo hago adecuadamente, que herramienta usaís?. A ver si es un problema del fichero enviado.

Gracias

El numero de dispositivo no es obligatorio, pero su sistema esta dando error si lo envías sin rellenar y además el error no lo retorna en el fichero de respuesta, sino que n o retorna nada.

Yo los comprimo conun componente de los secureblackbox TsbxArchiveWriter.

Un Saludo.

juramisa 10-11-2020 13:32:59

Vale me han respondido lo siguiente

Hemos revisado el fichero que nos han adjuntado y hemos visto que en la codificación del TicketBAI en Base64 le sobran los primeros caracteres que indico con fondo amarillo:

<TicketBai>77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPFQ6VGlja2V0QmFpIHht

Muevo el fichero a "https://www.base64encode.org/" por ejemplo y me da lo mismo. Teneís alguna explicación a esto?.

juramisa 11-11-2020 08:01:55

Buenos días,

Ayer lo sospechaba, y hoy me lo han confirmado.

Hemos visto que el fichero xml, que está dentro del fichero gz que nos han enviado, tiene la codificación UTF-8 con BOM cuando debería ser UTF-8:


Y claro esos caracteres iniciales al convertir el TicketBai a base64 son por lo mismo. ¿Vosotros como realizáis la grabación de los XML en UTF-8 solamente? sin BOM.

Gracias

juramisa 11-11-2020 10:12:07

Buenos días

Ya está todo solucionado, hasta la siguiente.

Si alguien más tiene el mismo problema os cuento como lo he solucionado. Rebuscando por internet he encontrado este código.

Código Delphi [-]
interface

  procedure SaveAsUTF8(const Fichero: string; Data: TStrings);

type
  TUTF8NoBOMEncoding = class(TUTF8Encoding)
  public
    function GetPreamble: TBytes; override;
  end;

implementation

function TUTF8NoBOMEncoding.GetPreamble: TBytes;
begin
  SetLength(Result, 0);
end;

  procedure SaveAsUTF8(const Fichero: string; Data: TStrings);
  var
    fs: TFileStream;
    vStreamWriter: TStreamWriter;
    Enc : TUTF8NoBOMEncoding;
  begin
    fs := TFileStream.Create(Fichero, fmCreate);
    try
      Enc := TUTF8NoBOMEncoding.Create;
//      vStreamWriter := TStreamWriter.Create(fs, TEncoding.UTF8);
      vStreamWriter := TStreamWriter.Create(fs, Enc);
      try
        vStreamWriter.Write(Data.Text);
      finally
        vStreamWriter.Free;
      end;
    finally
      fs.free;
      Enc.Free;
    end;

  end;

En el caso del TicketBai tras la firma lo vuelvo a cargar, y lo vuelvo a guardar.

Código Delphi [-]
      result := LoadXMLDocument(mi_fichero);
   // result: IXMLDocument

      SaveAsUTF8(mi_fichero, result.XML);

En el caso del LROE lo guardo antes de generar el GZip.

Código Delphi [-]
      
      SaveAsUTF8(mi_fichero, result.XML);

Resultado, envío correcto.

Muchas gracias a todos por vuestra ayuda.

juramisa 11-11-2020 14:32:48

Alternativa NetHttpClient
 
Buenos días

Os presento una alternativa a NetHttpClient, quien tiene los componentes de SecureBlackBox 2020 DE.

Código Delphi [-]
var
  CertificateStorage: TsbxCertificateStorage;
  cert : TsbxCertificate;
  otros_parametros : string;
  encontrado : Boolean;
  Cuerpo_Mensaje : TFileStream;

  Entry: TSBxArchivedFile;



procedure....
      // Fichero LROE  GZip
      Cuerpo_Mensaje := TFileStream.Create(FicheroComprimido, fmOpenRead);
      // Cargar mensaje json
      el_eus_bizkaia_n3_data := f_cabecera_LROE(el_concepto, el_subcapitulo, DMBatu.CDSPres.FieldByName('PR020').AsString, 
                          DMBatu.CDSPres.FieldByName('PR040').AsString, DMBatu.CDSPres.FieldByName('PR090').AsString, 
                          DMBatu.CDSPres.FieldByName('PR100').AsString, DMBatu.CDSPres.FieldByName('PR080').AsString, IntToStr(ejercicio_presentacion.Value));
      // Selección del cerificado
      sbxHTTPClient1.TLSSettings.AutoValidateCertificates :=   True;
      CertificateStorage := TsbxCertificateStorage.Create(nil);
      if CertificateStorage.Opened then
         CertificateStorage.Close(True);
      CertificateStorage.Open('system://currentuser@localhost/?store=MY');
      encontrado := False;
      sbxHTTPClient1.ClientChain.Clear;
      for i := 0 to CertificateStorage.Certificates.Count - 1 do
      begin
        cert := CertificateStorage.Certificates[i];
        if bintostr(Cert.SerialNumber) = mi_certificadoID.Caption then
        begin
          sbxHTTPClient1.ClientChain.Add(cert);
          encontrado := True;
        end;
      end;
      if not encontrado then
      begin
        Application.MessageBox('Firma no encontrada',
          'Proceso de firma', MB_OK + MB_ICONWARNING
          + MB_DEFBUTTON2);
        Exit;
      end;
      // Carga parámetros cabecera   
      sbxHTTPClient1.RequestParameters.ContentType       := el_Content_Type;
      otros_parametros := 'Accept-Encoding: '             + el_accept_Encoding              + #13#10
                        + 'Content-Encoding: '            + el_Content_Encoding             + #13#10
                        + 'eus-bizkaia-n3-version: '      + el_eus_bizkaia_n3_version       + #13#10
                        + 'eus-bizkaia-n3-content-type: ' + el_eus_bizkaia_n3_content_type  + #13#10
                        + 'eus-bizkaia-n3-data: '         + el_eus_bizkaia_n3_data                  ;
      sbxHTTPClient1.RequestParameters.CustomHeaders := otros_parametros;
      // HTTP
      case rg_Entorno.ItemIndex of
        0: sbxHTTPClient1.PostStream(la_url_pruebas, Cuerpo_Mensaje);
        1: sbxHTTPClient1.PostStream(la_url, Cuerpo_Mensaje);
      end;
      // sbxHTTPClient1.OutputBytes nos devuelve el cuerpo respuesta
      // Guardo el fichero GZIP
      FicheroRespuesta := DMBatu.CDSEnvc.FieldByName('EN070').AsString +'.gz';
      GuardarRespuesta(FicheroRespuesta,sbxHTTPClient1.OutputBytes);
      // Descomprimo el fichero GZIP
      if sbxArchiveReader1.Opened then
         sbxArchiveReader1.Close;

      sbxArchiveReader1.Open(Integer(aftGzip), FicheroRespuesta);

      for i := 0 to sbxArchiveReader1.Files.Count - 1 do
      begin
        Entry := sbxArchiveReader1.Files[i];
        sbxArchiveReader1.Extract(Entry.Path, ExtractFilePath(DMBatu.CDSEnvc.FieldByName('EN070').AsString), false);
        Application.ProcessMessages;
        RenameFile(ExtractFilePath(DMBatu.CDSEnvc.FieldByName('EN070').AsString) + Entry.Path, DMBatu.CDSEnvc.FieldByName('EN070').AsString);
        Application.ProcessMessages;
      end;
      // Tratamiento de la respuesta
      XMLDocument1 := TXMLDocument.Create(nil);

      XMLDocument1.Active := False;
      XMLDocument1.XML.Clear;
      XMLDocument1.LoadFromFile(DMBatu.CDSEnvc.FieldByName('EN070').AsString);

      XMLDocument1.Active := True;
.......

      procedure GuardarRespuesta(const Fichero: String; Respuesta: TBytes);
      var
        stream: TBytesStream;
      begin
        stream := TBytesStream.Create(Respuesta);
        try
          stream.SaveToFile(Fichero);
        finally
          stream.Free;
        end;
      end;

elcharlie 12-11-2020 08:12:30

Cita:

Empezado por juramisa (Mensaje 539053)
Buenos días

Os presento una alternativa a NetHttpClient, quien tiene los componentes de SecureBlackBox 2020 DE.

Gracias por el aporte.
Un pregunta, de esta manera, ¿ya no te da el mensaje de "Error sending data: (12030) La conexión con el servidor finalizó anormalmente"?
Es por curiosidad...
Un saludo.

keys 12-11-2020 08:52:13

Hola a todos. No se si os pasa a vosotros, pero el fichero de respuesta lo tengo que descomprimir dos veces.

Un Saludo.

juramisa 12-11-2020 09:13:03

Contestando a elcharlie, con el certificado que pide clave, sí, la primera vez me da errores. De todas formas lo estoy probando ahora, y el fichero me viene que no es un gzip.

Contestando a keys, descomprimiendo con SecureBlackBox, me ha ido a la primera. Salvo ahora, que parece que yo he tocado algo o el servidor me devuelve mal el cuerpo del mensaje.

Os seguiré informando.

Saludos

elcharlie 12-11-2020 09:13:59

Cita:

Empezado por keys (Mensaje 539055)
Hola a todos. No se si os pasa a vosotros, pero el fichero de respuesta lo tengo que descomprimir dos veces.

Un Saludo.

Si si, me pasa lo mismo.

Cita:

Empezado por juramisa (Mensaje 539056)
Contestando a elcharlie, con el certificado que pide clave, sí, la primera vez me da errores. De todas formas lo estoy probando ahora, y el fichero me viene que no es un gzip.

Contestando a keys, descomprimiendo con SecureBlackBox, me ha ido a la primera. Salvo ahora, que parece que yo he tocado algo o el servidor me devuelve mal el cuerpo del mensaje.

Os seguiré informando.

Saludos

Gracias por la info

juramisa 12-11-2020 09:58:57

Cita:

Empezado por keys (Mensaje 539055)
Hola a todos. No se si os pasa a vosotros, pero el fichero de respuesta lo tengo que descomprimir dos veces.

Un Saludo.

Se te ha solucionado, ahora parece que va bien el servicio.

De todas formar prueba con lo siguiente si quieres, el código completo está en un mensaje anterior.

Código Delphi [-]
       if sbxArchiveReader1.Opened then
         sbxArchiveReader1.Close;

        sbxArchiveReader1.Open(Integer(aftGzip), FicheroRespuesta);

      // Sólo hay un fichero
      for i := 0 to sbxArchiveReader1.Files.Count - 1 do
      begin
        Entry := sbxArchiveReader1.Files[i];
        sbxArchiveReader1.Extract(Entry.Path, ExtractFilePath(el_fichero_a_recibir), false);
        Application.ProcessMessages;
        RenameFile(ExtractFilePath(el_fichero_a_recibir) + Entry.Path, el_fichero_a_recibir);
        Application.ProcessMessages;
      end;

keys 12-11-2020 10:08:54

Gracias.

El problema lo tengo solucionado, lo descomprimo dos veces y punto.

Yo creo que le problema es del componente TnetHttpClient que es con el que estoy haciendo el envío.

La descompresión ya la estaba haciendo mas o menos como tu pones, pero la tengo que hacer dos veces y si la hago manualmente desde el windows tambien la tengo que hacer dos veces.

Un Saludo.

keys 12-11-2020 15:07:03

Hola a todos.

Una curiosidad que igual os sirve de algo. He preguntado a hacienda por la calidad de los datos en TBAI, es decir si los cifs/nifs tienen que estar bien puestos, asi como los datos de los clientes de las facturas. Ya que ahora el sistema acepta todo siempre que esten bien formados. Es decir puedo poner mi dni con el nombre y los apellidos de otro.

y esta es la respuesta.

"La validación contra el censo de contribuyentes se realizará en un futuro, pero destacar que el declarante tiene la obligación de consignar correctamente los datos de las personas declaradas. Dicho incumplimiento es sancionable según el artículo 204 de la Norma Foral General Tributaria del Territorio Histórico de Bizkaia."

Un Salujdo.

elcharlie 12-11-2020 15:30:33

Cita:

Empezado por keys (Mensaje 539065)
Hola a todos.

Una curiosidad que igual os sirve de algo. He preguntado a hacienda por la calidad de los datos en TBAI, es decir si los cifs/nifs tienen que estar bien puestos, asi como los datos de los clientes de las facturas. Ya que ahora el sistema acepta todo siempre que esten bien formados. Es decir puedo poner mi dni con el nombre y los apellidos de otro.

y esta es la respuesta.

"La validación contra el censo de contribuyentes se realizará en un futuro, pero destacar que el declarante tiene la obligación de consignar correctamente los datos de las personas declaradas. Dicho incumplimiento es sancionable según el artículo 204 de la Norma Foral General Tributaria del Territorio Histórico de Bizkaia."

Un Salujdo.

Yo para esas comprobaciones, desde que entró el SII, utilizo este webService https://www2.agenciatributaria.gob.e...ws/VNifV2.wsdl de la agencia tributaria, que funciona muy bien. Os de dejo el pas del servicio por si os interesa.

Un saludo.

keys 13-11-2020 08:40:36

Hola.

Nosotros tambien lo estamos usando. Tambien hay otro sevicio web para comprobar los documentos intracomunitarios VIES. Pero este no lo hemos conseguido hacer funcfionar https://ec.europa.eu/taxation_custom...formation.html.

Cargamos el wsdl y luego a la hora de llamarlo nos dice que el servicio no esta disponible.Si lo intentamos desde el explorador tambien nos pasa lo mismo. No se si es que no esta realmente disponible o que lo estamos haciendo mal.

Alguien ha conseguido llamar a este webservice.

Un Saludo.

elcharlie 13-11-2020 09:10:30

Cita:

Empezado por keys (Mensaje 539076)
Hola.

Nosotros tambien lo estamos usando. Tambien hay otro sevicio web para comprobar los documentos intracomunitarios VIES. Pero este no lo hemos conseguido hacer funcfionar https://ec.europa.eu/taxation_custom...formation.html.

Cargamos el wsdl y luego a la hora de llamarlo nos dice que el servicio no esta disponible.Si lo intentamos desde el explorador tambien nos pasa lo mismo. No se si es que no esta realmente disponible o que lo estamos haciendo mal.

Alguien ha conseguido llamar a este webservice.

Un Saludo.

Yo lo probé hace tiempo y estaba funcionando bien, pero creo recordar, que había problemas con los CIFS de algunos paises. No te creas que es una maravilla.
EDITO: Ahora si que dá el mensaje de "SERVICE_UNAVAILABLE", estarán de mantenimiento...

larax 19-11-2020 19:41:13

Hola buenas tardes

Estoy teniendo problemas a la hora de firmar (nunca he firmado nada hasta ahora y estoy un poco pez)

A la hora de intentar firmar el xml, estoy teniendo este error con el signtool: "Signtool error: No certificates were found that met all in the given criteria"

Es necesario una firma de por ejemplo de ksoftware.

Con una firma de ellos no tendría este problema?

Muchas gracias


La franja horaria es GMT +2. Ahora son las 13:12:20.

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