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-09-2021 10:35:26

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 543054)
En otro de los hilos tiene disponible lo mismo, pero en DLL (y el ejemplo de llamada), por si te puede servir.
https://www.clubdelphi.com/foros/sho...&postcount=607

Gracias, esta bieen saberlo y que haya variedad.

Pau Haro 23-09-2021 10:46:08

Problemas al enviar TicketBAI a Alava con Java
 
Buenas,

Estoy intentado enviar facturas al servicio de TicketBAI de Alava usando Java, anteriormente ya hemos enviado satisfactoriamente facturas a las diputaciones de Gipuzkoa y Bizkaia. Pero ahora con Alava, no podemos ya que el Java nos pide tener el certificado X.509 dentro del JKS "Java KeyStore" para poder comunicarse de forma segura. ¿Alguien que este usando Java y que haya tenido el mismo problema con Alava?

Tampoco puedo descargar el certificado directamente desde la URL del servicio como hice con Gipuzkoa y Bizkaia ya que la pagina ni me carga, así que no se que hacer exactamente.

Muchas gracias!

ermendalenda 23-09-2021 11:20:21

Cita:

Empezado por ermendalenda (Mensaje 543038)
Por cierto alguien conoce el blockchain? (intercambios de ficheros JSON) parecido al p2p pero con firma electrónica. Esperemos que la Aeat no se vaya por esos derroteros para la gestión similar a TicketBai. Da miedete meterse en otro tema.

Corrijo.
Esto (tbai) también es blockchain.

Neftali [Germán.Estévez] 23-09-2021 12:13:05

Cita:

Empezado por ermendalenda (Mensaje 543059)
Faltaba el fichero, no lo ha pillado:D

Si puedes subir el código fuente, mejor.
Si no puede ser, pues igualmente se agradece el aporte.
^\||/^\||/^\||/

ermendalenda 23-09-2021 12:21:48

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 543064)
Si puedes subir el código fuente, mejor.
Si no puede ser, pues igualmente se agradece el aporte.
^\||/^\||/^\||/

Aquí tienes
Código:

Private Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
    wServicePackMajor As Variant
  wServicePackMinor As Variant
  wSuiteMask As Variant
  wProductType As Byte
  wReserved As Byte
End Type

Private Declare Function GetVersionExA Lib "kernel32" _
    (lpVersionInformation As OSVERSIONINFO) As Integer


Private Declare Function SHFormatDrive Lib "shell32" _
    (ByVal hwnd As Long, ByVal Drive As Long, ByVal fmtID As Long, _
    ByVal options As Long) As Long
Private Declare Function GetDriveType Lib "kernel32" Alias _
    "GetDriveTypeA" (ByVal nDrive As String) As Long
 

Private Declare Function GetVolumeInformation& Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal pVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long)



Function PRINCIPAL()
    Close #1
    Open App.Path & "\SN-Equipo.ini" For Output Shared As #1
    Print #1, GetOsBitness
    Close #1
 
End Function

