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)

David M 20-10-2021 17:59:08

Cita:

Empezado por edari (Mensaje 543635)
Contestado

Y efectivamente funciona.


p.d.
Tanto costaba ir de la mano con Guipuzcoa con esto? Vizcaya no sé como va porque todavía no he podido subir nada


Acabo de comprobar que en Gipuzkoa ya no hace falta sustituir tampoco el símbolo + por %2B en la url del QR.
Lo admite directamente en la URL.

Hacer y deshacer...

edari 21-10-2021 00:36:05

Cita:

Empezado por David M (Mensaje 543639)
Acabo de comprobar que en Gipuzkoa ya no hace falta sustituir tampoco el símbolo + por %2B en la url del QR.
Lo admite directamente en la URL.

Hacer y deshacer...


Correcto.


Gracias.

unomasmas 21-10-2021 06:58:07

Cita:

Empezado por rci (Mensaje 543610)
Hola unomasmas, muchas gracias por la respuesta.
Ya le paso el certificado concreto, de la misma forma que se hace con el código que has indicado, añadiendolo a la colección ClientCertificates:
Código:

httpWebRequest.ClientCertificates.Add(this.certificate);
Yo entiendo que esto sirve para decirle cual de los certificados del almacén tiene que utilizar. Pero si no están en el almacén de certificados del usuario (instalados en el navegador) no funciona el post de httpWebRequest para TicketBAI porque no encuentra certificado de cliente.

De hecho en la documentacion de microsoft ya lo indica:
https://docs.microsoft.com/es-es/dot...t?view=net-5.0

hay la frase:

Supongo que tu también lo tienes en el almacén y por eso te funciona cuando no es un servicio de windows.

Muchas gracias de todas formas, a ver si hay suerte.

Gracias por tu respuesta. Efectivamente, yo lo cargo de un fichero, pero también lo tengo en el almacén y seguramente por eso me funciona. No hay nada como leer (pero no lo había hecho). ¡Qué curioso! Intento ayudarte y me ayudas tú a mi. Gracias.

unomasmas 21-10-2021 07:15:11

Cita:

Empezado por rci (Mensaje 543618)
Si, ya leí que Microsoft no recomienda usar HttpWebRequest sino HttpClient :( pero me suena que al principio lo intentamos con HttpClient y no pudimos hacerlo y al final utilizamos HttpWebRequest.

Ahora estoy intentando algo y creo que me va a funcionar. cuando lo confirme lo comparto.

Supongo que es debido a que los métodos de System.Net.Http.HttpClient son asíncronos; me parece haber leído que la comunicación con los servicios de las Diputaciones ha de ser síncrono. Lo dejo aquí pero no estoy muy seguro de esto, así que corregidme si no estoy en lo cierto. Gracias

Suerte con esa nueva vía!

unomasmas 21-10-2021 07:21:27

Cita:

Empezado por espinete (Mensaje 543625)
Gracias por la aclaración. Estaba acostumbrado a la factura electrónica de algunos países de Latinoamérica y, como ellos no requieren el "encadenamiento" me estaba liando intentando hacerlo igual con Ticketbai.

No obstante, me surge entonces otra duda... Si la generación y firma del XML hay que hacerla en el momento de hacer la venta (ya que se necesita el QR para imprimirlo en la factura o tícket), PERO el envío puede ser ahora o dentro de unos días... ¿debo entonces guardar en algún sitio el XML firmado, ya que me hará falta para adjuntarlo al XML del envío de facturas, no?

Me refiero a Bizkaia, pero supongo que se aplica también a Gipuzkoa y Araba, ya que pueden ocurrir errores de conexión, etc. y necesitemos hacer los envíos más adelante.

En el envío, sea de la provincia que sea, se necesita el XML firmado de la factura. Si el envío se puede hacer en cualquier otro momento, independientemente de la firma, necesitaré ese XML a posteriori, por lo que en algún sitio habrá que guardarlo, no?

No es un poco locura almacenar los XML de (presumiblemente) miles de facturas, ya sea en archivos sueltos o en la propia base de datos?

Pues sí, has de conservarlo no solo hasta que lo envíes sino siempre (al menos, quizás, mientras dure la obligación de conservar las facturas, pienso yo) y en ese sentido sí puede considerarse que es una locura teniendo en cuenta que ya se lo enviaste a ellos...

edari 21-10-2021 08:16:29

Y en Vizcaya todavía se multiplica el número de fichero a las otras dos Haciendas (1 por factura).



En Vizcaya está


- El xml de la factura firmada (por no hablar del inicial que está sin firmar)
- El xml de la factura firmada convertido a Base64
- el XML resumen (o como se llame) con todas las facturas que vas a subir empaquetadas en Base64
- El fichero comprimido



:eek:


Yo de momento crearé una carpeta por \empresa\ejercicio\mes y luego una \exporta (para la que subo) y otra \importa (para las respuestas).

Sistel 21-10-2021 10:07:53

Cita:

Empezado por misteradrian (Mensaje 543615)
Hola muy buenas de nuevo,

para el entorno de pruebas he estado utilizando un certificado de representante legal y tira bien.
Pero estoy interesado en pasarme a uno de sello de empresa.
¿Sabéis de alguno que sean más baratos de los de la FNMT?
He enviado correos a varias compañías para obtener información dentro de este listado (no tengo permitido insertar enlaces) :

ttps://esignature.ec.europa.eu/efda/tl-browser/#/screen/tl/ES

En cuanto sepa algo os digo.

Hola misteradrian,

Hace tiempo hice una comparativa de precios de Sello de Empresa:.
Sello de empresa Izenpe: 288,55 € - 3 años : 96,18 €/año
Sello de empresa FNMT: 360 €/año

Saludos

rci 21-10-2021 10:40:36

C# .Net envio TBAI desde un servicio => certificados # SOLUCIÓNADO #
 
Cita:

Empezado por unomasmas (Mensaje 543645)
Supongo que es debido a que los métodos de System.Net.Http.HttpClient son asíncronos; me parece haber leído que la comunicación con los servicios de las Diputaciones ha de ser síncrono. Lo dejo aquí pero no estoy muy seguro de esto, así que corregidme si no estoy en lo cierto. Gracias

Suerte con esa nueva vía!


Hola, gracias unomasmas y a todos los que me han contestado.


Al final he conseguido enviar TicketBAI desde nuestra aplicación de consola arancándola como servicio de Windows y con el usuario System.
Lo que he hecho es añadir el certificado al almacén de certificados del usuario desde el mismo programa justo antes de enviar y funciona!
Es la única forma que he encontrado para añadir el certificado al almacén de certificados del usuario System, porque creo que no se puede iniciar sesión en windows con ese usuario y por lo tanto no lo puedo añadir desde el navegador como en los otros usuarios normales.


Muchas gracias!

Ramon88 21-10-2021 10:58:19

Para comprobar que el servicio esta funcionando correctamente, mandaré esto en el XML:


Código:

<?xml version="1.0" encoding="utf-8"?><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 ">

</T:TicketBai>


Creeis necesario que lo firme? no verdad?
Comprobaré que me devuelve codigo 200 para seguir y mandar ya el xml.

APO 21-10-2021 10:58:43

Cita:

Empezado por APO (Mensaje 543638)
Hola a todos, soy otra "víctima" :confused: del TicketBAI que estoy empezando a encontrarme con los primeros problemas. Ante todo, agradeceros a todos por las aportaciones en este foro ya que son de muchísima ayuda ^\||/qP:-)

El primer problema que me encuentro es cómo cargar los certificados en la constante ACertificateList de la función NetHTTPClient1NeedClientCertificate. He leído en algún post anterior que lo hace el procedimiento DoGetClientCertificates, pero ¿cómo lo hago para llamar a este procedimiento? Perdonar mi ignorancia, pero es que estoy muy verde en todo este asunto. El error que me da al enviar el XML es "Empty certificate list", supongo porque tengo que cargar el certificado primero.
Código Delphi [-]
procedure TfrmEnvelm.NetHTTPClient1NeedClientCertificate(const Sender: TObject; const ARequest: TURLRequest; const ACertificateList: TCertificateList; var AnIndex: Integer);
var
  i: Integer;
begin
  for i := 0 to ACertificateList.Count - 1 do
  begin

    if SameText(ACertificateList[i].Subject, mi_certificado.Caption) then
    begin
      AnIndex := i;
      break;
    end;
  end;
end;
Muchas gracias!!!:)


Hola de nuevo, releyendo y releyendo de nuevo todos los posts, he visto que el problema de que no cargue el certificado al enviar el XML a hacienda está en que hay que indicarle el protocolo de seguridad TLS12.
Código Delphi [-]
NetHTTPClient1.SecureProtocols := [THTTPSecureProtocol.TLS12];
Si no se especifica, no pasa por el evento NetHTTPClient1NeedClientCertificate, que es donde se carga el certificado. El problema es que la propiedad SecureProtocols no está en la versión Delphi XE8 que es la que utilizo. Actualizar Delphi a una versión posterior, por ahora no es una opción que pueda hacer. ¿Alguna sugerencia? ¿Cómo podría solucionarlo?

Muchas gracias!

rci 21-10-2021 11:04:43

Cita:

Empezado por edari (Mensaje 543648)
Y en Vizcaya todavía se multiplica el número de fichero a las otras dos Haciendas (1 por factura).



En Vizcaya está


