Python/Django: какую библиотеку authorize.net я должен использовать?

Мне нужна авторизационная интеграция для подписных платежей, вероятно, используя CIM. Требования просты - повторяющиеся ежемесячные платежи с несколькими различными ценовыми точками. Информация о кредитной карте клиента будет храниться в authorize.net.

Существует довольно много библиотек и фрагментов кода, я ищу рекомендации относительно наилучшей работы.

  • Satchmo кажется больше, чем мне нужно, и похоже, что он сложный.
  • Django-Bursar похоже, что мне нужно, но он указан как альфа.
  • библиотека adroll/authorize также выглядит неплохо.
  • XML-интерфейсы CIM XML выглядят не так уж плохо, я могу напрямую связаться с ними.

И есть еще несколько фрагментов кода.

Какой лучший выбор сейчас, учитывая мои довольно простые требования?

Ответы

Ответ 2

Короче говоря, ни одно из существующих решений не отвечало моим потребностям. Они были либо без изменений, без ранений, непроверенных, либо отсутствовали сохраненные карты. Поэтому, конечно, я построил свое собственное решение и открыл его:

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

Он обрабатывает основные транзакции (API AIM), сохраненные карты (CIM API) и повторяющиеся платежи (API ARB). Он полностью документирован и имеет полный набор тестов.

Я ожидаю, что оригинальный плакат уже давно перешел, но если он может помочь кому-то еще избежать некоторой части обработки платежей, я был бы вне себя от радости.

Ответ 3

Изменить: 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 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]

Есть больше опций, способов запроса, нюансов в ответе на синтаксический анализ... Предполагаю, что b/c A в AIM означает advanced, что доступны все параметры authorize.net.

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

Я знаю, что ваш вопрос в том, что лучше. Лучше всего просто реализовать свой собственный небольшой запрос и ответ на ваши конкретные требования, а не пытаться выполнить api поверх api.

Ответ 4

Всегда есть Paython: https://github.com/abunsen/Paython

В настоящее время поддерживается 5 + платежных шлюзов:

  • Authorize.net
  • Первые данные /Linkpoint
  • Инновационный шлюз (от интуиции)
  • 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='[email protected]', 
      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')

Ответ 5

Недавно я написал этот API для Python и Authorize.net после того, как не смог найти тот, который поддерживал все функции Authorize.net.

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

Ответ 6

Я понимаю, что это немного поздно, но, надеюсь, это помогает другим.

Недавно я столкнулся с Py-Authorize, который имеет отличную документацию по сравнению с другими доступными пакетами. Вы можете установить его через:

pip install Py-Authorize

Кажется, что установлена ​​зависимость (colondar), которая при установке через pip устарела, поэтому вы можете получить последнюю (на момент написания этой статьи), выполнив следующие действия:

pip install git+git://github.com/Pylons/[email protected]

Документы находятся здесь: http://vcatalano.github.io/py-authorize/index.html

Отлично работает в моем опыте, однако для проекта, который я использую, мне нужен только AuthCapture, а не ARB или что-то еще... попробуйте. Лучший пакет, который я нашел до сих пор.