Private Function devuelve_version() As String
Dim osinfo As OSVERSIONINFO
    Dim retvalue As Integer
    Dim nversion As Double
    devuelve_version = ""
    osinfo.dwOSVersionInfoSize = 148
    osinfo.szCSDVersion = Space$(128)
    retvalue = GetVersionExA(osinfo)
        nversion = osinfo.dwMajorVersion + (osinfo.dwMinorVersion / 10)
        Select Case (nversion)
            Case 5#
                devuelve_version = "Windows-2000"
            Case 5.1
                devuelve_version = "Windows-XP"
            Case 5.2
                If osinfo.wProductType = 2 Then
                    devuelve_version = "Server-2003"
                Else
                    If osinfo.wProductType = 1 Then
                        devuelve_version = "Windows-Home-Server"
                    Else
                        devuelve_version = "Windows-XP-Profesional-x64-Edition"
                    End If
                End If
            Case 6#
                If osinfo.wProductType = 2 Or osinfo.wProductType = 3 Then
                    devuelve_version = "Server-2008"
                Else
                    devuelve_version = "Windows-Vista"
                End If
            Case 6.1
                If osinfo.wProductType = 2 Or osinfo.wProductType = 3 Then
                    devuelve_version = "Server-2008-R2"
                Else
                    devuelve_version = "Windows-7"
                End If
               
            Case 6.2
                If osinfo.wProductType = 2 Or osinfo.wProductType = 3 Then
                    devuelve_version = "Windows-Server-2012"
                Else
                    devuelve_version = "Windows-8"
                   
                End If
            Case 6.3
                If osinfo.wProductType = 2 Or osinfo.wProductType = 3 Then
                    devuelve_version = "Windows-8.1"
                Else
                    devuelve_version = "Windows-Server-2012-R2"
                End If
           
            Case 10#
                If osinfo.wProductType = 2 Or osinfo.wProductType = 3 Then
                    devuelve_version = "Windows-Server-2016"
                Else
                    devuelve_version = "Windows-10"
               
                End If
            Case 11#
                If osinfo.wProductType = 2 Or osinfo.wProductType = 3 Then
                    devuelve_version = "Windows-Server>2020"
                Else
                    devuelve_version = "Windows-11"
               
                End If
        End Select
               
        If osinfo.dwMajorVersion = 3 And osinfo.dwMinorVersion = 51 And osinfo.dwBuildNumber = 1057 And osinfo.dwPlatformId = 2 Then
            devuelve_version = "Windows NT 3.1"
        ElseIf osinfo.dwMajorVersion = 4 And (osinfo.dwMinorVersion = 0 Or osinfo.dwMinorVersion = 10) And osinfo.dwBuildNumber >= 67109814 And osinfo.dwPlatformId = 1 Then
            devuelve_version = "Windows 95"
        ElseIf osinfo.dwMajorVersion = 4 And osinfo.dwMinorVersion = 0 And osinfo.dwBuildNumber = 1381 And osinfo.dwPlatformId = 2 Then
            devuelve_version = "Windows NT 4.0"
        Else
           
            'Windows 98? - Not sure what to put here
       
        End If
   
End Function

Public Function GetOsBitness() As String
Dim cad1 As String * 256
    Dim cad2 As String * 256
    Dim numSerie As Variant
    Dim longitud As Long
    Dim flag As Long
    Dim unidad As String
    Dim ProcessorSet As Object
    Dim WMI As Object
    Dim CPU As Object
    Dim obj As Object
    Dim objs As Object
    Set WMI = GetObject("WinMgmts:")
    Set objs = WMI.InstancesOf("WIN32_BaseBoard")
    For Each obj In objs
        procid = procid & obj.SerialNumber
       
        If procid < objs.Count Then procid = procid & "."
    Next
    mbserialnumber = procid
    procid = LTrim$(procid)
    procid = RTrim$(procid)
   
    'SI NECESITAIS EL PROCESADOR 32 O 64 ACTIVAR PERO ES UN POCO LENTO
    'Set ProcessorSet = GetObject("WinMgmts:"). _
    'ExecQuery("SELECT * FROM Win32_Processor")
    'For Each CPU In ProcessorSet
    '    GetOsBitness = CStr(CPU.AddressWidth)
    '
    'Next
    GetOsBitness = "ProcesadorSN= " & procid
   
   
    leeridcomputadora = "Sin Conexión"
    strComputer = "."
   
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
   
    Set colNetAdapters = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
   
    For Each OBJITEM In colNetAdapters
        leeridcomputadora = OBJITEM.MACAddress
 
    Exit For
    Next
    leeridcomputadora2 = leeridcomputadora
    While InStr(1, leeridcomputadora2, ":") > 0
        leeridcomputadora2 = Left(leeridcomputadora2, InStr(1, leeridcomputadora2, ":") - 1) & Right(leeridcomputadora2, Len(leeridcomputadora2) - InStr(1, leeridcomputadora2, ":"))
           
    Wend
    numerie = ""
    unidad = ""
    If Len(App.Path) > 1 Then
        If Mid(App.Path, 2, 1) = ":" Then
            unidad = Left(App.Path, 2) & "\"
            Call GetVolumeInformation(unidad, cad1, 256, numSerie, longitud, flag, cad2, 256)
   
        End If
    End If
    GetOsBitness = GetOsBitness & vbCrLf & "MAC= " & leeridcomputadora & vbCrLf & "MACsp= " & leeridcomputadora2 & vbCrLf & "HD-Serial= " & numSerie & vbCrLf & "HD_UNID= " & unidad & vbCrLf & "VER= " & devuelve_version
   
