Python / Django:我应该使用哪个authorize.net库?

时间:2009-10-28 15:10:18

标签: python django payment-gateway authorize.net

我需要使用authorize.net集成订阅付款,可能使用CIM。要求很简单 - 每月定期付款,只有几个不同的价位。客户信用卡信息将存储在authorize.net。

周围有很多库和代码片段,我正在寻找有关最佳工作的建议。

  • Satchmo似乎比我需要的更多,看起来很复杂。
  • Django-Bursar似乎就像我需要的那样,但它被列为alpha。
  • adroll/authorize library看起来也很不错。
  • CIM XML API看起来不太糟糕,我可以直接与它们连接。

还有其他一些代码片段。

考虑到我相当简单的要求,现在最好的选择是什么?

6 个答案:

答案 0 :(得分:16)

长话短说,现有的解决方案都没有满足我的需求。他们要么没有维护,要么没有评论,没有经过测试,或者缺少保存的卡片。所以我当然建立了自己的解决方案并开源:

AuthorizeSauce:https://github.com/jeffschenck/authorizesauce

它处理基本交易(AIM API),保存的卡(CIM API)和定期付款(ARB API)。它有完整的文档,并有一个完整的测试套件。

我希望原版海报早已过去,但如果它可以帮助其他任何人避免支付处理的一些痛苦,我会高兴极了。

答案 1 :(得分:9)

修改: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]

还有更多选项,请求方式,解析响应的细微差别......我假设A中的b / c AIM代表所有授权的advanced。网络选项可用。

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

我知道你的问题是lib是最好的..好吧,根据你的具体要求实施你自己的一点点临时请求和响应可能是最容易的,而不是试图通过api来解决问题。一个api。

答案 2 :(得分:6)

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

目前支持5个以上的支付网关:

  1. Authorize.net
  2. First Data / Linkpoint
  3. 创新网关(来自直觉)
  4. PlugnPay
  5. 条纹
  6. 以下是一个例子:

    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')
    

答案 3 :(得分:3)

我最近在找不到支持Authorize.net所有功能的API后,为Python和Authorize.net编写了这个API。

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

答案 4 :(得分:1)

为了它的价值,我们最终使用了adroll authorize library。 Python和django-authorizenet看起来都很有趣,将会检查出来。

答案 5 :(得分:1)

我意识到这有点晚了,但希望它有助于其他人。

我最近遇到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或其他任何东西......试一试。我到目前为止找到的最佳套餐。