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)

ermendalenda 23-11-2021 19:50:42

Con este Master que estamos haciendo nos va a salir mejor currar de asesor de ticketbai

Ramon88 23-11-2021 21:23:45

Sigo con el error 400 y no se por donde tirar.
Estoy revisando el Json, y aunque veo algunas diferencias con el que te ponen de ejemplo, probando el suyo de ejemplo tal cual, todo seguido sin "" me da el mismo error. Nose si será eso o que, os pongo mi Json a ver si veis algo raro.
Código SQL [-]
"{""con"":""LROE"",""apa"":""1.1"",""inte"":[{""nif"":""A99110237"",""nrs"":""GLe7V235qZ"",""ap1"":""Pu125yvAaQ"",""ap2"":""BjvfghGZq5""}],""drs"":[{""mode"":""140"",""ejer"":""2021""}]}"

Sistel 23-11-2021 22:01:40

Cita:

Empezado por Ramon88 (Mensaje 544134)
Sigo con el error 400 y no se por donde tirar.
Estoy revisando el Json, y aunque veo algunas diferencias con el que te ponen de ejemplo, probando el suyo de ejemplo tal cual, todo seguido sin "" me da el mismo error. Nose si será eso o que, os pongo mi Json a ver si veis algo raro.
Código SQL [-]
"{""con"":""LROE"",""apa"":""1.1"",""inte"":[{""nif"":""A99110237"",""nrs"":""GLe7V235qZ"",""ap1"":""Pu125yvAaQ"",""ap2"":""BjvfghGZq5""}],""drs"":[{""mode"":""140"",""ejer"":""2021""}]}"

Hola Ramon88,

Yo para comprobar si una estructura JSON está correcta, utilizo Insomnia (al igual que para hacer pruebas de envío).
Al pasar tu JSON por Insomnia (quitando la " inicial y la " final) veo que da error.
Parece que no le gusta lo de repetir " dos veces en cada sitio donde debería haber una sola "

Mira a ver si es eso.

Saludos

keys 24-11-2021 08:27:58

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 544128)
Yo estoy usandolo de esta forma y tampoco me da problemas.

Código Delphi [-]
WinStorage.SystemStores.BeginUpdate;
  try
    WinStorage.SystemStores.Clear;
    WinStorage.SystemStores.Add('MY');
    WinStorage.AccessType := aAccessType;
  finally
    WinStorage.SystemStores.EndUpdate;
  end;

SecureBlackbox 16.0.326

SecureBlackbox 16.0.326


Lo primero gracias a todos. Lo de ejecutar como administrador ya lo había probado, aunque estoy con el usuario administrador.

Para neftali. si accedes asi ¿como le dices luego al componente de firma cual es el certificado? yo lo hago asi.
Código Delphi [-]
if CertificateStorage.Opened then
     CertificateStorage.Close(True);

  //Este es el punto donde el programa se cierra
  CertificateStorage.Open('system://currentuser@localhost/?store=MY');

  encontrado := False;

 //Aqui busco el certificado con el que firmar
  for i := 0 to CertificateStorage.Certificates.Count - 1 do
  begin
    cert := CertificateStorage.Certificates[i];
    if bintostr(cert.SerialNumber) = el_firmante.r_Nombre_firma then
     begin
       sbxXAdESSigner1.SigningCertificate := cert;
       encontrado := True;
       Break;
     end;
  end;


  if not Encontrado then
   begin //mostrar error
      Mensaje(nil, 'No se encuentra la firma');
      exit;
   end;

  sbxXAdESSigner1.SigningCertificate := cert;

 //Continuo con el resto de la firma

Solo me queda probar el programa que indica juramisa, aunque el autofirmacommanline funciona bien y probar como solo lectura como dice HerensugeBeltz. Esto lo haré a lo largo de la mañana cuando pueda conectarme con el cliente.

Esta claro que es un problema de su ordenador ya que el programa esta corriendo en mas de 100 usuarios y esta funcionando correctamente.

Pasar un buen día TicketBAI. :cool:

Ramon88 24-11-2021 10:03:46

Cita:

Empezado por Sistel (Mensaje 544137)
Hola Ramon88,

Yo para comprobar si una estructura JSON está correcta, utilizo Insomnia (al igual que para hacer pruebas de envío).
Al pasar tu JSON por Insomnia (quitando la " inicial y la " final) veo que da error.
Parece que no le gusta lo de repetir " dos veces en cada sitio donde debería haber una sola "

Mira a ver si es eso.

Saludos


Gracias por probarlo, yo lo que veo no es que lo repita, es que para cada parte le pone las " "
Realmente ese es el contenido de la variable que mando.


Pero no entiendo por que no sirve, por que lo tengo funcionando así en varios sitios y funciona.


Voy a ver que me invento para cambiarlo.

Neftali [Germán.Estévez] 24-11-2021 10:06:05

Cita:

Empezado por keys (Mensaje 544142)
Para neftali. si accedes asi ¿como le dices luego al componente de firma cual es el certificado? yo lo hago asi.


Nosotros guardamos el HASH del certificado.
Con ese procedimiento cargas los certificados disponibles usando la clase TElWinCertStorage.
Aquí hay un ejemplo de cómo acceder a esa clase. Está en VB, pero verás que es muy parecido al código que he puesto yo.

Desde esa clase puedes acceder a los certificados y obtener elementos de la clase TElX509Certificate.

rci 24-11-2021 15:46:00

nuevo entorno de pruebas Batuz
 
Buenas tardes, a ver si lo he entendido bien, para utilizar el entorno de pruebas de batuz que se puso en marcha recientemente, a parte ser necesaria una inscripción previa de la empresa desarrolladora, también debemos utilizar los certificados de pruebas y especificar unos datos del obligado tributario ficticios que nos proporcionará batuz.


Por lo tanto no podemos poner nuestro programa a un cliente final nuestro y dejarlo en entorno de pruebas batuz para que envie con su certificado y sus datos de obligado tributario, para ir probando antes de pasar al entorno real a partir del 1 de enero del 2022 (período voluntario)


pues si es así pierde toda la gracia ese entorno de pruebas...



Es así o me equivoco?


Muchas gracias

sEngine 24-11-2021 18:57:24

Como haceis para coger la respuesta de Bizkaia desde delphi?

La respuesta me da esto

Código Delphi [-]
#$1F'�'#8#8#0#0#0#0#0'�5251550_peticion_Resp.xml'#0'�T]��0'#$14'}�W0�k��+:Ȏâ�;�k�j��'#4'��.'#$10'�����'#5'E���)�p�9����'#6'�a'#$1F'��_�'#5'e�@�[����g'#1'�7'#3'u�'#$18'5'#$D'U'#$11#$12'�'#1#$E'YL'#6'�;'#$11'��0c��'#$7F'��:ӗvG'#$1B'a_�'#$1C#$B'''  ��'#6'X�,�����3"��@�'#2'2��C�@�J��>B�ݮ�a�~�H*К�=�dC�'#$1B'ʳ(k�����'#8'�#2'��'#$17'�j5'#$14'xL'#$1B'{�'''#$1C#$1F'�<��'#5'$d'#$16'46��'#4'm�P�BJ7�黄��'#$18'-�T'#$13'%�5'#1'I'#$1F',��'#$1A'��aIY'#$1D'�'#0'�'#0'�'#8'J��M�O��jkm�)㊊'#$17'�'#$D#$E#$0602'S/��W��0y'#$1E'Y�^��4�wo�,�'#$13'�'#9#9'C'#$1A'01a���'#$C#$7F'��̧8��_����r�]'#$1A'��'#$1F#$11'��N��x''�;'#$7F'm���r���'#$12'3s�'#7'c>b�Ĕ'#$13'AbynՈ�[\�ڝ��73g'#$14'��w��;��֨:Q '#1'�ּk|�'#$05F5'�SnJ'#$15'9���r�'#$19#$C'����J�"w��s'#0'�tM��o'#$1D#$7F'<��%v'#$18'5�))(��'#$14'�r�  �&iT'#$10'�'#$1E'�V%�^����'#$13#$12'd�'#$15#$17'��⣳���=�'#$1B'�'#2'�'#$1B'�'#$1C'�On�u''s�#��9'#$11'  l�9�%��Q'#7'�d?im�z���pM�?<��'#$F'�)|'#$10'['#5#0#0
y no se como guardarlo en un archivo, ya que siempre me esta diciendo que es un archivo erroneo.
He probado con estas opciones


Código Delphi [-]
   Respuesta := idhttp_fac.Post('https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena',RequestBody);
    AResponse := TStringStream.Create(Respuesta);
    Comprimido := TFileStream.Create(ExtractFilePath(Application.ExeName)+'\LROE_respuesta.gz', fmCreate);
    Comprimido.CopyFrom(AResponse, AResponse.Size);