End Function


Neftali [Germán.Estévez] 23-09-2021 13:40:43

Cita:

Empezado por ermendalenda (Mensaje 543066)
Aquí tienes


Gracias.
He actualizado el hilo de los recursos.
Para añadir link al código, al ejecutable y también he puesto la DLL (MSVBVM50.DLL) necesaria para los que no la tienen de VB.

HerensugeBeltz 23-09-2021 14:01:59

Cita:

Empezado por keys (Mensaje 543050)
En nuestro caso nos hemos encontrado con ordenadores que "wmic bios get serialnumber" no devuelve nada. Es mas en nuestro caso al obtener el certificado de dispositivo en Izenpe no encontraron ningún número que le proporcionara el equipo. Al final nos hicieron abrir el equipo y mirar el numero de seire que trae la palaca base en una pegatina.

Por lo tanto el numero de seire del dispositivo puede ser cualquier cosa.

¿Habéis probado wmic baseboard get serialnumber?
Debería daros el nº de serie de la placa, que debería coincidir con el de la pegatina.

ermendalenda 23-09-2021 14:04:29

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 543068)
Gracias.
He actualizado el hilo de los recursos.
Para añadir link al código, al ejecutable y también he puesto la DLL (MSVBVM50.DLL) necesaria para los que no la tienen de VB.

Te dejo mejor un instalador del MSV... para no tener que registrarlo a mano.

HerensugeBeltz 23-09-2021 14:06:00

Cita:

Empezado por ermendalenda (Mensaje 543058)
A mi me ha pasado lo que ha vosotros con lo del WMI, incluso al clonar equipos(HD) me clona el sn (supongo que lo lee del registro de sistema).
Que es lo que nunca me falla y siempre me da un número distinto para cada equipo,
combinar el WMI & SN(HD) & MAC, así me aseguro que si clonamos cuando compro equipos de las mismas caracteristicas no voy a tener el problema. La MAC nunca la clona pero hay que tener cuidado.

Si cambias la tarjeta de red, ¿no cambia la MAC y se invalida el nº de serie del certificado?
Lo de clonar el equipo y que mantenga el nº de serie anterior me parece muy raro :confused:

ermendalenda 23-09-2021 14:07:06

pues no me deja, 624Kbv\||/

ermendalenda 23-09-2021 14:13:07

Cita:

Empezado por HerensugeBeltz (Mensaje 543071)
Si cambias la tarjeta de red, ¿no cambia la MAC y se invalida el nº de serie del certificado?
Lo de clonar el equipo y que mantenga el nº de serie anterior me parece muy raro :confused:

Si cambias cualquier cosa de las 3 se debe invalidar, lo mismo que si se rompe la placa base la CPU, el HD, etc.. estas cambiando un numero de serie de un elemento del equipo. En ese caso deben actualizar el certificado (Anular y pedir otro, o si te lo permite, modificarlo), siempre que ese numero lo hayas usado para el cerificado del dispositivo.

Cita:

Lo de clonar el equipo y que mantenga el nº de serie anterior me parece muy raro
Pues me ha pasado con equipos idénticos, creo que el comando wmi lee del registro de sistema y si windows no detecta cambios (al clonar el disco) este no se actualiza, cosa que no pasa con la MAC que lo detecta,

ermendalenda 23-09-2021 14:20:54

Cita:

Empezado por HerensugeBeltz (Mensaje 543069)
¿Habéis probado wmic baseboard get serialnumber?
Debería daros el nº de serie de la placa, que debería coincidir con el de la pegatina.

Está bien tenerlo, también la da el ejecutable y fuentes de lo que he subido.

espinete 23-09-2021 14:42:33

Cita:

Empezado por rci (Mensaje 543030)
Hola Espinete,
En bizkaia se pospone la obligatoriedad de Batuz y de ticketBAI también

Lo último que supe es que posponían Batuz, pero no TicketBAI. Significa esto que me puedo olvidar de Bizkaia por ahora y centrarme en Gipuzkoa y Araba?
Es que no me queda muy claro con los últimos avisos que me han enviado de Batuz...

