Zeep recibió un argumento de palabra clave inesperado en la operación.
Estoy tratando de enviar una solicitud a un “WSDL WebServices”. Según la documentación, las solicitudes deben estar formateadas en XML.
Estoy usando Python y el módulo Zeep. La operación que quiero usar se llama ‘Consulta’ y los parámetros se llaman ‘Comercio’ y ‘NumPedido’ (el primero es de tipo numérico y el segundo es alfanumérico).
El código que he intentado es el siguiente:
from zeep import Client, Settings
settings = Settings(strict=False, xml_huge_tree=True)
client = Client('https://testws.punto-web.com/wcfadproc/srvproceso.svc?wsdl', settings=settings)
request_data = {'Comercio': '8004749', 'NumPedido': '7030510'}
client.service.ConsultaMarca(**request_data)
Pero esto me da un error
TypeError: {http://tempuri.org/}Consulta_Marca() got an unexpected keyword argument 'NumPedido'. Signature: 'xml: xsd:string'
¿Alguien puede darme algún consejo para solucionar esto? Porque parece que la operación es correcta, pero no sé por qué los parámetros están mal.
EDIT:
He probado este nuevo código:
from zeep import Client, xsd, Settings
settings = Settings(strict=False, xml_huge_tree=True)
client = Client('https://testws.punto-web.com/wcfadproc/srvproceso.svc?wsdl', settings = settings)
parameters = xsd.Element(
'Consulta',
xsd.ComplexType([
xsd.Element(
'Comercio', xsd.Integer()
),
xsd.Element(
'NumPedido', xsd.String()
)
])
)
parameters_values = parameters(Comercio=8004749, NumPedido='7030510')
operation = client.service.ConsultaMarca(parameters_values)
operation
Esto me da otro error
The formatter threw an exception while trying to deserialize the message: Error in deserializing body of request message for operation 'ConsultaMarca'. End element 'xml' from namespace 'http://tempuri.org/' expected. Found element 'Comercio' from namespace ''. Line 2, position 465
Pero creo que estoy más cerca porque si ejecuto client.service.Consulta_Marca(parameters)
, obtengo una respuesta válida, pero con valores nulos porque no se pasaron los valores de los parámetros.
¡Por favor, ayuda!
davy.ai
Según el mensaje de error, parece que la función
Consulta_Marca()
espera un único argumento de tipo string en lugar de dos argumentos clave (Comercio
yNumPedido
).Puedes intentar pasar directamente la solicitud XML como un string utilizando un f-string de Python de la siguiente manera:
Esto debería crear un string XML correctamente formateado con los valores de
Comercio
yNumPedido
y pasarlo como solicitud a la funciónConsulta_Marca()
.Alternativamente, puedes intentar definir los parámetros utilizando el método
xsd.Element
y pasarlo a la funciónConsulta_Marca()
:Esto debería crear una solicitud XML correctamente formateada con los valores de
Comercio
yNumPedido
y pasarla a la funciónConsulta_Marca()
.