Código Delphi [-]
    MyText := TStringList.Create;
    MyText.Add(Respuesta);
    MyText.SaveToFile(ExtractFilePath(Application.ExeName)+'\LROE_respuesta2.gz',TEncoding.UTF8);
    MyText.Free;

unomasmas 24-11-2021 20:34:07

Cita:

Empezado por rci (Mensaje 544150)
Buenas tardes, a ver si lo he entendido bien, para utilizar el entorno de pruebas de batuz que se puso en marcha recientemente, a parte ser necesaria una inscripción previa de la empresa desarrolladora, también debemos utilizar los certificados de pruebas y especificar unos datos del obligado tributario ficticios que nos proporcionará batuz.

Por lo tanto no podemos poner nuestro programa a un cliente final nuestro y dejarlo en entorno de pruebas batuz para que envie con su certificado y sus datos de obligado tributario, para ir probando antes de pasar al entorno real a partir del 1 de enero del 2022 (período voluntario)

pues si es así pierde toda la gracia ese entorno de pruebas...

Es así o me equivoco?

Muchas gracias

Yo también estoy sorprendido, aunque no entiendo para qué es necesaria la inscripción previa de la empresa desarrolladora si en el XML TicketBAI hay que indicar estos datos:
▪ Licencia TBAI: TBAIBI00000000PRUEBA
▪ NIF entidad desarrolladora: A99800005
▪ Nombre: SOFTWARE GARANTE TICKETBAI PRUEBA
▪ Versión: 1.0

O sea, te dan estos datos, te dan los certificados que puedes usar y tras la inscripción te indicarán los datos de clientes con los que hacer las pruebas. Todo predefinido ¿No? Si estos datos de clientes se hacen públicos ¿Para qué es necesaria la inscripción?

tejano 25-11-2021 08:35:54

La WSDL es https://sarrerak.bizkaia.eus/N3B4000M/aurkezpena, ya no es https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena

Cita:

Empezado por sEngine (Mensaje 544156)
Como haceis para coger la respuesta de Bizkaia desde delphi?

La respuesta me da esto

Código Delphi [-]
#$1F'�'#8#8#0#0#0#0#0'�5251550_peticion_Resp.xml'#0'�T]��0'#$14'}�W0�k��+:Ȏâ�;�k�j��'#4'��.'#$10'�����'#5'E���)�p�9����'#6'�a'#$1F'��_�'#5'e�@�[����g'#1'�7'#3'u�'#$18'5'#$D'U'#$11#$12'�'#1#$E'YL'#6'�;'#$11'��0c��'#$7F'��:ӗvG'#$1B'a_�'#$1C#$B'''  ��'#6'X�,�����3"��@�'#2'2��C�@�J��>B�ݮ�a�~�H*К�=�dC�'#$1B'ʳ(k�����'#8'�#2'��'#$17'�j5'#$14'xL'#$1B'{�'''#$1C#$1F'�<��'#5'$d'#$16'46��'#4'm�P�BJ7�黄��'#$18'-�T'#$13'%�5'#1'I'#$1F',��'#$1A'��aIY'#$1D'�'#0'�'#0'�'#8'J��M�O��jkm�)㊊'#$17'�'#$D#$E#$0602'S/��W��0y'#$1E'Y�^��4�wo�,�'#$13'�'#9#9'C'#$1A'01a���'#$C#$7F'��̧8��_����r�]'#$1A'��'#$1F#$11'��N��x''�;'#$7F'm���r���'#$12'3s�'#7'c>b�Ĕ'#$13'AbynՈ�[\�ڝ��73g'#$14'��w��;��֨:Q '#1'�ּk|�'#$05F5'�SnJ'#$15'9���r�'#$19#$C'����J�"w��s'#0'�tM��o'#$1D#$7F'<��%v'#$18'5�))(��'#$14'�r�  �&iT'#$10'�'#$1E'�V%�^����'#$13#$12'd�'#$15#$17'��⣳���=�'#$1B'�'#2'�'#$1B'�'#$1C'�On�u''s�#��9'#$11'  l�9�%��Q'#7'�d?im�z���pM�?<��'#$F'�)|'#$10'['#5#0#0
y no se como guardarlo en un archivo, ya que siempre me esta diciendo que es un archivo erroneo.
He probado con estas opciones


Código Delphi [-]
   Respuesta := idhttp_fac.Post('https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena',RequestBody);
    AResponse := TStringStream.Create(Respuesta);
    Comprimido := TFileStream.Create(ExtractFilePath(Application.ExeName)+'\LROE_respuesta.gz', fmCreate);
    Comprimido.CopyFrom(AResponse, AResponse.Size);


