Питон/Джанго:Какую библиотеку авторизации.net мне следует использовать?

StackOverflow https://stackoverflow.com/questions/1637902

Вопрос

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

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

  • Сачмо кажется большим, чем мне нужно, и похоже, что он сложный.
  • Джанго-Бурсар вроде то, что мне нужно, но оно указано как альфа.
  • В библиотека adroll/авторизации тоже выглядит неплохо.
  • XML API CIM выглядят не так уж и плохо, я мог бы подключиться к ним напрямую.

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

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

Это было полезно?

Решение 5

Как бы то ни было, мы в конечном итоге использовали библиотека авторизации Adroll.И Paython, и django-authorizenet выглядят интересно, буду их проверять.

Другие советы

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

АвторизоватьСоус: https://github.com/jeffschenck/authorizesauce

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

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

Редактировать: https://github.com/agiliq/merchant/blob/master/billing/gateways/authorize_net_gateway.pyвыглядит очень красиво, еще не пробовал.

Редактировать:[Для следующего проекта, который использует авторизацию.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 в AIM означает advanced что все параметры авторизации.net доступны.

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

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

Всегда есть Пэйтон: 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')

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

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 или что-то в этом роде... попробуйте.Лучший пакет, который я нашел на данный момент.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top