VERIFACTU. Me falta una pieza.

176 views
Skip to first unread message

Eduardo Castellano Roig

unread,
Sep 23, 2025, 5:53:00 AMSep 23
to Comunidad de Visual Foxpro en Español

En la empresa en la que trabajo estamos intentando adaptar nuestro SIF a VERIFACTU.

El programa está en VFox con tablas libres, y será solo varifactu.

No se trata de una aplicación comercial. Es para nuestro uso.

Ya he solucionado diferentes temas:

- Crear el QR e inserción en el informe factura

- Crear del HASH 

- Preparar el xml

He probado los xmls creados en el portal de pruebas de la AEAT y funcionan.

Nos falta desarrollar la lectura de los resultados, pero eso no me preocupa, lo podré hacer más adelante.

Si alguien ha probado el portal de pruebas sabrá al acceder te pide el certificado. Una vez lo das, accedes sin problema.

Lo que no consigo es enviar el xml directamente desde el programa:

He utilizado diferentes métodos usando WinHttp.WinHttpRequest.5.1 y otros, pero el problema que me encuentro es que no funcionan por falta de credenciales.

Debe haber alguna forma de enviar los xml desde fox y autenticar la conexión, pero no lo consigo.

¿Alguien puede indicarme posibles soluciones?

Jose Antonio Blasco

unread,
Sep 23, 2025, 6:16:05 AMSep 23
to publice...@googlegroups.com
Mira si te sirve esta función:  

FUNCTION WS_SendXML(tcURL, tcXML, tcID)
    **********************************************************
    *!* Envía por WS un archivo XML
    **********************************************************
    *!* Parámetros:
    *!* tcURL --> URL donde realizar el envío
    *!* tcXML --> XML a Enviar
    *!* tcID  --> ID del certificado a usar:
    *!*          habitualmente, NIF
    **********************************************************
*!* Devuelve objeto con 2 propiedades:
*!*    cError     --> Texto del error (si procede)
*!*    cRespuesta --> Datos devueltos (si no hay error)
    **********************************************************
    local oHTTP, RespuestaWS, sError, oRes
   
    #Define HTTPSTATUS_OK 200
   
    oHTTP = Createobject('Msxml2.ServerXMLHTTP.6.0')

    *-- Configurar los timeouts: DNS, conexión, envío, recepción (en milisegundos)
    oHTTP.setTimeouts(10000, 15000, 30000, 60000)
           
    *-- Otros parámetros
    oHTTP.setOption(2) = 13056      && Ignorar errores
    oHTTP.setOption(3) = tcID && ID del certificado (NIF)

    Try
        *-- Abrir conexión en modo síncrono
        oHTTP.Open("POST",tcURL,.F.)
       
        *-- Establecer cabeceras para XML
        oHTTP.setRequestHeader("SOAPAction", "EjecutandoWS desde VFP")
        oHTTP.setRequestHeader("Content-Type", "text/xml;charset=utf-8")
       
        *-- Enviar XML
        oHTTP.Send(tcXml) && MANDO EL REQUEST QUE HAGO

        *-- Verificar respuesta
        If oHTTP.Status = HTTPSTATUS_OK && Ha habido Respuesta
            RespuestaWS = oHTTP.responseText
            sError = ''
        Else
            sError = ALLTRIM(STR(oHTTP.Status)) + ': ' + ALLTRIM(oHTTP.StatusText)
            RespuestaWS = ''
        Endif

    Catch To loErr
        sError = ALLTRIM(STR(loErr.ErrorNo)) +  ': ' + ALLTRIM(loErr.Message)
        RespuestaWS = ''
    Endtry

    #Undefine HTTPSTATUS_OK
   
    *-- Crear Objeto Respuesta
    oRes = Createobject('custom')
    With oRes
        .AddProperty('cError', sError)
        .AddProperty('cRespuesta', RespuestaWS)
    Endwith

    Return oRes
   
ENDFUNC

Un saludo.

Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2



--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver este debate, visita https://groups.google.com/d/msgid/publicesvfoxpro/c6d97836-a812-4621-bfd2-93ec68563233n%40googlegroups.com.
Message has been deleted
Message has been deleted

Eduardo Castellano Roig

unread,
Sep 24, 2025, 7:25:32 AMSep 24
to Comunidad de Visual Foxpro en Español

Gracias José Antonio

He probado tu función y 'casi' funciona.

No es un problema de certificado ya que si le doy un tcId inexistente si que me devuelve ve un error: 

1429: OLE IDispatch exception code 0 from msxml6.dll: Se requiere de un certificado para completar la autenticación de cliente
..

Peo cuando le tcId es correcto la respuesta es:

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">

<env:Body>

<env:Fault>

<faultcode>env:Server</faultcode>

<faultstring>Error interno en el servidor</faultstring>

</env:Fault>

</env:Body>

</env:Envelope>


Creo que el problema puede estar en:

 *-- Configurar los timeouts: DNS, conexión, envío, recepción (en milisegundos)
    oHTTP.setTimeouts(10000, 15000, 30000, 60000)
           
    *-- Otros parámetros
    oHTTP.setOption(2) = 13056      && Ignorar errores
    oHTTP.setOption(3) = tcID && ID del certificado (NIF)

Gracias

Eduardo Castellano Roig

unread,
Sep 24, 2025, 7:25:33 AMSep 24
to Comunidad de Visual Foxpro en Español
Disculpa. El error que te envié hace un momento no era tal.
Me devuelve xml pero indicándome error:
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<env:Fault>
<faultcode>env:Server</faultcode>
<faultstring>Error interno en el servidor</faultstring>
</env:Fault>
</env:Body>
</env:Envelope>

El martes, 23 de septiembre de 2025 a las 12:16:05 UTC+2, jabl...@gmail.com escribió:

Jose Antonio Blasco

unread,
Sep 24, 2025, 9:57:04 AMSep 24
to publice...@googlegroups.com
No estarás usando una URL de PRODUCCION, con el certificado de pruebas de AEAT ?

Entro ahora en un seminario sobre verifactu.
Más tarde lo miro.

Un saludo.

Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Jose Antonio Blasco

unread,
Sep 25, 2025, 3:33:10 AMSep 25
to publice...@googlegroups.com
Acabo de probar la función y trabaja correctamente.
He entendido que has probado a subir directamente a la web de pruebas en PRE-PRODUCCION el XML de consulta, eligiendo el XSD correspondiente, y te responde correctamente.  Es así ??

Si la respuesta es SI, sólo se me ocurre un problema con la URL que uses y/o la identificación del resultado.
Lo siento, no se me ocurre nada más.

Un saludo.

Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Eduardo Castellano Roig

unread,
Sep 25, 2025, 5:24:34 AMSep 25
to Comunidad de Visual Foxpro en Español

Jose.

Antes que nada muchas gracias por tu interés.

·        Me comentas “No estarás usando una URL de PRODUCCION, con el certificado de pruebas de AEAT ?”

Estoy usando un certificado real, con el que me puedo conectar a la AEAT para cualquier gestión

 

De hecho si utilizo en el xml que envío un cif incorrecto el programa me devuelve:

1429: OLE IDispatch exception code 0 from msxml6.dll: Se requiere de un certificado para completar la autenticación de cliente

 Así que considero que el servicio reconoce el certificado como correcto y comprueba que en cif coincide con la petición.

 

        Me comentas: "He entendido que has probado a subir directamente a la web de pruebas en PRE-PRODUCCION el XML de consulta, eligiendo el XSD correspondiente, y te responde correctamente.  Es así ??

Cierto subo el mismo xml de consulta en la web de pruebas y obtengo la respuesta esperada

La misma consulta desde el programa me devuelve:

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">

<env:Body>

<env:Fault>

<faultcode>env:Server</faultcode>

<faultstring>Error interno en el servidor</faultstring>

</env:Fault>

</env:Body>

</env:Envelope>

 

·         El xml que envío( Se trata de una consulta de los registros para el periodo 09-2025):

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:con="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/ConsultaLR.xsd" xmlns:sum="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">

<soapenv:Header/>

   <soapenv:Body>

      <con:ConsultaFactuSistemaFacturacion>

          <con:Cabecera>

            <sum:IDVersion>1.0</sum:IDVersion>

               <sum:ObligadoEmision>

                 <sum:NombreRazon>NNNNNN</sum:NombreRazon>

                    <sum:NIF>AXXXXXXXX</sum:NIF>

               </sum:ObligadoEmision>

           </con:Cabecera>

         <con:FiltroConsulta>

              <con:PeriodoImputacion>

                  <sum:Ejercicio>2025</sum:Ejercicio>

                 <sum:Periodo>09</sum:Periodo>

             </con:PeriodoImputacion>

        </con:FiltroConsulta>

      </con:ConsultaFactuSistemaFacturacion>

   </soapenv:Body>

</soapenv:Envelope>

 

La URL a la que lo envío:

https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP

He probado también a enviarlo a la URL de producción en la que debería recibir una respuesta que indique que no hay datos, pero el resultado ha sido el mismo

 

·       Y por último una duda:

No entiendo que en tu programa incluyas:

               oHTTP.setRequestHeader("soapAction","EjecutandoWS desde VFP")

Ya que esa soapAcción no está en el .wsdl de la definición de servicios ni en el entorno de pruebas:

https://prewww2.aeat.es/static_files/common/internet/dep/aplicaciones/es/aeat/tikeV1.0/cont/ws/SistemaFacturacion.wsdl

ni en el de producción:

https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tikeV1.0/cont/ws/SistemaFacturacion.wsdl

 

De cualquier forma, gracias por tu atención. Entiendo que todos en el grupo estamos liados siempre con nuestro trabajo.

 

Eduardo Castellano.

 

PD.: Si a alguien le interesa alguno de los temas ‘piezas’ que comenté al principio del hilo que ya he resuelto solo tiene que pedirlo.

Eduardo Castellano Roig

unread,
Sep 25, 2025, 9:43:31 AMSep 25
to Comunidad de Visual Foxpro en Español
RESUELTO.
Salvo algún retoque. Estaba enviando al servicio el nombre del xml, no su contenido.
Error de principiante.
Gracias a Jose y a Sergio

Jose Antonio Blasco

unread,
Sep 25, 2025, 9:55:50 AMSep 25
to publice...@googlegroups.com
Buenas tardes, 
He comparado tu fichero XML con el mío, y en la primera línea tengo:

<?xml version="1.0" encoding="UTF-8"?>

El resto es igual, con la salvedad de los datos.

Otra cosa, lo de:

 oHTTP.setRequestHeader("soapAction","EjecutandoWS desde VFP")

no corresponde al .wsdl, sino a propiedades del objeto Msxml2.ServerXMLHTTP.6.0, y es un simple texto, que no afecta a su funcionamiento.

Un saludo.

Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Jose Antonio Blasco

unread,
Sep 25, 2025, 9:58:28 AMSep 25
to publice...@googlegroups.com
Disculpa, no había visto tu ultimo correo.
Me alegro.  un saludo.

Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Reply all
Reply to author
Forward
0 new messages