Python / Django:どのauthorize.netライブラリを使用すべきですか?
-
08-07-2019 - |
質問
おそらくCIMを使用して、サブスクリプションの支払いのためにauthorize.net統合が必要です。要件は簡単です-いくつかの異なる価格で、毎月の定期的な支払い。顧客のクレジットカード情報はauthorize.netに保存されます。
かなりの数のライブラリとコードスニペットがありますが、どれが最適かについての推奨事項を探しています。
- Satchmoは私が必要とする以上のもので、複雑に見えます。
- Django-Bursar は必要なもののようですが、アルファ版としてリストされています。
- adroll / authorizeライブラリも非常に優れています。
- CIM XML APIは見た目が悪くなく、直接接続できます。
そして、他にもかなりの数のコードスニペットがあります。
かなり単純な要件を考えると、現時点で最良の選択は何ですか?
解決 5
価値があるものとして、承認ライブラリを登録しました。 Paythonとdjango-authorizenetの両方がおもしろそうで、それらをチェックします。
他のヒント
簡単に言えば、既存のソリューションはどれも私のニーズを満たしていませんでした。それらは、保守されていない、コメントされていない、テストされていない、または保存されたカードが不足している。だからもちろん、私は独自のソリューションを構築し、それをオープンソース化しました:
AuthorizeSauce: https://github.com/jeffschenck/authorizesauce
基本的なトランザクション(AIM API)、保存されたカード(CIM API)、定期的な支払い(ARB API)を処理します。完全に文書化されており、完全なテストスイートがあります。
元のポスターはずっと前から続いていると思いますが、もし誰かが支払い処理の苦痛のいくつかを避けるのを助けることができれば、私は大喜びでしょう。
編集: https://github.com/agiliq /merchant/blob/master/billing/gateways/authorize_net_gateway.py 見た目はとてもいいので、まだ試していません。
編集:[authorize.netを使用する次のプロジェクトでは、 http://github.com/zen4ever/django-authorizenet とてもいい感じです。ただし、定期的な支払いをサポートしているとは思わない。]
過去には、一度限りの実装を行ってきました。
AIM支払いゲートウェイへの簡単な投稿には、次のようなものを使用できます。
URL = 'https://test.authorize.net/gateway/transact.dll'
API = {'x_login':'XXX',
'x_tran_key':'XXX', 'x_method':'CC', 'x_type':'AUTH_ONLY',
'x_delim_data':'TRUE', 'x_duplicate_window':'10', 'x_delim_char':'|',
'x_relay_response':'FALSE', 'x_version':'3.1'}
def call_auth(amount, card_num, exp_date, card_code, zip_code, request_ip=None):
'''Call authorize.net and get a result dict back'''
import urllib2, urllib
payment_post = API
payment_post['x_amount'] = amount
payment_post['x_card_num'] = card_num
payment_post['x_exp_date'] = exp_date
payment_post['x_card_code'] = card_code
payment_post['x_zip'] = zip_code
payment_request = urllib2.Request(URL, urllib.urlencode(payment_post))
r = urllib2.urlopen(payment_request).read()
return r
def call_capture(trans_id): # r.split('|')[6] we get back from the first call, trans_id
capture_post = API
capture_post['x_type'] = 'PRIOR_AUTH_CAPTURE'
capture_post['x_trans_id'] = trans_id
capture_request = urllib2.Request(URL, urllib.urlencode(capture_post))
r = urllib2.urlopen(capture_request).read()
return r
認証するには、次のようにします:
r = authorize.call_auth(
unicode(decimal_total),
request.POST.get('card_num'),
request.POST.get('exp_date'),
request.POST.get('card_code'),
request.POST.get('zip_code') if request.POST.get('zip_code') else address.zip_code,
)
if r.split('|')[0] == '1':
# it's good, we have authorized the card...
else:
error = "%s Please try again." % (r.split('|')[3])
その後、キャプチャできます:
r = authorize.call_capture(trans_id) # r.split('|')[6] in first response..
if r.split('|')[0] == '1':
# we captured it.
else:
error = r.split('|')[3]
他のオプション、リクエストする方法、解析する応答のニュアンスがあります... AIM
のb / c A
は advanced
authorize.netのすべてのオプションが利用可能であること。
http://developer.authorize.net/guides/AIM/
私はあなたの質問がlibが最適であることを知っています..まあ、それはあなたの特定の要件のためにあなた自身の少しのアドホックなリクエストとレスポンスを実装するのが最も簡単かもしれません。 API。
常にPaythonがあります: https://github.com/abunsen/Paython
現在、5つ以上の支払いゲートウェイをサポートしています:
- Authorize.net
- 最初のデータ/リンクポイント
- 革新的なゲートウェイ(intuitから)
- PlugnPay
- ストライプ
例を次に示します。
from paython import CreditCard, AuthorizeNet
最初にカードを設定します:
credit_card = CreditCard(
number = '4111111111111111',
exp_mo = '02',
exp_yr = '2012',
first_name = 'John',
last_name = 'Doe',
cvv = '911',
strict = False
)
有効かどうかを確認します:
if not credit_card.is_valid(): return 'houston, we have a problem' # checks card number + expiration date
課金する顧客データを設定します。すべてのフィールドが必須というわけではありません:
customer_data = dict(
address='123 Main St',
address2='Apt 1',
city='Pleasantville',
state='IA',
zipcode='54321',
country='US',
phone='654-369-9589',
email='john@localwoodshop.com',
ip='127.0.0.1')
ゲートウェイに対して認証、オプションにはデバッグ出力またはテスト認証情報が含まれます:
api = AuthorizeNet(username='test', password='testpassword', debug=True, test=True)
gateway_response = api.auth(amount='0.05', credit_card=credit_card, billing_info=customer_data, shipping_info=None)
これで解決できます:
api = AuthorizeNet(username='test', password='testpassword', debug=True, test=True)
gateway_response = api.settle(amount='0.05', trans_id='2156729380')
最近、Authorize.netのすべての機能をサポートするAPIを見つけられなかったため、このAPIをPythonおよびAuthorize.net向けに作成しました。
これは少し遅いと思いますが、うまくいけば他の人にも役立つでしょう。
最近、利用可能な他のパッケージと比較して、いくつかの優れたドキュメントがある Py-Authorize
に出会いました。以下からインストールできます:
pip install Py-Authorize
依存関係( colondar
)をインストールするようです。これは pip
を介してインストールすると古いため、次:
pip install git+git://github.com/Pylons/colander.git@1.0b1
ドキュメントはこちら: http://vcatalano.github.io/py-authorize /index.html
私の経験ではうまく機能しますが、使用しているプロジェクトではAuthCaptureのみが必要であり、ARBなどは必要ありません...試してみてください。これまでに見つけた最高のパッケージ。