Как подключиться к веб-сервису с помощью suds? - PullRequest
1 голос
/ 28 февраля 2012

Я хочу подключиться к веб-сервису e-conomic для синхронизации данных из моего интернет-магазина с системой бухгалтерского учета e-conomic. Но я застрял в начале, как установить соединение.

У меня есть учетная запись e-conomic, имя пользователя и пароль, и я установил библиотеку suds для совершения вызова:

>>> from suds.client import Client
>>> c = Client('https://www.e-conomic.com/secure/api1/EconomicWebService.asmx?WSDL')
>>>

Тогда что?

Документация здесь , и я хочу создать новый заказ, как описано здесь .

Мой код, который является частью моего приложения, только что запущен, и я не знаю, как указать мою учетную запись в запросе SOAP:

from suds.client import Client

class Economic(NewBaseHandler):

    def get(self):
        url = 'https://www.e-conomic.com/secure/api1/EconomicWebService.asmx?WSDL'
        client = Client(url)
        self.response.out.write('client: %s' % str(client))

Можете ли вы сказать мне, как действовать?

Ответы [ 2 ]

3 голосов
/ 28 февраля 2012

Вы должны вызвать веб-сервис с помощью метода service из Client.

>>> from suds.client import Client
>>> c = Client('https://www.e-conomic.com/secure/api1/EconomicWebService.asmx?WSDL')
>>> c.service.Account_Create(10, '20', 'ProfitAndLoss')
------------------------------------------------------------
Traceback (most recent call last):
  File "<ipython console>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/suds-0.3.6-py2.7.egg/suds/client.py", line 240, in __call__
    return target.call(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/suds-0.3.6-py2.7.egg/suds/client.py", line 379, in call
    return method(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/suds-0.3.6-py2.7.egg/suds/client.py", line 240, in __call__
    return target.call(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/suds-0.3.6-py2.7.egg/suds/client.py", line 422, in call
    return client.invoke(args, kwargs)
  File "/usr/lib/python2.7/site-packages/suds-0.3.6-py2.7.egg/suds/client.py", line 480, in invoke
    result = self.send(msg)
  File "/usr/lib/python2.7/site-packages/suds-0.3.6-py2.7.egg/suds/client.py", line 511, in send
    result = self.failed(binding, e)
  File "/usr/lib/python2.7/site-packages/suds-0.3.6-py2.7.egg/suds/client.py", line 562, in failed
    r, p = binding.get_fault(reply)
  File "/usr/lib/python2.7/site-packages/suds-0.3.6-py2.7.egg/suds/bindings/binding.py", line 226, in get_fault
    raise WebFault(p, faultroot)
WebFault: Server raised fault: 'Economic.Api.Exceptions.AuthenticationException(E02250): User is not authenticated. Access denied. {id=131496672}'

Я получил эту ошибку, потому что пользователь не аутентифицирован. Там может быть какой-то сервис или какой-то ключ, по которому они будут аутентифицировать пользователя. Вам нужен этот ключ, чтобы вы могли позвонить в службу.

1 голос
/ 27 ноября 2016
#Works only in 2.7 Python. Does not work in Python 3.0 version 

from suds.client import Client
from suds.sax.text import Raw

client = Client('https://www.e-conomic.com/secure/api1/EconomicWebService.asmx?WSDL')
xml = Raw('--Paste your entire xml --')
Response_XML= (client.service.MethodName(__inject={'msg':xml}))

- Вы получите все свои xml-ответы в переменной Response_XML

...