[pyar] Web service de tipo WCF

Mariano Reingart reingart en gmail.com
Mar Ago 20 02:06:04 ART 2013


Federico:

Para variar, se ve que en el webservice que pasas no define los
"bindings" en el archivo principal, sino que los importa en otros
archivos.
Te paso un archivo WSDL "unificado" que te debería ayudar (dentro de
federico.zip), luego de descomprimirlo te conectarías y llamarías al
webservice con:

client = SoapClient(wsdl="federico.wsdl", ns="ns0", soap_ns="soapenv")
client.TimbrarTest(comprobanteBytesZipped="1234")
print retval['TimbrarTestResult']

Más allá de eso, el método TimbrarTest recibe y devuelve un base64,
ahí agregue un cambio para que te lo tome, al igual que le comenté a
Mauricio, debés descargarte la versión de desarrollo de PySimpleSoap:

hg clone https://code.google.com/p/pysimplesoap/
cd pysimplesoap
hg update wsdl_namespaces

Te adjunto el código completo del test, aparentemente funcionaría pero
como no tengo el dato que se envía en el parámetro
comprobanteBytesZipped de TimbrarTest, el webservice me devuelve
"a:InvalidSecurity An error occurred when verifying security for the
message."
Quizás también te falte algún encabezado.

Sería bueno tener más datos para poder probar y hacer los ajustes
definitivos para este caso.

Cualquier cosa avisame,

Sds

Mariano Reingart
http://www.sistemasagiles.com.ar
http://reingart.blogspot.com


