Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Errores (relacionados con al AEAT) (https://www.clubdelphi.com/foros/forumdisplay.php?f=78)
-   -   Comprobar Conexión con la AEAT (https://www.clubdelphi.com/foros/showthread.php?t=97145)

_Io 26-12-2024 20:26:53

Comprobar Conexión con la AEAT
 
Hola, Buenas noches.

Me ha parecido ver en los foros la respuesta buscando otra cosa, pero ahora que lo busco no lo encuentro.

Cómo hacéis para comprobar la conexión con la AEAT, sin tener que enterarte durante el envío de un Registro de Facturación?

Muchas Gracias !!!

gcqZW 10-03-2025 10:29:13

Un poco tarde te respondo, pero yo compruebo asi la conexión ( no sé si te servirá ya que es php ):

Código PHP:

function comprobarConexion() {
    
$url 'https://prewww2.aeat.es/static_files/common/internet/dep/aplicaciones/es/aeat/tikeV1.0/cont/ws/SistemaFacturacion.wsdl';

    
$ch curl_init($url);

    
curl_setopt($chCURLOPT_NOBODYtrue);
    
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    
curl_setopt($chCURLOPT_TIMEOUT10);
    
curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
    
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);

    
curl_exec($ch);

    if (
curl_errno($ch)) {
        echo 
"Error de conexión: " curl_error($ch) . "\n";
    } else {
        
$httpCode curl_getinfo($chCURLINFO_HTTP_CODE);
        if (
$httpCode == 200) {
            echo 
"Conexión exitosa\n";
        } else {
            echo 
"El servidor respondió con código HTTP: $httpCode\n";
        }
    }

    
curl_close($ch);
}

comprobarConexion(); 


_Io 10-03-2025 11:33:04

Hola, buenos días.

Muchas gracias por tu respuesta.
Tuve mi momento con PHP, pero pasó hace mucho tiempo y sinceramente no lo entiendo.

Huso Delphi12, y al final he resuelto la papeleta realizando una consulta , que sé que no hay resultados,
pero si me viene relleno la cabecera, sé que la AEAT me ha contestado.
No es la forma más eficiente, pero me vale.

Saludos

gcqZW 10-03-2025 11:50:24

Basicamente hace lo mismo que dices, solo recibe cabecera de vuelta, y depende de cual sea (200 ok) pues me dice si se ha podido conectar o no.

xamminf 07-05-2025 16:15:03

Cita:

Empezado por gcqZW (Mensaje 562553)
Basicamente hace lo mismo que dices, solo recibe cabecera de vuelta, y depende de cual sea (200 ok) pues me dice si se ha podido conectar o no.

No: Hace algo más que me parece que es muy interesante: Conecta con el servidor Db2 de la agencia.

Y así metemos en el mismo paquete la conexion web + disponibilidad server Db2

maikl 12-05-2025 17:07:49

Hola, estoy intentando hacer algo parecido pero a parte de la conexión con el servidor también quiero comprobar que el certificado y la clave indicadas son correctas, y que el nif también. Digamos que esté todo listo para entrar facturas.
Me suena que había una conexión para pedir el último registro que se ha enviado pero no logro encontrarlo. Una conexión de este tipo sería ideal ya que no modifica nada y además permite comprobar que todos los parámetros están bien configurados.
Alguien sabe la petición que se debe hacer?
Saludos!

bmfranky 12-05-2025 17:22:50

Esto:


Cita:

XML de entrada
<?xml version="1.0" encoding="UTF-8"?>
<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>EMPRESAXXXX</sum:NombreRazon>
<sum:NIF>XXXXXXXXX</sum:NIF>
</sum:ObligadoEmision>
</con:Cabecera>
<con:FiltroConsulta>
<con:PeriodoImputacion>
<sum:Ejercicio>2024</sum:Ejercicio>
<sum:Periodo>11</sum:Periodo>
</con:PeriodoImputacion>
</con:FiltroConsulta>
</con:ConsultaFactuSistemaFacturacion>
</soapenv:Body>
</soapenv:Envelope>
Lo puedes hallar en la pagina 93, del documento de descripción de los servicios web aquí.

maikl 12-05-2025 17:33:51

Es fantástico, muchas gracias !!! No lo estaba encontrando.

jlmoli_67 22-05-2025 09:19:54

Cita:

Empezado por _Io (Mensaje 562552)
Hola, buenos días.

Muchas gracias por tu respuesta.
Tuve mi momento con PHP, pero pasó hace mucho tiempo y sinceramente no lo entiendo.

Huso Delphi12, y al final he resuelto la papeleta realizando una consulta , que sé que no hay resultados,
pero si me viene relleno la cabecera, sé que la AEAT me ha contestado.
No es la forma más eficiente, pero me vale.

Saludos




Buenas,
Hoy me ha tocado dejar cerrado el tema de comprobar la conexion antes del envio.
En un primer momento utilice el metodo de enviar una consulta en toda regla y segun la respuesta pues determinaba si la conexion a la aeat se establecia o no.

Despues me parecio interesante el metodo en php expuesto mas arriba y lo he estado probando pero da error en el sentido de que el wsdl puede no responder con el servicio verifactu estando activo por lo tanto no vale.


Por ultimo he hecho una funcion en la que me muestra si la conexion se establece o no recogiendo la respuesta al intentar conectar a la url a la que se envia la consulta pero sin enviar el xml de consulta y por tanto me evito tener que rellenar los parametros de la consulta.


en vb .net:


Código:

Public Function VerificarServicioAEAT(url As String, rutaCertificadoPFX As String, passwordCertificado As String) As Boolean
        Try
            ' Forzar protocolo TLS 1.2

            System.Net.ServicePointManager.SecurityProtocol = DirectCast(3072, System.Net.SecurityProtocolType)
       
          ' Cargar certificado
            Dim cert As New X509Certificate2(rutaCertificadoPFX, passwordCertificado)

            ' Preparar la solicitud
            Dim request As HttpWebRequest = CType(WebRequest.Create(url), HttpWebRequest)
            request.Method = "POST"
            request.ContentLength = 0
            request.ClientCertificates.Add(cert)
            request.Timeout = 10000

            ' Intentar obtener respuesta
            Using response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
                MsgBox("Código de respuesta: " & response.StatusCode)
                Return response.StatusCode = HttpStatusCode.OK OrElse response.StatusCode = HttpStatusCode.Accepted
            End Using

        Catch ex As WebException
            If ex.Response IsNot Nothing Then
                Using resp = CType(ex.Response, HttpWebResponse)
                    MsgBox("Error HTTP: " & resp.StatusCode.ToString())
                    MsgBox("Descripción: " & resp.StatusDescription)
                End Using
            Else
                MsgBox("Error sin respuesta HTTP: " & ex.Message)
            End If
            Return False

        Catch ex As Exception
            MsgBox("Error general: " & ex.Message)
            Return False
        End Try
    End Function




VerificarServicioAEAT("https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP", "c:\certificados\micertificado.pfx", passwordCertificado)


un saludo

FacilIng 11-07-2025 09:59:43

Buenos días,

Desde ayer a las 12:58 el response.StatusCode es "299 - Undefined".
No sé si es que esta comprobación ha dejado de funcionar o que ha habido algún cambio en la AEAT.
La verdad es q es un pena pq funcionaba muy bien.

Muchas gracias.

jlmoli_67 13-07-2025 10:18:36

Buenas,

En principio el mismo codigo 299 ya significaria que el servicio esta funcionando ya que no es un código de estado HTTP estándar por lo tanto el servicio lo ha asignado como respuesta. Seguramente lo asignaran a los mensajes soap que carecen de xml. Faltaria comprobar esto que te digo llamando a la funcion en un momento en el que realmente el servicio este caido. Intentare comprobarlo. Los viernes por la noche suelen pararlo para hacer "sus cositas".

Esta es la cabecera de respuesta (luego hay respuesta):

Código:

dit-niu: 55000611386
dit-tarea: 7190
dit-servidor: WLP00402
dit-idpeticion: 20250713101103269026
x-ua-compatible: IE=7
Content-Length: 253
Content-Type: text/xml; charset=UTF-8
Date: Sun, 13 Jul 2025 08:11:03 GMT
Set-Cookie: CERT_WWW1=67CECE645A1A038662C70C21B90FD0829C6022BACB433FE56F92234B2D3A2CA665A4AB87BF542710B93416FC106266A9B88DAA70C5F2A775B856E87D8CC69DFB1562A823482261607AE84A8DA0F0CA840A0AD3FEM2kLpaFKkQfHR6To7qnvuBi5KmUH55X01WwoypqxmWzw7sqeMEpkYTcFXyt6T3rPP759aYLKch20tIY9TdVtW9kIKheF1AWPwtdfcuKZW+iu5KjbiyyuHt3qKJo3lIyYuejrZRHwNJ3/DX70rgGNDxws8NBSsJGIec6YG1cJ0/GOOCl6VQefTu6PHnlunvOW2iEyxAK6cOHnV+cj24iXhytm0jMIAsq+Of4EBRG9dHgc2C7iPaOY1/z5hL9rbAlpcnFxMkR6xTMTP9Z1yElf6fPqhNNeatfDeCRVB7UQepVThNsaVqVEXYdd1/cAiXwokndH+QOEkIhkauVSxv2ccE3o4xhQe3CztrZnzSDBsdXFBxN7JDsEafl5ArrH2EcDtjOV53XqyrVf+cj0mIzWs5hih81ZLiA==; Domain=.aeat.es; Path=/; HttpOnly; Secure,CERT_WWW1V=20250713-09410326; Domain=.aeat.es; Path=/; Secure,sgat_id_usr_sede=%7B%22tipoAcceso%22%3A%22C%22%2C%22fechaYHora%22%3A%2220250713101103270%22%2C%22nombre%22%3A%22MOLINA%20MU%C3%91OZ%20JOS%C3%89%20LUIS%22%7D; Domain=.aeat.es; Path=/; Secure
dit-codigo-respuesta: 99999
content-language: es-ES
expires: Thu, 01 Dec 1994 16:00:00 GMT
cache-control: no-cache="set-cookie, set-cookie2"
x-site: Sede
referrer-policy: strict-origin-when-cross-origin
x-xss-protection: 1; mode=block
strict-transport-security: max-age=31536000; includeSubDomains
content-security-policy: frame-ancestors 'self' *.aeat.es


FacilIng 14-07-2025 12:43:15

Bueno, lo he solucionado con ayuda del Sr. Copilot que me ha echado una mano ;) ...

Simplemente añado "HEAD" en la preparación de la solicitud, para saber solo si responde el servicio, ignorando el contenido.
Quedaría así:
Código:

            ' Preparar la solicitud
            Dim request As HttpWebRequest = CType(WebRequest.Create(url), HttpWebRequest)
            request.Method = "POST"
            request.ContentLength = 0
            request.ClientCertificates.Add(cert)
            request.Timeout = 10000
            request.Method = "HEAD" 'COPILOT --> Solo solicita los encabezados

            ' Obtener respuesta
            Using response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
                Return response.StatusCode = HttpStatusCode.OK
            End Using

Y con esto y un bizcocho :) ...
Muchas gracias por la ayuda jlmoli_67!!!


La franja horaria es GMT +2. Ahora son las 22:34:59.

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