Código Delphi [-]
    MyText := TStringList.Create;
    MyText.Add(Respuesta);
    MyText.SaveToFile(ExtractFilePath(Application.ExeName)+'\LROE_respuesta2.gz',TEncoding.UTF8);
    MyText.Free;


Neftali [Germán.Estévez] 25-11-2021 08:39:57

Cita:

Empezado por unomasmas (Mensaje 544158)
Yo también estoy sorprendido, aunque no entiendo para qué es necesaria la inscripción previa de la empresa desarrolladora si en el XML TicketBAI hay que indicar estos datos:
▪ Licencia TBAI: TBAIBI00000000PRUEBA
▪ NIF entidad desarrolladora: A99800005
▪ Nombre: SOFTWARE GARANTE TICKETBAI PRUEBA
▪ Versión: 1.0
▪ Solicitar datos de los interesados para 140/240 (NIF y NombreApellidos / NIF y RazonSocial)


Se que han tenido problemas con envíos de prueba a PRODUCCION, imagino que de esta manera pueden filtrar esos errores, aunque hubiera bastado con la Licencia (un único datos), no hacía falta cambiarlos todos y solicitar un segundo registro.

Como en muchas otras cosas, me da la impresión de que sólo están pensando en su beneficio y no están pensando en las empresas desarrolladoras.

Cita:

Empezado por rci (Mensaje 544150)
Por lo tanto no podemos poner nuestro programa a un cliente final nuestro y dejarlo en entorno de pruebas batuz para que envie con su certificado y sus datos de obligado tributario


Como ya dijeron en su día, el entorno de PREPRODUCCION lo tienen pensado sólo para utilizar en las empresas desarrolladoras. No debería haber ningun cliente real en PRE (al menos es lo que pretenden).

Neftali [Germán.Estévez] 25-11-2021 08:44:13

Cita:

Empezado por tejano (Mensaje 544160)


Funcionan las 2.
Desde hace unos días ya está de nuevo en marcha el servidor de PREPRODUCCION:
https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena
NOTA: Para poder utilizarlo hay que hacer esto.

Y el de PRODUCCION (que por ahora es "a modo de pruebas") es este:
https://sarrerak.bizkaia.eus/N3B4000M/aurkezpena
NOTA: Este se cerrará el 10 de Diciembre :(:(:o

un lío vamos...

keys 25-11-2021 09:22:15

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 544146)
Nosotros guardamos el HASH del certificado.
Con ese procedimiento cargas los certificados disponibles usando la clase TElWinCertStorage.
Aquí hay un ejemplo de cómo acceder a esa clase. Está en VB, pero verás que es muy parecido al código que he puesto yo.

Desde esa clase puedes acceder a los certificados y obtener elementos de la clase TElX509Certificate.

Hola a todos.

Al final hablando con SecureBlackBox me han dado la siguiente solución.
Cita:

Your version of SecureBlackbox used a “DRU” approach to incorporate the SecureBlackbox product DLL into your application and load it manually in run time. That was an efficient and handy approach, but it proved to have one drawback. Certain variants of the operation system and antimalware apps take that approach suspiciously, and stop the applications from loading the DLL in that way right in the middle of the process (effectively, by making the application crash). The behaviour you are observing looks very similar to that.
That’s why we eventually stopped offering that option and suggested to always ship the SecureBlackbox DLL in the “normal” way, by deploying it alongside the application. This eliminates any side effects caused by DEP and anti-malware software.
To fix the issue on your side, please do the following two things:
1) Define USESECUREBLACKBOXDLL globally in your project settings.
2) When deploying your application, please put the SecureBlackbox20.dll file (you will find it in the \lib directory in the SBB folder) alongside your application’s executable
Lo he probado y funciona correctamente.

Ahora el problema lo tengo a la hora de firmar el fichero con sbxXAdESSigner1.Sign(); que despues de cargarle todos los parametros me sale el siguiente error.

Cita:

1048581 The certificate does not have a associated private key
El certificado le he puesto uno nuestro y le pasa lo mismo. Por algún motivo no puede acceder a la clave privada de los certificados.

Un Saludo.

rci 25-11-2021 09:25:10

nuevo entorno de pruebas Batuz
 
Gracias por las respuestas unomasmas y Neftali

Neftali [Germán.Estévez] 25-11-2021 09:43:49

Cita:

Empezado por sEngine (Mensaje 544156)
Como haceis para coger la respuesta de Bizkaia desde delphi?


