簡體   English   中英

Python / Django:我應該使用哪個authorize.net庫?

[英]Python/Django: Which authorize.net library should I use?

我需要authorize.net集成訂閱付款,可能使用CIM。 要求很簡單 - 每月定期付款,只有幾個不同的價位。 客戶信用卡信息將存儲在authorize.net中。

有很多庫和代碼片段,我正在尋找關於哪種工作最佳的建議。

  • Satchmo似乎比我需要的更多,看起來很復雜。
  • Django-Bursar看起來像我需要的,但它被列為alpha。
  • adroll / authorize庫看起來也不錯。
  • CIM XML API看起來不太糟糕,我可以直接與它們連接。

還有很多其他代碼片段。

考慮到我相當簡單的要求,現在最好的選擇是什么?

長話短說,現有的解決方案都沒有滿足我的需求。 他們要么沒有維護,要么沒有評論,沒有經過測試,或者缺少保存的卡片。 所以我當然建立了自己的解決方案並開源:

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代表所有authorize.net選項都可用的advanced

http://developer.authorize.net/guides/AIM/

我知道你的問題是lib是最好的..好吧,最簡單的方法就是為你的特定需求實現你自己的一點點臨時請求和響應,而不是試圖在api之上通過api。

總是有Paython: https//github.com/abunsen/Paython

目前支持5個以上的支付網關:

  1. Authorize.net
  2. 第一個數據/鏈接點
  3. 創新網關(來自直覺)
  4. PlugnPay
  5. 條紋

這是一個例子:

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之后為Python和Authorize.net編寫了這個API。

https://github.com/vcatalano/py-authorize

我意識到這有點晚了,但希望它有助於其他人。

我最近遇到了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或任何東西......試一試。 到目前為止我發現的最佳套餐。

為了它的價值,我們最終使用了adroll授權庫 Paython和django-authorizenet看起來都很有趣,會檢查出來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM