Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-01-2021
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 419
Poder: 17
espinete Va camino a la fama
Resumen para envíos a Bizkaia

Iba a crear un post-resumen de todo el proceso, al menos de lo que ya tengo, pero creo que ahora mismo no soy el que más experiencia tiene con TicketBAI. De hecho empecé a elaborar el post y son tantos pasos que cuesta explicarlo, así que por ahora lo dejo hasta que esté familiarizado con todo esto.

Ya he conseguido crear el XML final (el LROE), que contiene los TicketBAI firmados a enviar, en Base64 y comprimirlo en ZIP, pero al realizar un envío usando NetHTTPClient solo obtengo Bad Request, así que no sé cual de las 1000 cosas que hay que hacer previamente es la que está mal.

Primero genero el xml del LROE, a partir de uno de los esquemas XSD, concretamente el del envío de "ingresos con factura con software garante". Como son datos de prueba no sé si es que falta (o sobra) algún dato.
Obviamente el fichero "firmado.xml" es el TicketBAI firmado con certificado digital.

Código Delphi [-]
    
    f := NewLROEPF140IngresosConFacturaConSGAltaPeticion;

    f.Cabecera.Modelo:='140';
    f.Cabecera.Ejercicio:=2021;
    f.Cabecera.Capitulo:='';
    f.Cabecera.SubCapitulo:='1.1';
    f.Cabecera.Operacion:='A00';  //A00 = Alta / M00 = Modificación
    f.Cabecera.Version:='';

    f.Cabecera.ObligadoTributario.NIF:='XXXXXXX';
    f.Cabecera.ObligadoTributario.ApellidosNombreRazonSocial:='XXXXXXXXXXXX';

    with f.Ingresos.Add do
    begin
        TicketBai := EncodeFileToBase64('firmado.xml');

        with Renta.Add do
        begin
            Epigrafe:='';
            ImporteIngresoIRPF:='121';
            IngresoAComputarIRPFDiferenteBaseImpoIVA:='121';
            CriterioCobros:='';
        end;
    end;

    XMLDocument2.XML.Text:=f.XML;
    xmldocument2.Active:=True;
    xmldocument2.SaveToFile('lroe.xml');

Tengo dudas con la compresión de dicho XML en gzip. He usado System.ZLib para comprimir el lroe.xml con la siguiente función, pero no estoy seguro de que sea la forma correcta.

Código Delphi [-]
procedure comprimir(origen,destino:string);
var LInput, LOutput: TFileStream;
    LZip: TZCompressionStream;
begin
    { Create the Input, Output, and Compressed streams. }
    LInput := TFileStream.Create(origen, fmOpenRead);
    LOutput := TFileStream.Create(destino, fmCreate);
    LZip := TZCompressionStream.Create(clDefault, LOutput);

    { Compress data. }
    LZip.CopyFrom(LInput, LInput.Size);

    { Free the streams. }
    LZip.Free;
    LInput.Free;
    LOutput.Free;
end;

El envío del LROE lo realizo usando código que encontré en este hilo. No tiene mucha complejidad, pero por si acaso lo pongo:

Código Delphi [-]
    
    NetHTTPRequest1.CustomHeaders['Accept-Encoding'] := 'gzip';
    NetHTTPRequest1.CustomHeaders['Content-Encoding'] := 'gzip';
    NetHTTPRequest1.CustomHeaders['Content-Type'] := 'application/octet-stream';
    NetHTTPRequest1.CustomHeaders['eus-bizkaia-n3-version'] := '1.0';
    NetHTTPRequest1.CustomHeaders['eus-bizkaia-n3-content-type'] := 'application/xml';

    json :=  '{"con": "LROE", "apa": "1.1", "inte": {"nif": "XXXXXXX","nrs": "XXXXXXXXXX","ap1": "","ap2": ""},"drs": {"mode": "140","ejer": "2021"}}';

    NetHTTPRequest1.CustomHeaders['eus-bizkaia-n3-data'] := json;

    ss := TStringStream.Create('', TEncoding.UTF8);
    ss.Position := 0;
    ss.LoadFromFile('archivo.gz');

    NetHTTPRequest1.MethodString := 'POST';
    Memo1.Text := NetHTTPClient1.Post('https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena', ss).ContentAsString(tencoding.UTF8);

Pero en el Memo no obtengo nada. Tengo que irme al evento RequestCompleted, y con AResponse.StatusCode y AResponse.StatusText solo obtengo 400 - Bad Request.

Sé que hoy el entorno de pruebas no estará operativo, pero me gustaría saber si lo anterior es correcto o no, porque dudo mucho que las respuestas a las peticiones sean lo suficientemente detalladas como para saber cual es el error exacto en los envíos.

Gracias de antemano. Espero que este post pueda servir también como pequeño resumen del proceso para los que empiecen desde cero, aunque hay muchísimos detalles que faltan.
Responder Con Cita
  #2  
Antiguo 27-01-2021
Dadaista Dadaista is offline
Registrado
 