Entiendo que para Gipuzkoa y Araba sigue todo como antes: generar el xml, firmarlo y enviarlo (no como Bizkaia, que había que crear otro xml para los envíos).

¿Qué se haría entonces con Bizkaia para enviar el ticketbai a Hacienda, si ya no se hace con los xmls de envío del 140/240?

ermendalenda 23-09-2021 15:42:34

Cita:

Empezado por espinete (Mensaje 543075)
Lo último que supe es que posponían Batuz, pero no TicketBAI. Significa esto que me puedo olvidar de Bizkaia por ahora y centrarme en Gipuzkoa y Araba?
Es que no me queda muy claro con los últimos avisos que me han enviado de Batuz...

Entiendo que para Gipuzkoa y Araba sigue todo como antes: generar el xml, firmarlo y enviarlo (no como Bizkaia, que había que crear otro xml para los envíos).

¿Qué se haría entonces con Bizkaia para enviar el ticketbai a Hacienda, si ya no se hace con los xmls de envío del 140/240?

Entiendo que lo que posponen es la obligatoriedad hasta el 2024 (Incluyendo TickeBai), pero el que lo quiera implantar ya, pueden(o deberian poder que eso es otra)

Ramon88 23-09-2021 16:46:51

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 543054)
En otro de los hilos tiene disponible lo mismo, pero en DLL (y el ejemplo de llamada), por si te puede servir.
https://www.clubdelphi.com/foros/sho...&postcount=607


No puedo usar la DLL.
Error:
Asegurese de que tiene acceso al archivo y de que es un ensamblado o componente COM válido.

ermendalenda 23-09-2021 16:51:06

Cita:

Empezado por Ramon88 (Mensaje 543079)
No puedo usar la DLL.
Error:
Asegurese de que tiene acceso al archivo y de que es un ensamblado o componente COM válido.

Mira si tienes una carpeta en \Windows\syswow64 y registra la ahí
Si y tuviera más capacidad para subirlo te subiria el instalador de la dll

ermendalenda 23-09-2021 17:15:40

Aqui tienes el instalador de la dll
https://www.filemail.com/d/wheiqnfrdwkmvgk

Ramon88 23-09-2021 17:21:47

Cita:

Empezado por ermendalenda (Mensaje 543081)
Aqui tienes el instalador de la dll
https://www.filemail.com/d/wheiqnfrdwkmvgk


Estas en todo! si vienes por Valencia estas invitado a una buena paella! jeje

Ramon88 23-09-2021 17:25:14

Termino de encontrar una función en .Net que si no me equivoco funciona bien.
Código:

    Function CRC_8(ByVal Txt As String) As Byte
        Dim Poly() As Byte = {1, 0, 0, 0, 0, 0, 1, 1, 1}
        Dim MessageBits As New List(Of Byte)
        Dim MsgBinString As String = ""
        'Compute the message binary
        For Each C As Char In Txt
            Dim S As String = Convert.ToString(Asc(C), 2)
            If S.Length < 8 Then S = New String("0"c, 8 - S.Length) & S

            MsgBinString &= S
        Next
        For Each C As Char In MsgBinString
            If C = "0"c Then MessageBits.Add(0) Else MessageBits.Add(1)
        Next
        'add 8 bits set to zero
        MessageBits.AddRange(New Byte() {0, 0, 0, 0, 0, 0, 0, 0})
        'compute CRC
        While MessageBits.Count > 8
            If MessageBits(0) = 0 Then
                MessageBits.RemoveAt(0)
                Continue While
            End If
            For x = 0 To 8 '<--9 bits
                MessageBits(x) = MessageBits(x) Xor Poly(x)
            Next
        End While
        'put the result in byte format and return
        Dim Result As Byte = 0
        For x = 0 To 7
            Result = Result Or (MessageBits(7 - x) << x)
        Next
        Return Result
    End Function


ermendalenda 23-09-2021 17:37:40

Si te funciona perfecto. Pruébalo y dale.
Aunque no sé, me da la sensación de que le falta la tabla crc8 y el polynomio no me cuadra. No me hagas caso por que yo la función no la entiendo ni me he puesto a entenderla


La franja horaria es GMT +2. Ahora son las 07:32:42.

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