Уведомления

Группа в Telegram: @pythonsu

#1 Июль 17, 2013 18:36:26

savao
Зарегистрирован: 2013-07-13
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

http://www.popfax.com Как перевести код с PHP на Python и suds

Добрый день.
Столкнулся с такой проблемой. Надо работать с сервисом http://www.popfax.com через SOAP.
В доке есть только примеры на PHP. Искал на питоне подходящий клиент для SOAP который бы мог отправлять вложенные файлы. Нашел что можно использовать suds с дополнительной оберткой.
Но возникла проблема: Не могу понять как правильно подключится к сервису. Как сформировать заголовки. Как обращаться к методам.
В доке такой код:

$usernameToken = array(
'email' => $username,
'password' => $password
);
$wsse_ns = "http://schemas.xmlsoap.org/ws/2002/07/secext";
$SoapVarUser = new SoapVar($username, XSD_STRING, NULL, $wsse_ns, NULL, $wsse_ns);
$SoapVarPass = new SoapVar($password, XSD_STRING, NULL, $wsse_ns, NULL, $wsse_ns);
$wsse_auth = new SoapVar($usernameToken, SOAP_ENC_OBJECT, NULL, $wsse_ns, 'AuthenticationHeader', $wsse_ns);
$header=new SoapVar($wsse_auth, SOAP_ENC_OBJECT, NULL, $wsse_ns, 'Security', $wsse_ns);
$wsse_header = new SoapHeader($wsse_ns, 'AuthenticationHeader', $header, true);
$wsdl = "https://api3.popfax.com/?service=Popfax&wsdl";
$client = new SoapClient($wsdl);
$client->__setSoapHeaders(array($wsse_header));
$response = $client->__SoapCall('PopfaxService.getAccountInfo',array());
Как его преобразовать для Python не понимаю.
Может кто подскажет?

Офлайн

#2 Июль 18, 2013 10:02:31

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

http://www.popfax.com Как перевести код с PHP на Python и suds

Примерно так:

from suds.client import Client
from suds.transport.http import HttpAuthenticated
wsdl = "https://api3.popfax.com/?service=Popfax&wsdl"
t = HttpAuthenticated(username='elmer', password='fudd')
c = Client( wsdl, transport=t )
print c
result = getattr(c.service, "PopfaxService.getAccountInfo")()
print result
Метод содержит “.” в имени, поэтому используем getattr(…).



Офлайн

#3 Июль 18, 2013 11:24:13

savao
Зарегистрирован: 2013-07-13
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

http://www.popfax.com Как перевести код с PHP на Python и suds

Попробовал выполнить этот код:
url = 'https://api3.popfax.com/?service=Popfax&wsdl'
from suds.client import Client
from suds.transport.http import HttpAuthenticated
t = HttpAuthenticated(username='savao', password='savao')
c = Client( url, transport=t )
result = getattr(c.service, “PopfaxService.authenticate”)()
Traceback (most recent call last):

WebFault: Server raised fault: ‘No XML root element’
Тогда попробовал добавить еще и wsse авторизацию:
from suds.wsse import *
>>> security = Security()
>>> token = UsernameToken('savao', ‘savao’)
>>> security.tokens.append(token)
>>> c.set_options(wsse=security)
>>> result = getattr(c.service, “PopfaxService.authenticate”)()
Traceback (most recent call last):

WebFault: Server raised fault: ‘Error 107’
107 - это не авторизовало.
Логин и пароль вроде верные (в данном примере я их поменял, естественно, потому что это аккаунт заказчика).

Офлайн

#4 Июль 18, 2013 12:59:21

savao
Зарегистрирован: 2013-07-13
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

http://www.popfax.com Как перевести код с PHP на Python и suds

Так сейчас попробовал с логином и паролем выполнить исходный код на php результат тот же, ошибка 107.
Так что видимо не в питоновском коде дело, а проблема на той стороне.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version