Registrado: jun 2020
Posts: 2
Poder: 0
Dadaista Va por buen camino
Hola buenos dias

Este es mi primer post desde que me di de alta. Despues de leer y releer este Hilo, por fin me atrevo a escribir. Soy un programador independiente con una solucion informatica la cual utilizan en un par de tiendas en vizcaya, entre otras. Es un simple programa de ventas que emite tickets de caja. Realmente yo programo en Java pero me avisaron del tema de ticketbai y despues de dar muchas vueltas por internet, encontré éste foro en el que he podido encontrar bastante información al respecto... para mi, el mejor sitio... despues de lo que he visto que hay por la red.

Lo que os digo anteriormente. Me llamaron desde vizcaya y me dijeron oye!!! ticketbai!!! y encontré este foro. Tengo algunas dudas que no se si alguno de vosotros podria contestarme ya que veo que en el hilo hay personas que saben bastante.

Mi programa es una simulacion de una caja resgistradora que emite tickets de caja desde una computadora con windows 10. Los propietarios de las tiendas pasan la informacion de las ventas a sus asesores/contables y son estos últimos los que se encargan de todo el papeleo con hacienda.

Mi pregunta es, si vosotros veis necesario/obligatorio que yo implemente Ticketbai en mi pequeña aplicación para las personas dueñas de las tiendas donde se utiliza mi aplicacion que se encuentran en Euskadi.

En caso que considereis que es necesario.. los ficheros XML quien los firmaria?... la persona dueña de la tienda o yo?

Perdonad por ser tan extenso y por desviarme un poco del tema central de este hilo pero es que no se me ocurre un sitio mejor donde preguntar. Muchas gracias por leer.

Salu2
Responder Con Cita
  #3  
Antiguo 27-01-2021
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.130
Poder: 23
keys Va por buen camino
Cita:
Empezado por Dadaista Ver Mensaje
Hola buenos dias

Este es mi primer post desde que me di de alta. Despues de leer y releer este Hilo, por fin me atrevo a escribir. Soy un programador independiente con una solucion informatica la cual utilizan en un par de tiendas en vizcaya, entre otras. Es un simple programa de ventas que emite tickets de caja. Realmente yo programo en Java pero me avisaron del tema de ticketbai y despues de dar muchas vueltas por internet, encontré éste foro en el que he podido encontrar bastante información al respecto... para mi, el mejor sitio... despues de lo que he visto que hay por la red.

Lo que os digo anteriormente. Me llamaron desde vizcaya y me dijeron oye!!! ticketbai!!! y encontré este foro. Tengo algunas dudas que no se si alguno de vosotros podria contestarme ya que veo que en el hilo hay personas que saben bastante.

Mi programa es una simulacion de una caja resgistradora que emite tickets de caja desde una computadora con windows 10. Los propietarios de las tiendas pasan la informacion de las ventas a sus asesores/contables y son estos últimos los que se encargan de todo el papeleo con hacienda.

Mi pregunta es, si vosotros veis necesario/obligatorio que yo implemente Ticketbai en mi pequeña aplicación para las personas dueñas de las tiendas donde se utiliza mi aplicacion que se encuentran en Euskadi.

En caso que considereis que es necesario.. los ficheros XML quien los firmaria?... la persona dueña de la tienda o yo?

Perdonad por ser tan extenso y por desviarme un poco del tema central de este hilo pero es que no se me ocurre un sitio mejor donde preguntar. Muchas gracias por leer.

Salu2
Hola.

El envío del fichero va dentro de un modelo de hacienda(140/240) y por lo tanto será tu cliente quien determine si el envío lo va a hacer el o la asesoria. Si tu aplicación emite tickets/facturas tiene que ser tu aplicación el que genere el ficheo TBai si o si, ya que en el ticket tienes que imprimir el código qr y para eso necesitas generar el fichero, y este es el que se tiene que enviar.

Luego el envío lo tendrá que hacer tu aplicación o tendrás que pasar los ficheros xml al asesor para que el realice el envío, siempre y cuando su aplicacion (la del asesor) permita realizar el envio de esos ficheros generados por otra aplicación.

Todo esto sólo en Bizkaia, ya que en Gipuzkoa el envío hay que realizarlo según se genere la factura.
Responder Con Cita
  #4  
Antiguo 27-01-2021
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.874
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Dadaista Ver Mensaje
Los propietarios de las tiendas pasan la informacion de las ventas a sus asesores/contables y son estos últimos los que se encargan de todo el papeleo con hacienda.
No comentas "cómo pasan los propietarios esa información". Si es de forma telemática o más manual. De todas formas, sólo evitarías el paso del envío, pero creo que eso es lo de menos, porque es lo más sencillo, todo el trabajo anterior debe hacerlo tu aplicación.

