Найти - Пользователи
Полная версия: http://www.popfax.com Как перевести код с PHP на Python и suds
Начало » Python для новичков » http://www.popfax.com Как перевести код с PHP на Python и suds
1
savao
Добрый день.
Столкнулся с такой проблемой. Надо работать с сервисом 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 не понимаю.
Может кто подскажет?
agalen
Примерно так:

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(…).
savao
Попробовал выполнить этот код:
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 - это не авторизовало.
Логин и пароль вроде верные (в данном примере я их поменял, естественно, потому что это аккаунт заказчика).
savao
Так сейчас попробовал с логином и паролем выполнить исходный код на php результат тот же, ошибка 107.
Так что видимо не в питоновском коде дело, а проблема на той стороне.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB