79 lines
3.5 KiB
Python
79 lines
3.5 KiB
Python
|
|
import urllib.request
|
||
|
|
import urllib.parse
|
||
|
|
|
||
|
|
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</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/001</sum1:NumSerieFactura>
|
||
|
|
<sum1:FechaExpedicionFactura>17-04-2026</sum1:FechaExpedicionFactura>
|
||
|
|
</sum1:IDFactura>
|
||
|
|
<sum1:NombreRazonEmisor>TEST EMPRESA</sum1:NombreRazonEmisor>
|
||
|
|
<sum1:TipoFactura>F1</sum1:TipoFactura>
|
||
|
|
<sum1:DescripcionOperacion>Factura de prueba</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</sum1:NombreRazon>
|
||
|
|
<sum1:NIF>53950250R</sum1:NIF>
|
||
|
|
<sum1:NombreSistemaInformatico>TEST</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>TESTHASH</sum1:Huella>
|
||
|
|
</sum1:RegistroAlta>
|
||
|
|
</sum:RegistroFactura>
|
||
|
|
</RegFactuSistemaFacturacion>
|
||
|
|
</soapenv:Body>
|
||
|
|
</soapenv:Envelope>"""
|
||
|
|
|
||
|
|
headers = {
|
||
|
|
"Content-Type": "text/xml; charset=utf-8",
|
||
|
|
"SOAPAction": ""
|
||
|
|
}
|
||
|
|
|
||
|
|
print("Enviando a AEAT test...")
|
||
|
|
print(f"URL: {URL}")
|
||
|
|
|
||
|
|
req = urllib.request.Request(URL, data=soap_request.encode('utf-8'), headers=headers)
|
||
|
|
|
||
|
|
try:
|
||
|
|
with urllib.request.urlopen(req, timeout=30) as response:
|
||
|
|
print(f"\nStatus: {response.status}")
|
||
|
|
content = response.read().decode('utf-8')
|
||
|
|
print(f"\nResponse:\n{content[:1500]}")
|
||
|
|
except urllib.error.HTTPError as e:
|
||
|
|
print(f"HTTP Error: {e.code}")
|
||
|
|
print(f"Response: {e.read().decode('utf-8')[:1500]}")
|
||
|
|
except urllib.error.URLError as e:
|
||
|
|
print(f"URL Error: {e.reason}")
|