2013/8/18 Federico Manuel Echeverri Choux <echeverrifm en gmail.com>:
> Se me olvido de ponerlo esto es todo lo que me da el pac
>
> https://digitalinvoicecfdi.com.mx/WS_WSDI/DigitalInvoice.WebServices.WSDI.Timbrado.svc
>
> Saludos
>
>
> El 18 de agosto de 2013 12:10, Federico Manuel Echeverri Choux
> <echeverrifm en gmail.com> escribió:
>
>> Hola!!! Mariano hice lo que me dices
>>
>> >>> from pysimplesoap.client import SoapClient, SoapFault
>> >>> url =
>> >>> 'https://digitalinvoicecfdi.com.mx/WS_WSDI/DigitalInvoice.WebServices.WSDI.Timbrado.svc?wsdl'
>> >>> client = SoapClient(url, ns="s")
>>
>> hasta ahi todo bien,
>>
>> pero pruebo con:
>>
>> >>> client.help('TimbrarTest')
>> Traceback (most recent call last):
>>   File "<stdin>", line 1, in <module>
>>   File "pysimplesoap/client.py", line 214, in help
>>     operation = self.get_operation(method)
>>   File "pysimplesoap/client.py", line 166, in get_operation
>>     for service_name, service in self.services.items():
>> AttributeError: 'NoneType' object has no attribute 'items'
>>
>> y esto es todo lo que me dio el PAC
>>
>> Hice mal el help??
>>
>> Saludos
>>
>>
>> El 18 de agosto de 2013 10:12, Mariano Reingart <reingart en gmail.com>
>> escribió:
>>
>>> Federico:
>>>
>>> Para consumir (usar) un webservice con pysimplesoap sería similar a
>>> suds , debes crear el cliente y llamar a los métodos.
>>> No hace falta crear clases ni nada complejo, las estructuras de datos
>>> se manejan con tipos simples de python, por lo que no deberías tener
>>> algunos de los problemas de suds y otras librerías similares.
>>>
>>> Usando el ejemplo que dieron en otro email (tendrías que cambiar el
>>> wsdl para tu caso):
>>>
>>> >>> from pysimplesoap.client import SoapClient
>>> >>>
>>> >>> WSDL = "http://pruebas.ecodex.com.mx:2044/ServicioSeguridad.svc?wsdl"
>>> >>> client = SoapClient(wsdl=WSDL, ns="s")
>>>
>>> Luego podes inspeccionar client.services para ver que servicios y
>>> métodos expone:
>>>
>>> {'Seguridad': {'documentation': '',
>>>   'ports': {'PuertoSeguridad': {
>>>       'location':
>>> 'http://pruebas.ecodex.com.mx:2044/ServicioSeguridad.svc',
>>>       'name': 'PuertoSeguridad',
>>>       'operations': {'ObtenerToken': {
>>>           'action':
>>> 'http://Ecodex.WS.Model/2011/CFDI/Seguridad/ObtenerToken',
>>>           'documentation': '',
>>>           'header': None,
>>>           'input': {'SolicitudObtenerToken': {
>>>                         'RFC': str,
>>>                         'TransaccionID': long}},
>>>           'name': 'ObtenerToken',
>>>           'output': {'RespuestaObtenerToken': {
>>>                         'Token': str,
>>>                         'TransaccionID': long}},
>>>           'parts': {'input_body': None,
>>>             'input_header': None,
>>>             'output_body': None,
>>>             'output_header': None}}},
>>>       'port_type_name': 'Seguridad',
>>>       'service_name': 'Seguridad',
>>>       'soap_uri': 'http://schemas.xmlsoap.org/wsdl/soap/',
>>>       'soap_ver': 'soap11',
>>>       'transport': 'http://schemas.xmlsoap.org/soap/http'},
>>>     'PuertoSeguridadSeguro': {
>>>         'location':
>>> 'https://pruebas.ecodex.com.mx:2045/ServicioSeguridad.svc',
>>>         'name': 'PuertoSeguridadSeguro',
>>>         'operations': {'ObtenerToken': {
>>>             'action':
>>> 'http://Ecodex.WS.Model/2011/CFDI/Seguridad/ObtenerToken',
>>>             'documentation': '',
>>>             'header': None,
>>>             'input': {'SolicitudObtenerToken': {
>>>                           'RFC': str,
>>>                           'TransaccionID': long}},
>>>             'name': 'ObtenerToken',
>>>             'output': {'RespuestaObtenerToken': {
>>>                           'Token': str,
>>>                           'TransaccionID': long}},
>>>             'parts': {'input_body': None,
>>>             'input_header': None,
>>>             'output_body': None,
>>>             'output_header': None}}},
>>>         'port_type_name': 'Seguridad',
>>>         'service_name': 'Seguridad',
>>>         'soap_uri': 'http://schemas.xmlsoap.org/wsdl/soap/',
>>>         'soap_ver': 'soap11',
>>>         'transport': 'http://schemas.xmlsoap.org/soap/http'}}}}
>>>
>>>
>>> En 'operations' podes ver que tiene una operación ObtenerToken, podes
>>> ver la firma con client.help:
>>>
>>> >>> print client.help('ObtenerToken')
>>>
>>> ObtenerToken(RFC=<type 'str'>, TransaccionID=<type 'long'>)
>>>  -> {u'Token': <type 'str'>, u'TransaccionID': <type 'long'>}:
>>>
>>> Ahi te dice cuales son los parámetros, simplemente donde dice type str
>>> o long tenes que reemplazar por el valor.
>>> Te indica que devuelve un diccionario con dos claves Token y
>>> TransaccionID.
>>>
>>> Para llamar al método remoto sería:
>>>
>>> >>> retval = client.ObtenerToken(RFC="Saraza", TransaccionID=1234)
>>> >>> print retval['Token']
>>> >>> print retval['TransaccionID']
>>>
>>> Te adjunto un ejemplo completo con lo que envió Mauricio.
>>>
>>> Cualquier cosa avisame y lo vemos,
>>>
>>> Sds
>>>
>>> Mariano Reingart
>>> http://www.sistemasagiles.com.ar
>>> http://reingart.blogspot.com
>>>
>>>
>>> 2013/8/18 Federico Manuel Echeverri Choux <echeverrifm en gmail.com>:
>>> > Hola!!!! gente, probe los que me dijeron el tuyo angel lo probe con dos
>>> > webservice, uno me funciono y el otro me da error
>>> > Esto Use:
>>> >
>>> > from suds.client import Client
>>> > url = 'http://localhost:7080/webservices/WebServiceTestBean?wsdl'
>>> > client = Client(url)
>>> >
>>> >
>>> >
>>> > el que te comente que me da error me devuelve esto:
>>> >
>>> >
>>> >   File "/usr/lib/python2.7/dist-packages/suds/wsdl.py", line 177, in
>>> > add_children
>>> >     child = Factory.create(c, self)
>>> >   File "/usr/lib/python2.7/dist-packages/suds/wsdl.py", line 920, in
>>> > create
>>> >     return fn(root, definitions)
>>> >   File "/usr/lib/python2.7/dist-packages/suds/wsdl.py", line 432, in
>>> > __init__
>>> >     NamedObject.__init__(self, root, definitions)
>>> >   File "/usr/lib/python2.7/dist-packages/suds/wsdl.py", line 90, in
>>> > __init__
>>> >     WObject.__init__(self, root, definitions)
>>> >   File "/usr/lib/python2.7/dist-packages/suds/wsdl.py", line 58, in
>>> > __init__
>>> >     Object.__init__(self)
>>> >   File "/usr/lib/python2.7/dist-packages/suds/sudsobject.py", line 132,
>>> > in
>>> > __init__
>>> >     self.__metadata__ = Metadata()
>>> > RuntimeError: maximum recursion depth exceeded
>>> >
>>> >
>>> > Lo tuyo Mariano aun no lo entiendi muy bien, ahora me dedico a eso a
>>> > ver que
>>> > me sale.
>>> >
>>> > Que tan grave es que publique el link??
>>> >
>>> > es este: ( Modificado )
>>> >
>>> > https://webservice.com/WS_WSDI/WebServices.WSDI.Timbrado.svc?wsdl
>>> >
>>> > Saludos y Gracias
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > El 15 de agosto de 2013 18:35, Angel Java Lopez <ajlopez2000 en gmail.com>
>>> > escribió:
>>> >>
>>> >> Hola gente!
>>> >>
>>> >>
>>> >> Federico, apenas si programo en Python, apenas lo conozco. Pero
>>> >> cualquiera
>>> >> que vaya a consumir WCF trata de sacar todo de lo que el WSDL (Web
>>> >> Service
>>> >> Description Language). Fijate que aca dice en general como obtenerlo:
>>> >>
>>> >>
>>> >>
>>> >> http://www.warden.pl/2013/02/21/consuming-wsdl-web-services-with-perl-or-python/
>>> >>
>>> >> Y ahi usa una libreria suds
>>> >> https://fedorahosted.org/suds/
>>> >>
>>> >> que dado el WSDL, te deja ya armado el metodo de invocacion, con monio
>>> >> parece ;-)
>>> >>
>>> >> Te funciono?
>>> >>
>>> >> Nos leemos!
>>> >>
>>> >> Angel "Java" Lopez
>>> >> @ajlopez
>>> >>
>>> >>
>>> >>
>>> >> 2013/8/15 Federico Manuel Echeverri Choux <echeverrifm en gmail.com>
>>> >>>
>>> >>> Hola!!!! gente, alguien hizo algo con webservice WCF?? alguna doc que
>>> >>> me
>>> >>> puedan pasar para ver si puedo hacer esto.
>>> >>>
>>> >>> Muchisimas gracias de antemano
>>> >>>
>>> >>>
>>> >>> --
>>> >>> Federico Manuel Echeverri Choux
>>> >>> Vauxoo - OpenERP's Gold Partner
>>> >>> mobile: (+521) 444-1-400683
>>> >>> Tel: (+52) 444-8185539
>>> >>> skype: echeverrifm
>>> >>> web: http://www.vauxoo.com
>>> >>> twitter: @echeverrifm
>>> >>>            @vauxoo
>>> >>>
>>> >>> _______________________________________________
>>> >>> pyar mailing list pyar en python.org.ar
>>> >>> http://listas.python.org.ar/listinfo/pyar
>>> >>>
>>> >>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>> >>>
>>> >>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
>>> >>> de
>>> >>> Argentina - http://www.usla.org.ar
>>> >>
>>> >>
>>> >>
>>> >> _______________________________________________
>>> >> pyar mailing list pyar en python.org.ar
>>> >> http://listas.python.org.ar/listinfo/pyar
>>> >>
>>> >> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>> >>
>>> >> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> >> Argentina - http://www.usla.org.ar
>>> >
>>> >
>>> >
>>> >
>>> > --
>>> > Federico Manuel Echeverri Choux
>>> > Vauxoo - OpenERP's Gold Partner
>>> > mobile: (+521) 444-1-400683
>>> > Tel: (+52) 444-8185539
>>> > skype: echeverrifm
>>> > web: http://www.vauxoo.com
>>> > twitter: @echeverrifm
>>> >            @vauxoo
>>> >
>>> > _______________________________________________
>>> > pyar mailing list pyar en python.org.ar
>>> > http://listas.python.org.ar/listinfo/pyar
>>> >
>>> > PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>> >
>>> > La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> > Argentina - http://www.usla.org.ar
>>>
>>> _______________________________________________
>>> pyar mailing list pyar en python.org.ar
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>
>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> Argentina - http://www.usla.org.ar
>>
>>
>>
>>
>> --
>> Federico Manuel Echeverri Choux
>> Vauxoo - OpenERP's Gold Partner
>> mobile: (+521) 444-1-400683
>> Tel: (+52) 444-8185539
>> skype: echeverrifm
>> web: http://www.vauxoo.com
>> twitter: @echeverrifm
>>            @vauxoo
>
>
>
>
> --
> Federico Manuel Echeverri Choux
> Vauxoo - OpenERP's Gold Partner
> mobile: (+521) 444-1-400683
> Tel: (+52) 444-8185539
> skype: echeverrifm
> web: http://www.vauxoo.com
> twitter: @echeverrifm
>            @vauxoo
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: test_federico.py
Type: application/octet-stream
Size: 1001 bytes
Desc: no disponible
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20130820/565479d7/attachment-0001.obj>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: federico.zip
Type: application/zip
Size: 2632 bytes
Desc: no disponible
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20130820/565479d7/attachment-0001.zip>


More information about the pyar mailing list