VerifactuMidAPI/test/test_direct_no_cert.py

83 lines
3.7 KiB
Python

import urllib.request
import urllib.parse
import urllib.error
URL = "https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP"
soap_request = """<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<RegFactuSistemaFacturacion xmlns:sum="SuministroLR">
<sum:Cabecera>
<sum1:ObligadoEmision xmlns:sum1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
<sum1:NombreRazon>TEST EMPRESA SL</sum1:NombreRazon>
<sum1:NIF>53950250R</sum1:NIF>
</sum1:ObligadoEmision>
</sum:Cabecera>
<sum:RegistroFactura>
<sum1:RegistroAlta xmlns:sum1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd">
<sum1:IDVersion>1.0</sum1:IDVersion>
<sum1:IDFactura>
<sum1:IDEmisorFactura>53950250R</sum1:IDEmisorFactura>
<sum1:NumSerieFactura>FV2026/TEST001</sum1:NumSerieFactura>
<sum1:FechaExpedicionFactura>17-04-2026</sum1:FechaExpedicionFactura>
</sum1:IDFactura>
<sum1:NombreRazonEmisor>TEST EMPRESA SL</sum1:NombreRazonEmisor>
<sum1:TipoFactura>F1</sum1:TipoFactura>
<sum1:DescripcionOperacion>Factura de prueba test</sum1:DescripcionOperacion>
<sum1:Desglose>
<sum1:DetalleDesglose>
<sum1:ClaveRegimen>01</sum1:ClaveRegimen>
<sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
<sum1:TipoImpositivo>01</sum1:TipoImpositivo>
<sum1:BaseImponibleOimporteNoSujeto>100.00</sum1:BaseImponibleOimporteNoSujeto>
<sum1:CuotaRepercutida>21.00</sum1:CuotaRepercutida>
</sum1:DetalleDesglose>
</sum1:Desglose>
<sum1:CuotaTotal>21.00</sum1:CuotaTotal>
<sum1:ImporteTotal>121.00</sum1:ImporteTotal>
<sum1:Encadenamiento>
<sum1:PrimerRegistro>S</sum1:PrimerRegistro>
</sum1:Encadenamiento>
<sum1:SistemaInformatico>
<sum1:NombreRazon>TEST API</sum1:NombreRazon>
<sum1:NIF>53950250R</sum1:NIF>
<sum1:NombreSistemaInformatico>TEST-API</sum1:NombreSistemaInformatico>
<sum1:IdSistemaInformatico>1</sum1:IdSistemaInformatico>
<sum1:Version>1.0</sum1:Version>
<sum1:NumeroInstalacion>1</sum1:NumeroInstalacion>
<sum1:TipoUsoPosibleSoloVerifactu>S</sum1:TipoUsoPosibleSoloVerifactu>
</sum1:SistemaInformatico>
<sum1:FechaHoraHusoGenRegistro>17-04-2026T12:00:00</sum1:FechaHoraHusoGenRegistro>
<sum1:TipoHuella>SHA-256</sum1:TipoHuella>
<sum1:Huella>0A1B2C3D4E5F6</sum1:Huella>
</sum1:RegistroAlta>
</sum:RegistroFactura>
</RegFactuSistemaFacturacion>
</soapenv:Body>
</soapenv:Envelope>"""
ctx = urllib.request.ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = urllib.request.ssl.CERT_NONE
headers = {
"Content-Type": "text/xml; charset=utf-8",
"SOAPAction": ""
}
print("Testing AEAT without certificate (just headers)...")
req = urllib.request.Request(URL, data=soap_request.encode('utf-8'), headers=headers)
try:
opener = urllib.request.build_opener(urllib.request.HTTPSHandler(context=ctx))
response = opener.open(req, timeout=30)
print(f"Status: {response.status}")
print(f"Response: {response.read().decode('utf-8')[:1500]}")
except urllib.error.HTTPError as e:
print(f"HTTP Error: {e.code}")
print(f"Body: {e.read().decode('utf-8')[:1500]}")
except Exception as e:
print(f"Error: {type(e).__name__}: {e}")