- El xml de la factura firmada (por no hablar del inicial que está sin firmar)
- El xml de la factura firmada convertido a Base64
- el XML resumen (o como se llame) con todas las facturas que vas a subir empaquetadas en Base64
- El fichero comprimido



:eek:


Yo de momento crearé una carpeta por \empresa\ejercicio\mes y luego una \exporta (para la que subo) y otra \importa (para las respuestas).


¿Es necesario guardar todo esto?
Nosotros solamente guardamos el fichero firmado ticketBAI, comprimido dentro de un campo de la base de datos.
Las respuestas no las guardamos, solamente si se ha enviado correctamente o no y el error si es el caso.
Para batuz, a partir del fichero firmado ticketBAI siempre podemos volver a generar los otros...

¿Lo estamos haciendo mal?:confused:

HerensugeBeltz 21-10-2021 11:16:59

Cita:

Empezado por Ramon88 (Mensaje 543652)
Para comprobar que el servicio esta funcionando correctamente, mandaré esto en el XML:


Código:

<?xml version="1.0" encoding="utf-8"?><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 ">

</T:TicketBai>


Creeis necesario que lo firme? no verdad?
Comprobaré que me devuelve codigo 200 para seguir y mandar ya el xml.

Yo envío únicamente
Código:

<?xml version="1.0" encoding="utf-8"?>
, por supuesto sin firmar, y recibo HTTP 200 cuando el servicio está activo.

HerensugeBeltz 21-10-2021 11:20:57

Cita:

Empezado por rci (Mensaje 543654)
Nosotros solamente guardamos el fichero firmado ticketBAI, comprimido dentro de un campo de la base de datos.

Esto me suscita una duda que espero me pueda aclarar alguien:
Si se comprime un fichero XML firmado, al descomprimirse, la firma sigue siendo válida?
Gracias.

keys 21-10-2021 11:23:55

Cita:

Empezado por HerensugeBeltz (Mensaje 543656)
Esto me suscita una duda que espero me pueda aclarar alguien:
Si se comprime un fichero XML firmado, al descomprimirse, la firma sigue siendo válida?
Gracias.

El único fichero que hay que guardar es el xml firmado y lógicamente al comprimir/descomprimir el fichero no cambia.

HerensugeBeltz 21-10-2021 11:29:47

Gracias por la respuesta y la sugerencia anterior.
Mi base de datos es ISO-8859-1 y tenía mis dudas si, al grabar un XML firmado y después recuperarlo, éste seguiría siendo válido por el cambio de codificación.
Supongo que la mejor opción para grabar los XMLs firmados en la base de datos es comprimidos en un campo BLOB binario: me evito problemas de codificación y ahorro espacio.

rci 21-10-2021 11:37:58

Cita:

Empezado por keys (Mensaje 543657)
El único fichero que hay que guardar es el xml firmado y lógicamente al comprimir/descomprimir el fichero no cambia.

Muchas gracias Keys

Neftali [Germán.Estévez] 21-10-2021 11:59:57

Cita:

Empezado por rci (Mensaje 543654)
¿Es necesario guardar todo esto?
Nosotros solamente guardamos el fichero firmado ticketBAI, comprimido dentro de un campo de la base de datos.
Las respuestas no las guardamos, solamente si se ha enviado correctamente o no y el error si es el caso.
Para batuz, a partir del fichero firmado ticketBAI siempre podemos volver a generar los otros...
¿Lo estamos haciendo mal?:confused:


Creo que lo único necesario es el XML firmado de cada factura (a efectos de inspecciones).
Nosotros tampoco guardamos ni los envíos (BATUZ), ni las respuestas, ni lo generado en pasos intermedios.

rci 21-10-2021 12:42:15

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 543660)
Creo que lo único necesario es el XML firmado de cada factura (a efectos de inspecciones).
Nosotros tampoco guardamos ni los envíos (BATUZ), ni las respuestas, ni lo generado en pasos intermedios.


Muchas gracias Neftali

Ramon88 21-10-2021 13:30:52

Cita:

Empezado por HerensugeBeltz (Mensaje 543655)
Yo envío únicamente
Código:

<?xml version="1.0" encoding="utf-8"?>
, por supuesto sin firmar, y recibo HTTP 200 cuando el servicio está activo.


A mi así me da error, Si no pongo esta parte me da error:
Código:

<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 ">

Ramon88 21-10-2021 19:33:56

Hay algo que no veo claro, estoy preguntándolo pero no me contestan.


Subes una factura, da Rechazada, ese número de factura, no esta en su sistema, pero tu ya lo has utilizado. En el caso de facturas simplificadas estas deben ser correlativas tambien. No puedes seguir subiendo facturas por que ya da error de encadenamiento.



¿Como actuas en este caso?


La franja horaria es GMT +2. Ahora son las 01:33:10.

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