meta data de esta página
Introducción
El presente documento tiene como objetivo detallar el proceso para consumir los métodos del web service FEL de Panamá utilizando el lenguaje Python 3.
Para llevar a cabo el consumo, se deben instalar Python 3:
- **Python 3**: https://www.python.org/downloads
Una vez instalado Python 3, debemos instalar un cliente SOAP para Python utilizando el manejador de paquetes incluido en la instalación de Python 3 llamado pip. El cliente SOAP que se utilizará en este ejemplo es zeep, su documentación se encuentra en el siguiente URL:
https://docs.python-zeep.org/en/master/
Pasos para instalar zeep:
- Abrir CMD en la carpeta que contiene los archivos de Python.
- Correr el siguiente comando: pip install zeep
Creación de estructura del documento a enviar
- Importamos zeep, almacenamos el web service dentro de una variable y lo pasamos a zeep como el web service que se utilizará:
# Modulo que brinda funciones de SOAP
import zeep
# Link del WS
wsdl =
'https://demointegracion.ebi-pac.com/ws/obj/v1.0/Service.svc?singleWsdl'
# Establecemos el cliente como el WS
cliente = zeep.Client(wsdl=wsdl)
- Creamos una variable llamada datos que va a almacenar la estructura del documento a enviar, la misma está compuesta de diccionarios anidados y lista de diccionarios para cumplir con la estructura de los XML:
# Declaramos el diccionario que pasa los datos de factura
datos = dict(
tokenEmpresa="SOLICITAR",
tokenPassword="SOLICITAR",
documento=dict(
codigoSucursalEmisor="0001",
tipoSucursal="1",
datosTransaccion=dict({
"tipoEmision": "01",
"tipoDocumento": "01",
"numeroDocumentoFiscal": "0000001",
"puntoFacturacionFiscal": "001",
"naturalezaOperacion": "01",
"tipoOperacion": 1,
"destinoOperacion": 1,
"formatoCAFE": 1,
"entregaCAFE": 1,
"envioContenedor": 1,
"procesoGeneracion": 1,
"tipoVenta": 1,
"fechaEmision": "2021-10-14T09:00:00-05:00",
"cliente": {
"tipoClienteFE": "02",
"tipoContribuyente": 1,
"numeroRUC": 89337412,
"pais": "PA",
"correoElectronico1": "",
"razonSocial": "MIGUEL GÓMEZ"
}
}),
listaItems=dict(
item=[{
"descripcion": "Esta es una prueba 1",
"cantidad": "1.00",
"precioUnitario": "20.00",
"precioUnitarioDescuento": " ",
"precioItem": "20.00",
"valorTotal": "21.40",
"codigoGTIN": "0",
"cantGTINCom": "0.99",
"codigoGTINInv": "0",
"tasaITBMS": "01",
"valorITBMS": "1.40",
"cantGTINComInv": "1.00"
}, {
"descripcion": "Esta es una prueba 2",
"cantidad": "1.00",
"precioUnitario": "20.00",
"precioUnitarioDescuento": " ",
"precioItem": "20.00",
"valorTotal": "21.40",
"codigoGTIN": "0",
"cantGTINCom": "0.99",
"codigoGTINInv": "0",
"tasaITBMS": "01",
"valorITBMS": "1.40",
"cantGTINComInv": "1.00"
}]
),
totalesSubTotales=dict({
"totalPrecioNeto": "40.00",
"totalITBMS": "2.80",
"totalMontoGravado": "2.80",
"totalDescuento": "",
"totalAcarreoCobrado": "",
"valorSeguroCobrado": "",
"totalFactura": "42.80",
"totalValorRecibido": "42.80",
"vuelto": "0.00",
"tiempoPago": "1",
"nroItems": "2",
"totalTodosItems": "42.80"},
listaFormaPago=dict(
formaPago=[
{"formaPagoFact": "02",
"descFormaPago": " ",
"valorCuotaPagada": "21.40"},
{"formaPagoFact": "02",
"descFormaPago": " ",
"valorCuotaPagada": "21.40"}
]
)
)
)
)
- Utilizamos una variable que se encarga de enviar el request al metodo deseado, luego Podemos imprimir la respuesta del WS a la consola utilizando print:
# Declaramos el metodo a usar, recorremos el diccionario y lo enviamos
res = (cliente.service.Enviar(**datos))
# Se imprime la respuesta a la solicitud del servicio
print(res)
- Enviamos el documento ingresando el siguiente comando en la consola: **Python NombreDocumento.py**
➜ python Enviar.py