python django payment-gateway authorize.net

Python/Django: ¿Qué biblioteca authorize.net debo usar?



payment-gateway (6)

Necesito la integración de authorize.net para los 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 será almacenada 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 ser lo que necesito, pero aparece como alfa.
  • La biblioteca adroll / authorize también se ve bastante bien.
  • Las API XML de CIM no se ven tan mal, podría conectarme directamente con ellas.

Y hay bastantes otros fragmentos de código.

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


Edición: https://github.com/agiliq/merchant/blob/master/billing/gateways/authorize_net_gateway.py ve muy bien, aún no lo he probado.

Edit: [Para el próximo proyecto que tengo que usa 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 he hecho pequeñas implementaciones únicas.

Para una publicación simple en la pasarela de pago 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, haces 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 a analizar ... 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 qué lib es la mejor ... bueno, podría ser más fácil simplemente implementar su propio pedacito de solicitud y respuesta ad-hoc para sus requisitos específicos en lugar de tratar de encontrar una api sobre una api.


En pocas palabras, ninguna de las soluciones existentes satisfacía mis necesidades. Eran no guardadas, sin comentarios, sin probar o carecían de tarjetas guardadas. Así que, por supuesto, construí mi propia solución y la abrí:

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

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

Espero que el cartel original haya pasado hace mucho tiempo, pero si puedo ayudar a alguien más a evitar el dolor del procesamiento de pagos, me alegraría mucho.


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

Hace poco me encontré con Py-Authorize que tiene una gran documentación, en comparación con los otros paquetes disponibles. Puedes instalarlo a través de:

pip install Py-Authorize

Parece que se instala una dependencia ( colondar ) que, cuando se instala a través de pip está desactualizada, por lo que puede obtener la última (en el momento de escribir este documento) haciendo lo siguiente:

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

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ébelo. El mejor paquete que he encontrado hasta ahora.




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

Actualmente soporta 5+ pasarelas de pago:

  1. Authorize.net
  2. Primeros datos / punto de enlace
  3. Gateway innovador (desde la intuición)
  4. PlugnPay
  5. Raya

Aquí hay un ejemplo:

from paython import CreditCard, AuthorizeNet

configurar 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 a 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=''[email protected]'', ip=''127.0.0.1'')

autorizar contra la puerta de enlace, 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'')