Pregunta

Necesito la integración de authorize.net para pagos de suscripción, probablemente usando CIM. Los requisitos son simples: pagos mensuales recurrentes, con algunos puntos de precio diferentes. La información de la tarjeta de crédito del cliente se almacenará en authorize.net.

Hay bastantes bibliotecas y fragmentos de código, estoy buscando recomendaciones sobre cuál funciona mejor.

  • Satchmo parece más de lo que necesito, y parece que es complejo.
  • Django-Bursar parece lo que necesito, pero está listado como alfa.
  • La adroll / authorize library también se ve bastante bien.
  • Las API XML de CIM no se ven tan mal, podría conectarme directamente con ellas.

Y hay muchos otros fragmentos de código.

¿Cuál es la mejor opción en este momento, dados mis requisitos bastante simples?

¿Fue útil?

Solución 5

Por lo que vale, terminamos usando la adroll autorizar biblioteca . Tanto Paython como django-authorizenet parecen interesantes, los verificaremos.

Otros consejos

En pocas palabras, ninguna de las soluciones existentes satisfizo mis necesidades. Eran cartas sin mantenimiento, sin comentar, sin probar o sin tarjetas guardadas. Así que, por supuesto, construí mi propia solución y la de código abierto:

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

Maneja transacciones básicas (API AIM), tarjetas guardadas (API CIM) y pagos recurrentes (API ARB). Está completamente documentado y tiene un conjunto de pruebas completo.

Espero que el póster original se haya movido desde hace mucho tiempo, pero si puede ayudar a alguien más a evitar parte del dolor del procesamiento de pagos, estaría encantado.

Editar: https://github.com/agiliq /merchant/blob/master/billing/gateways/authorize_net_gateway.py se ve muy bien, no lo he probado todavía.

Editar: [Para el próximo proyecto que tengo que utiliza authorize.net, voy a echar un vistazo de cerca a: http://github.com/zen4ever/django-authorizenet Se ve muy bien. Sin embargo, no creo que tenga soporte para pagos recurrentes.]

En el pasado hice pequeñas implementaciones únicas.

Para una publicación simple en la pasarela de pago de AIM, puede usar algo como esto:

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

Para autorizar, debe hacer algo como:

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

entonces, podemos capturar:

        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]

Hay más opciones, formas de solicitar, matices en la respuesta al análisis ... Supongo que b / c A en AIM significa advanced que todas las opciones de authorize.net están disponibles.

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

Sé que su pregunta es cuál es la mejor lib ... bueno, podría ser más fácil implementar su propia pequeña solicitud y respuesta ad-hoc para sus requisitos específicos en lugar de tratar de buscar una API en la parte superior de una api.

Siempre hay Paython: https://github.com/abunsen/Paython

Actualmente admite más de 5 pasarelas de pago:

  1. Authorize.net
  2. Primer dato / punto de enlace
  3. Pasarela innovadora (por intuición)
  4. PlugnPay
  5. Stripe

Aquí hay un ejemplo:

from paython import CreditCard, AuthorizeNet

configure una tarjeta primero:

credit_card = CreditCard(
      number = '4111111111111111',
      exp_mo = '02',
      exp_yr = '2012',
      first_name = 'John',
      last_name = 'Doe',
      cvv = '911',
      strict = False
  )

compruebe si es válido:

if not credit_card.is_valid(): return 'houston, we have a problem' # checks card number + expiration date

Configure los datos del cliente para cobrar, no todos los campos son obligatorios:

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

autorizar contra gateway, las opciones incluyen salida de depuración o credenciales de prueba:

  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)

ahora puedes resolver:

  api = AuthorizeNet(username='test', password='testpassword', debug=True, test=True)
  gateway_response = api.settle(amount='0.05', trans_id='2156729380')

Recientemente escribí esta API para Python y Authorize.net después de no encontrar una que admitiera todas las funciones de Authorize.net.

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

Me doy cuenta de que esto es un poco tarde, pero espero que ayude a otros.

Recientemente me encontré con Py-Authorize que tiene una excelente documentación, en comparación con los otros paquetes disponibles. Puede instalarlo a través de:

pip install Py-Authorize

Parece instalar una dependencia ( colondar ) que cuando se instala a través de pip está desactualizada para que pueda obtener la última versión (al momento de escribir esto) haciendo siguiente:

pip install git+git://github.com/Pylons/colander.git@1.0b1

Los documentos están aquí: http://vcatalano.github.io/py-authorize /index.html

Funciona muy bien en mi experiencia, sin embargo, para el proyecto en el que lo estoy usando solo necesitaba AuthCapture y no ARB ni nada ... pruébalo. El mejor paquete que he encontrado hasta ahora.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top