Cita:
Empezado por Dadaista Ver Mensaje
Mi pregunta es, si vosotros veis necesario/obligatorio que yo implemente Ticketbai en mi pequeña aplicación para las personas dueñas de las tiendas donde se utiliza mi aplicacion que se encuentran en Euskadi.
Como han comentado, tu aplicación es la que genera tickets, por lo tanto es tu aplicación es la que al generar el ticket, debe crear el archivo XML y firmarlo. Esa información la necesitas para el siguiente ticket.

También tienes que generar el código QR y añadirlo al ticket que se lleva el cliente.

Supongo que si has revisado el hilo, ya la habrás visto, pero esta imagen es bastante explicativa del proceso.
Pasos al facturar en TicketBAI

Cita:
Empezado por Dadaista Ver Mensaje
En caso que considereis que es necesario.. los ficheros XML quien los firmaria?... la persona dueña de la tienda o yo?
Como te hemos comentado los ficheros los debe firmar tu aplicación utilizando un certificado, que lo lógico es que vaya a nombre de la dueña, que es la que está tributando.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 27-01-2021
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 419
Poder: 17
espinete Va camino a la fama
Buenas...

(Parece ser que ) por fin he conseguido hacer un envío. Al menos ya no obtengo Bad Request. He usado el siguiente código facilitado por keys un par de páginas atrás. La única diferencia que había con el mío era la forma de adjuntar el archivo comprimido en la petición:

Código Delphi [-]
var json : string;
    RequestBody: TFileStream;
    AResponse: IHTTPResponse;
begin
    RequestBody := TFileStream.Create('archivo.gz', fmOpenRead);

    NetHTTPClient1.SecureProtocols := [THTTPSecureProtocol.TLS12];
    NetHTTPClient1.CustomHeaders['Accept-Encoding'] := 'gzip';
    NetHTTPClient1.CustomHeaders['Content-Encoding'] := 'gzip';
    NetHTTPClient1.CustomHeaders['Content-Type'] := 'application/octet-stream';
    NetHTTPClient1.CustomHeaders['eus-bizkaia-n3-version'] := '1.0';
    NetHTTPClient1.CustomHeaders['eus-bizkaia-n3-content-type'] := 'application/xml';

    //Formamos los parametros json de entrada
    json :=  f_cabecera_LROE('LROE', //concepto
             '1.1',  //subcapitulo
             'XXXXXXXXX',  //NIF
             'XXXXXXXXXXXXXXXXX',   //Nombre o Razón Social
             '',   //Primer Apellido
             '',   //Segundo Apellido
             '140',   //140 o 240
             '2021'); //Ejercicio

    NetHTTPClient1.CustomHeaders['eus-bizkaia-n3-data'] := json;
    AResponse := NetHTTPClient1.Post('https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena',RequestBody);

    memo2.Lines.Append(inttostr(AResponse.StatusCode)+' '+AResponse.StatusText);

    memo2.Lines.Append(AResponse.ContentAsString());
end;

Ahora obtengo 200 - OK, pero nada más. No sé cómo obtener la respuesta al envío, que por lo que he leído, es un archivo comprimido que contiene un XML.

AResponse.ContentAsString() no contiene nada. Está en blanco.

¿Alguien sabe qué hacer a continuación?
Responder Con Cita
  #6  
Antiguo 27-01-2021
tejano tejano is offline
Miembro
 
Registrado: dic 2020
Posts: 132
Poder: 5
tejano Va por buen camino
Fichero LROE comprimido

Buenos días,

Que programa estáis utilizando para generar el archivo gz comprimido.

Saludos
Responder Con Cita
  #7  
Antiguo 27-01-2021
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 419
Poder: 17
espinete Va camino a la fama
5 mensajes más arriba tienes un código para comprimir un archivo en .gz usando la librería ZLib que trae Delphi
Responder Con Cita
  #8  
Antiguo 27-01-2021
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.874
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Yo las primeras pruebas las hice directamente con Postman y/o con Imsomnia (similar). En ambos casos se permite instalar un certificado cliente y para probar los envíos y obtener las respuestas son suficientes.

Lo digo porque es una forma de comprobar el fichero, la sintaxis, la codificación,... y dejar de lado la codificación en Delphi.
Una vez que sabemos que el fichero es correcto (o que nos tiene que dar determinado error), podemos empezar a codificar.

De esta forma compartimentamos problemas. Si probamos todo a la vez, no sabemos si es del fichero, del certificado, del firnado, del comprimido, del los parámetros, de la forma de envío,...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
SII -Nuevo sistema de la Agencia Tributaria española de envío de datos vía Webservice newtron Internet 3706 Hace 2 Semanas 09:38:43
Como utilizar la ayuda del nuevo Sistema Operativo gluglu Humor 3 24-09-2007 09:39:05
Aplicacion Agencia De Viajes ArdiIIa Varios 9 20-01-2007 16:49:53
El Vasco Aguirre Al González La Taberna 5 26-05-2006 09:22:28
Microsoft ha lanzado su nuevo sistema operativo DarkByte Humor 0 25-01-2004 09:21:14


La franja horaria es GMT +2. Ahora son las 19:15:17.


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