Ten en cuenta que la respuesta en el caso de Bizkaiano puedes tratarla como texto para recuperarla o guardarla en disco.
He visto que usas TStringStream o TStringList. Inténtalo con TStream, porque al utilizar etructuras para strings se producen conversiones no deseadas.


Crea un TFileStream y utiliza el Post recogiendo la respuesta en ese objeto, para guardarlo en disco.



Neftali [Germán.Estévez] 25-11-2021 09:46:18

Cita:

Empezado por keys (Mensaje 544163)
El certificado le he puesto uno nuestro y le pasa lo mismo. Por algún motivo no puede acceder a la clave privada de los certificados.


No se si es lo mismo (no creo, pero por si acaso), pero si son certificados que están instalados en la máquina (no como usuario local), hay problemas al acceder a ellos.
Necesitas elevación de permisos.

Ramon88 25-11-2021 10:13:29

Sigo con el error y ellos sin contestar, creo que no soy el único que está con el error 400.
Subo las cabeceras por si veis algo raro, no se por donde tirar la verdad.


He visto que el Json esta bien formado, lo armo con una funcion de .Net que lo hace solo.

Código SQL [-]
{
Accept-Encoding: gzip
Content-Encoding: gzip
eus-bizkaia-n3-version: 1.0
eus-bizkaia-n3-content-type: application/xml
Encoding: gzip
Content-Type: application/octet-stream; charset=utf-8
eus-bizkaia-n3-data: {"con":"LROE","apa":"1.1","inte":[{"nif":"A99800237","nrs":"GLe7VAi7qZ","ap1":"PuWn2yvAaQ","ap2":"BjvRzNGZq5"}],"drs":[{"mode":"140","ejer":"2021"}]}
}

Neftali [Germán.Estévez] 25-11-2021 11:08:32

Modifico los parámetros que has enviado para iguarlarlos con los mios:

Código PHP:

Accept-Encoding:gzip
Content
-Encoding:gzip
eus
-bizkaia-n3-version1.0
eus
-bizkaia-n3-content-typeapplication/xml
eus
-bizkaia-n3-data: {"con":"LROE","apa":"1.1","inte":[{"nif":"A99800237","nrs":"GLe7VAi7qZ","ap1":"PuWn2yvAaQ","ap2":"BjvRzNGZq5"}],"drs":[{"mode":"140","ejer":"2021"}]}
Accepttext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Content-Type: application/octet-stream 

Las llaves no se porque aparecen en tus parámetros, porque el conjunto no es un único parámetro, sino que son diferentes parámetros como HEADERS. Uno de ellos sí es un JSON.
¿No lo estarás enviando todo como un único JSON?

Ramon88 25-11-2021 11:11:53

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 544168)
Modifico los parámetros que has enviado para iguarlarlos con los mios:

Código PHP:

Accept-Encoding:gzip
Content
-Encoding:gzip
eus
-bizkaia-n3-version1.0
eus
-bizkaia-n3-content-typeapplication/xml
eus
-bizkaia-n3-data: {"con":"LROE","apa":"1.1","inte":[{"nif":"A99800237","nrs":"GLe7VAi7qZ","ap1":"PuWn2yvAaQ","ap2":"BjvRzNGZq5"}],"drs":[{"mode":"140","ejer":"2021"}]}
Accepttext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Content-Type: application/octet-stream 

Las llaves no se porque aparecen en tus parámetros, porque el conjunto no es un único parámetro, sino que son diferentes parámetros como HEADERS. Uno de ellos sí es un JSON.
¿No lo estarás enviando todo como un único JSON?


No, lo que pasa que lo he cogido desde el debug y sale así, pero eso esta bien.
Lo que veo distinto es el orden y lo de Accept... voy a ver si me tomo un cafe y sigo probando! :(

sEngine 25-11-2021 11:32:57

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 544165)
Ten en cuenta que la respuesta en el caso de Bizkaiano puedes tratarla como texto para recuperarla o guardarla en disco.
He visto que usas TStringStream o TStringList. Inténtalo con TStream, porque al utilizar etructuras para strings se producen conversiones no deseadas.


Crea un TFileStream y utiliza el Post recogiendo la respuesta en ese objeto, para guardarlo en disco.




Muchas gracias, ya lo he conseguido guardar con esto


Código Delphi [-]
Comprimido := TFileStream.Create(ExtractFilePath(Application.ExeName)+'\LROE_respuesta.gz', fmCreate);
    idhttp_fac.Post('https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena',RequestBody,Comprimido);


La franja horaria es GMT +2. Ahora son las 08:50:35.

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