83 lines
3.7 KiB
Python
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}") |