プロジェクトでWebmoney API(
ドキュメント )のサポートを何らかの方法で実装する必要がありました。 Pythonでライブラリが見つからなかったため、独自のライブラリを作成することにしました。
リポジトリリンクしたがって、api webmoneyをリクエストするには2つのオプションがあります。
- Keeper Classic-各リクエストはWMSignプログラムを使用して署名されます
- Keeper Light-要求は、クライアント証明書を使用して安全なHTTPS接続を介して送信されます。
2番目のオプションのみを検討しています。 リクエストには証明書が必要です。 入手方法は
ここに書いてあり
ます 。 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クラス。
接続します:
>>> api = ApiInterface(WMLightAuthInterface("/home/stas/wmcerts/crt.pem", "/home/stas/wmcerts/key.pem"))
WMLightAuthInterfaceを初期化するときに、生成された公開キーと秘密キーへのパスを渡します
接続後、次の方法を使用できます。
x1-x10-同様のウェブマネーインターフェースに対応します。 パラメーターは、名前で呼び出されたメソッドに渡されます。
さらに、
reqnパラメーター(リクエスト番号)を渡すことができます。
メソッドはリクエストを作成し、次の形式でデータを返します。
{"retval": <retval>, "retdesc": <retdesc>, "response": <response}
どこで
- retvalは、ウェブマスターから返される応答コードです。 要求が成功した場合は0。 コードはここにあります。
- retdesc-retval!= 0の場合、ここにエラーの説明があります
- response-OrderedDictで解析された要求の応答。 以下は、リクエストに関するデータのみです。 たとえば、リクエストの場合
<w3s.response> <reqn></reqn> <retval></retval> <retdesc></retdesc> <operation id="n1" ts="n2"> <tranid></tranid> <pursesrc></pursesrc> <pursedest></pursedest> <amount></amount> <comiss></comiss> <opertype></opertype> <period></period> <wminvid></wminvid> <orderid></orderid> <desc></desc> <datecrt></dateupd> <dateupd></dateupd> </operation> </w3s.response>
応答して解析されます
<operation id="n1" ts="n2"> <tranid></tranid> <pursesrc></pursesrc> <pursedest></pursedest> <amount></amount> <comiss></comiss> <opertype></opertype> <period></period> <wminvid></wminvid> <orderid></orderid> <desc></desc> <datecrt></dateupd> <dateupd></dateupd> </operation>
解析はgithub.com/martinblech/xmltodictライブラリを使用して行われます
例:ウォレットによるユーザーID検索
>>> api.x8(purse="R328079907035", reqn=int(time.time()))["response"] OrderedDict([(u'wmid', OrderedDict([(u'@available', u'0'), (u'@themselfcorrstate', u'0'), (u'@newattst', u'110'), ('#text', u'407414370132')])), (u'purse', OrderedDict([(u'@merchant_active_mode', u'-1'), (u'@merchant_allow_cashier', u'-1'), ('#text', u'R328079907035')]))]) >>> 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': '<w3s.request><reqn></reqn><getoutinvoices><datestart>20100101 00:00:00</datestart><datefinish>20140501 00:00:00</datefinish><purse>R328079907035</purse></getoutinvoices></w3s.request>', 'url': 'https://w3s.wmtransfer.com/asp/XMLOutInvoicesCert.asp', 'verify': False}
エラーのため reqnパラメーターが渡されませんでした。 それを渡しましょう:
>>> 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
参照資料
私はコメントとヘルプに喜んでいます)