Python Webmoney API
Потребовалось мне как то реализовать поддержку Webmoney API (Документация) в проекте. Библиотек на питоне я не нашел, поэтому решил написать свою.Ссылка на репозиторий
Итак, есть два варианта запроса к апи вебманей.
Keeper Classic — каждый запрос подписывается с помощью проги WMSign Keeper Light — запросы отправляются через защищенное HTTPS соединение с клиентским сертификатом. Я рассматриваю только второй вариант. Для запроса потребуется сертификат. Как его получить написано Здесь. У меня получилось получить сертификат только из Firefox’а, Chrome вообще не поддерживает такую возможность, а Explorer (Windows 8) выдал ошибку. После получения сертификат нужно экспортировать в файл. Какк это сделать написано Тут
Сертификат экспортируется в pkcs12 файл. Нужно из него получить публичный и приватный ключи. Делается это командами:
openssl pkcs12 -in path.p12 -out crt.pem -clcerts -nokeys openssl pkcs12 -in path.p12 -out key.pem -nocerts -nodes Работа с API Пакет можно установить через pip:
pip install webmoney-api После установки импортируем библиотеки
from webmoney_api import ApiInterface, WMLightAuthInterface WMLightAuthInterface — класс, описывающий аутентификацию через Keeper Light.ApiInterface — класс апи.
Подключаем:
>>> api = ApiInterface (WMLightAuthInterface (»/home/stas/wmcerts/crt.pem»,»/home/stas/wmcerts/key.pem»)) При инициализации WMLightAuthInterface, передаем в него пути до наших сгенеренных публичного и приватного ключаПосле подключения доступны следующие методы:
x1 — x10 — соответствуют аналогичным интерфейсам вебманей. Параметры передаются поименно в вызываемый метод.Дополнительно можно передать параметр reqn — номер запроса.
Метод делает запрос и возвращает данные в формате:
{«retval»: retval — код ответа, возвращаемый вебманями. 0 если запрос успешен. Коды можно посмотреть тут
retdesc — если retval!= 0, тут лежит описание ошибки
response — распарсенный в OrderedDict ответ запроса. Тут лежат только данные, касающиеся запроса. Например, для запроса
>>> api.x8(purse=«R328079907035», reqn=int (time.time ()))[«response»][«wmid»][»#text»]
u'407414370132' >>> api.x8(purse=«R328079907035», reqn=int (time.time ()))[«response»][«wmid»][»@available»]
u'0'
Пример: получение истории всех выписанных счетов по кошельку
>>> api.x4(purse=«R328079907035», datestart=»20100101 00:00:00», datefinish=»20140501 00:00:00»)
ValueError: Error while requesting API. retval = -4, retdesc = wrong w3s.request/reqn step=2
Request data: {'cert': ('/home/stas/wmcerts/crt.pem', '/home/stas/wmcerts/key.pem'),
'data': '
>>> api.x4(purse=«R328079907035», datestart=»20100101 00:00:00», datefinish=»20140501 00:00:00», reqn=int (time.time ()))
{'response': OrderedDict ([(u'@cnt', u'0'), (u'@cntA', u'0')]),
'retdesc': None,
'retval': u'0'}
Пример: получение списка счетов на оплату
>>> for order in api.x10(wmid=»407414370132», datestart=»20100101 00:00:00», datefinish=»20140501 00:00:00», reqn=int (time.time ()))[«response»][«ininvoice»]:
>>> print order[«orderid»], order[«amount»], order[«state»] 4640849 122.40 2
24 1.00 2
27 0.40 2
Ссылки
Буду рад замечаниям и помощи)