** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Veri*Factu Capítulo 2...
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Veri*Factu Capítulo 2...

 Responder Responder Página  <1 234
Autor
Mensaje
VMT Ver desplegable
Nuevo
Nuevo


Unido: 18/Noviembre/2025
Localización: VALENCIA
Estado: Sin conexión
Puntos: 10
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita VMT Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 18/Noviembre/2025 a las 11:38
Hola,
la verdad que la implementación de VERI*FACTU y NO VERI*FACTU es una locura. Llevo meses en contacto con el dpto. de informática de la AEAT, a 2 correos diarios de consultas y es una locura. Ya tengo todo montado a falta de enviar el fichero, que no hay manera de enviarlo pues no coge la huella del certificado digital. Uso esta función por si alguno le ocurre lo mismo y sabe

COMO ENVIAR LOS XML con la huella... Gracias de antemano

Private Function PostSoapConCert0( _
    ByVal xmlEnvelope As String, _
    ByVal url As String, _
    ByVal soapAction As String, _
    ByVal certRef As String) As String

    On Error GoTo EH

    Dim req As Object ' WinHttp.WinHttpRequest.5.1
    Set req = CreateObject("WinHttp.WinHttpRequest.5.1")
    
    'Fuerza el uso de TLS 1.2 si no estuviera activado
    req.Option(9) = "0x00000800"
    req.setTimeouts 10000, 10000, 30000, 30000
    req.Open "POST", url, False
    
    
    ' Seleccionad el certificado del almacen CURRENT USER (mTLS)
    ' Formato: CURRENT_USER\MY\THUMBPRINT  o  LOCAL_MACHINE\MY\THUMBPRINT
    If Len(certRef) > 0 Then
        req.SetClientCertificate certRef
    End If
    
    req.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
    If Len(soapAction) > 0 Then
        req.setRequestHeader "SOAPAction", """" & soapAction & """"
    End If
        
    req.Send xmlEnvelope

    Dim st As Long
    st = req.Status
    If st < 200 Or st >= 300 Then
        Err.Raise vbObjectError + 13001, , _
            "HTTP " & st & " - " & req.statusText & vbCrLf & req.responseText
    End If

    PostSoapConCert = req.responseText
    Exit Function
EH:
    Err.Raise Err.Number, "PostSoapConCert", Err.description
End Function
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Mihura Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 18/Noviembre/2025 a las 11:50
Joer, que liao veo yo eso ....

Un proceso típico sería:

    Const SXH_OPTION_SELECT_CLIENT_SSL_CERT = 3
    Dim objHttp As Object, XMLDoc As Object

    Set objHttp = CreateObject("MSXML2.ServerXMLHTTP")
    objHttp.Open "POST", sURL, False
    objHttp.setRequestHeader "Content-Type", "text/xml;charset=UTF-8"
    objHttp.SetOption SXH_OPTION_SELECT_CLIENT_SSL_CERT, CertificadoNombre
    objHttp.send XmlMensajeEnvio
        
    'bucle hasta que esté completa la transacción
    Do Until objHttp.ReadyState = 4
        DoEvents
    Loop
    Set XMLDoc = objHttp.responseXML
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
VMT Ver desplegable
Nuevo
Nuevo


Unido: 18/Noviembre/2025
Localización: VALENCIA
Estado: Sin conexión
Puntos: 10
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita VMT Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 18/Noviembre/2025 a las 12:48
Gracias Mihura, pero no funciona...


Se requiere de un certificado para completar la autenticación de cliente.

Desde VB no pilla el certificado se lo pases por CN, por Huella... si lo lanzas por PowerShell, 

$xml = Get-Content "C:\ruta\NOVERIFACTU-Fra-2510029-251118-102045-Firmada.xml" -Raw
Invoke-WebRequest -Uri "https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/ValRegistroNoVF" `
  -Method Post -Body "C:\ruta\NOVERIFACTU-Fra-2510029-251118-102045-Firmada.xml"  -ContentType "text/xml; charset=utf-8" `
  -Headers @{ SOAPAction = "https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/RequerimientoSOAP" } `
  -CertificateThumbprint "h u e l l a"

Entonces da un 0K 200, y lanzar un Power desde VB como que no mola mucho... ¿Existe algun modo de lanzarlo desde VB con el algún método?
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Mihura Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 18/Noviembre/2025 a las 13:01
Publicado originalmente por VMT VMT escribió:

Se requiere de un certificado para completar la autenticación de cliente.

Obviamente, sin certificado la AEAT no te va a admitir el envío.



No conozco VB, pero básicamente VB y VBA son iguales y con este tipo de objetos más.

Estaría por jurar que sin cambiar nada lo que te he posteado furula en VB.


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
ninja Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 13/Abril/2012
Localización: España
Estado: Sin conexión
Puntos: 45
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita ninja Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 18/Noviembre/2025 a las 19:22
Prueba así, funciona.

  strCertificaatNaam = NOMBRECERTIFICADO
  If UCase(strCertificaatNaam) <> "" And UCase(strCertificaatNaam) <> "[SKIP]" Then
     objWinHttp.SetOption 3, strCertificaatNaam
  End If

  objWinHttp.Send objRequestXML
Arriba
VMT Ver desplegable
Nuevo
Nuevo


Unido: 18/Noviembre/2025
Localización: VALENCIA
Estado: Sin conexión
Puntos: 10
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita VMT Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 19/Noviembre/2025 a las 10:15
Gracias.... pero no... no funciona. Es un problema del objeto y no del certificado, que cuenta con la clave privada, de la FNMT etc etc etc. Un problemon la verdad!

Como lo estoy haciendo y no me gusta... desde PowerShell generado un ps1 y luego ejecutándolo...


Public Function VF_PostSoap( _
    ByVal xmlOrPath As String, _
    ByVal endpoint As String, _
    ByVal soapAction As String, _
    ByVal thumbprint As String, _
    Optional ByVal hasEnvelope As Boolean = True _
) As String
    Dim xmlBody As String
    xmlBody = IIf(FileExists(xmlOrPath), ReadAllText(xmlOrPath), xmlOrPath)

    Dim payload As String
    If hasEnvelope Then
        payload = xmlBody
    Else
        payload = BuildEnvelope(xmlBody)
    End If

    Dim tp As String
    tp = NormalizeThumb(thumbprint)

    ' 1) MSXML2.ServerXMLHTTP.6.0
    On Error GoTo try_powershell
    VF_PostSoap = Send_MSXML(endpoint, soapAction, payload, tp)
    Exit Function

try_winhttp:
    ' 2) WinHTTP
    On Error GoTo try_powershell
    VF_PostSoap = Send_WinHTTP(endpoint, soapAction, payload, tp)
    Exit Function

try_powershell:
    ' 3) Fallback PowerShell (comprobado que te da 200 OK)
    On Error GoTo fail_all
    VF_PostSoap = Send_PowerShell(endpoint, soapAction, payload, tp)
    Exit Function

fail_all:
    Err.Raise vbObjectError + 53001, "VF_PostSoap", _
        "Fallo en los 3 métodos (MSXML, WinHTTP y PowerShell):" & vbCrLf & _
        " - " & Err.Number & " / " & Err.description
End Function


UNA FRICADA DE LA OS...

Private Function Send_PowerShell(ByVal url As String, ByVal soapAction As String, _
                                 ByVal soapEnvelope As String, ByVal thumb As String) As String
    Dim tempDir As String
    tempDir = Environ$("TEMP")

    Dim fBody As String, fOut As String, fPs As String
    fBody = tempDir & "\vf_body_" & Replace(CStr(Timer), ".", "") & ".xml"
    fOut = tempDir & "\vf_resp_" & Replace(CStr(Timer), ".", "") & ".txt"
    fPs = tempDir & "\vf_send_" & Replace(CStr(Timer), ".", "") & ".ps1"

    WriteAllText fBody, soapEnvelope

    Dim ps As String
    ps = ""
    ps = ps & "$ErrorActionPreference='Stop'" & vbCrLf
    ps = ps & "$thumb='" & thumb & "'" & vbCrLf
    ps = ps & "$endpoint='" & url & "'" & vbCrLf
    ps = ps & "$soapAction='" & soapAction & "'" & vbCrLf
    ps = ps & "$body=[IO.File]::ReadAllText('" & fBody & "')" & vbCrLf
    ps = ps & "$resp=Invoke-WebRequest -Uri $endpoint -Method Post -Body $body -ContentType 'text/xml; charset=utf-8' -Headers @{SOAPAction=$soapAction} -CertificateThumbprint $thumb -UseBasicParsing" & vbCrLf
    ps = ps & "[IO.File]::WriteAllText('" & fOut & "',$resp.Content,[Text.Encoding]::UTF8)" & vbCrLf

    WriteAllText fPs, ps

    Dim cmd As String
    cmd = "powershell.exe -NoProfile -ExecutionPolicy Bypass -File " & Quote(fPs)
    
    Set cb = New MSForms.DataObject
    cb.SetText cmd
    cb.PutInClipboard
    Set cb = Nothing

    Dim sh As Object: Set sh = CreateObject("WScript.Shell")
    Dim rc As Long
    rc = sh.Run(cmd, 0, True)
    If rc <> 0 Then
        Err.Raise vbObjectError + 53031, "Send_PowerShell", "PowerShell devolvió código " & rc & " " & Err.description
    End If

    Send_PowerShell = ReadAllText(fOut)
    On Error Resume Next
    Kill fBody: Kill fOut: Kill fPs
End Function


ALGUNA SUGUERENCIA DE ALGUIEN? Como gestionáis los errores que os devuelve el ENPOINT de la AEAT, porque devuelve un XML...?
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Mihura Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 19/Noviembre/2025 a las 10:35
Publicado originalmente por VMT VMT escribió:

ALGUNA SUGUERENCIA DE ALGUIEN? Como gestionáis los errores que os devuelve el ENPOINT de la AEAT, porque devuelve un XML...?



Editado por Mihura - 19/Noviembre/2025 a las 10:35
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1301
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita main Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 01/Diciembre/2025 a las 10:41
Los errores se tratan en funcion de una tabla de codigos de error: Este error viene en el .xml de respuesta(<tikR:CodigoErrorRegistro>2004</tikR:CodigoErrorRegistro>? incluyendo ademas una breve descripción de su estado(<tikR:EstadoRegistro>AceptadoConErrores</tikR:EstadoReg). Tambien devuelve el CSV (Codigo seguro de verificacion) <tikR:CSV>
Saludos:
Arriba
VMT Ver desplegable
Nuevo
Nuevo


Unido: 18/Noviembre/2025
Localización: VALENCIA
Estado: Sin conexión
Puntos: 10
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita VMT Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 01/Diciembre/2025 a las 20:01
Gracias, sí ya lo tengo solucionado. 

Empiezo a ver la luz, envío en modo VERI*FACTU y NO VERI*FACTU bajo requerimiento y leo respuesta. 

He tenido que montar una cola de envío con un límite de 240 segundos como indica la AEAT. Sigo pensando que es muy precaria la forma de comunicarse...

Ya veremos si el día 1 no se caen los servidores de la AEAT.

Un saludo y gracias

Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1301
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita main Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 01/Diciembre/2025 a las 20:15
Te recomiendo que la cola de envio sea de 60 segundos como se recomienda, y en funcion del tamaño del fichero enviado no tendras problemas. Si solo mandas un documento por envio, quiza no te de problemas pero si el envio contiene varias facturas empiezan los probemas.
Lo que no te comprendi es lo de enviar documento NO VERIFACTU, hasta donde se estos no se envian,
Saludos al grupo.


Editado por main - 01/Diciembre/2025 a las 20:18
Arriba
main Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 31/Agosto/2009
Localización: OVIEDO
Estado: Sin conexión
Puntos: 1301
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita main Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 02/Diciembre/2025 a las 13:12
APLAZAMIENTO VERIFACTU A ENERO 2027
Arriba
OmniPresente Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 1888
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita OmniPresente Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 02/Diciembre/2025 a las 13:13
Estaba claro... pero es que ni ellos mismos lo tenían resuelto a nivel técnico...
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Mihura Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 02/Diciembre/2025 a las 13:28
¿Cómo que no estaba resuelto?

La web de AEAT funciona 100%  ... no he tenido parones ni errores de comunicación / validación.

Esto nos da un margen para avanzar sin sobresaltos, pero no hay que pararse, porque si no, en diciembre del año que viene estaremos igual.


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
OmniPresente Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 1888
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita OmniPresente Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 10/Diciembre/2025 a las 18:24
Bueno; a mí me pasó que, a medida que iba haciendo implantaciones, cambiaba el esquema XML. No sé ser más específico, porque no recuerdo los detalles, pero de repente me encontraba con bloques que primero no eran obligatorios y luego sí.

Por no hablar, fuera ya del nivel técnico, de lo ambigua que es la AEAT sobre quién está obligado y quién no. Quien haga sus facturas con Excel o Word, está exento de la norma. Pues nada, yo, que envío mis facturas en PDF por e-mail; si alguna vez me requieren el registro Verifactu, digo que no uso un programa SIF; que las hago todas individualmente con Word y las exporto a PDF y listos.
Arriba
 Responder Responder Página  <1 234
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable