Python / Django: quale libreria autorize.net dovrei usare?
-
08-07-2019 - |
Domanda
Ho bisogno dell'integrazione di autorize.net per i pagamenti di abbonamento, probabilmente usando CIM. I requisiti sono semplici: pagamenti mensili ricorrenti, con alcuni punti di prezzo diversi. Le informazioni sulla carta di credito del cliente verranno memorizzate in authorize.net.
Ci sono alcune librerie e frammenti di codice in giro, sto cercando consigli su quale funziona meglio.
- Satchmo sembra più del necessario e sembra complesso.
- Django-Bursar sembra ciò di cui ho bisogno, ma è elencato come alfa.
- Anche la libreria di iscrizione / autorizzazione ha un bell'aspetto.
- Le API XML CIM non sembrano troppo male, potrei collegarmi direttamente con loro.
E ci sono molti altri snippet di codice.
Qual è la scelta migliore in questo momento, dati i miei requisiti abbastanza semplici?
Soluzione 5
Per quello che vale, abbiamo finito per usare la iscriviti alla libreria di autorizzazione . Sia Paython che django-authorizenet sembrano interessanti, controlleranno quelli.
Altri suggerimenti
Per farla breve, nessuna delle soluzioni esistenti ha soddisfatto le mie esigenze. Erano carte non mantenute, non commentate, non testate o prive di carte salvate. Quindi, naturalmente, ho creato la mia soluzione e l'ho approvata pubblicamente:
AuthorizeSauce: https://github.com/jeffschenck/authorizesauce
Gestisce transazioni di base (API AIM), carte salvate (API CIM) e pagamenti ricorrenti (API ARB). È completamente documentato e ha una suite di test completa.
Mi aspetto che il poster originale sia passato da tempo, ma se può aiutare qualcun altro a evitare il dolore dell'elaborazione dei pagamenti, sarei felice.
Modifica: https://github.com/agiliq /merchant/blob/master/billing/gateways/authorize_net_gateway.py sembra piuttosto carino, non l'ho ancora provato.
Modifica: [Per il prossimo progetto che utilizzi authorize.net, esaminerò da vicino: http://github.com/zen4ever/django-authorizenet Sembra piuttosto carino. Tuttavia, non credo che abbia il supporto per pagamenti ricorrenti.]
In passato ho fatto piccole implementazioni una tantum.
Per un semplice post sul gateway di pagamento AIM, puoi usare qualcosa del genere:
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
Per autorizzare, fai qualcosa del tipo:
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])
quindi, possiamo catturare:
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]
Ci sono più opzioni, modi per richiedere, sfumature nella risposta all'analisi ... Presumo che b / c A
in AIM
sta per advanced
che sono disponibili tutte le opzioni di authorize.net.
http://developer.authorize.net/guides/AIM/
So che la tua domanda è quale sia la migliore lib. .. beh, potrebbe essere più semplice implementare il tuo piccolo po 'di richiesta e risposta ad hoc per i tuoi requisiti specifici piuttosto che cercare di superare un API in cima a un api.
C'è sempre Paython: https://github.com/abunsen/Paython
Attualmente supporta oltre 5 gateway di pagamento:
- Authorize.net
- First Data / Linkpoint
- Gateway innovativo (da intuitivo)
- PlugnPay
- banda
Ecco un esempio:
from paython import CreditCard, AuthorizeNet
imposta prima una carta:
credit_card = CreditCard(
number = '4111111111111111',
exp_mo = '02',
exp_yr = '2012',
first_name = 'John',
last_name = 'Doe',
cvv = '911',
strict = False
)
controlla se è valido:
if not credit_card.is_valid(): return 'houston, we have a problem' # checks card number + expiration date
Imposta i dati dei clienti per l'addebito, non tutti i campi sono obbligatori:
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')
autorizza contro gateway, le opzioni includono l'output di debug o le credenziali di test:
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)
ora puoi risolvere:
api = AuthorizeNet(username='test', password='testpassword', debug=True, test=True)
gateway_response = api.settle(amount='0.05', trans_id='2156729380')
Di recente ho scritto questa API per Python e Authorize.net dopo aver fallito nel trovarne una che supportava tutte le funzionalità di Authorize.net.
Mi rendo conto che è un po 'tardi, ma spero che aiuti gli altri.
Di recente mi sono imbattuto in Py-Authorize
che ha un'ottima documentazione, rispetto agli altri pacchetti disponibili. Puoi installarlo tramite:
pip install Py-Authorize
Sembra installare una dipendenza ( colondar
) che una volta installato tramite pip
non è aggiornato in modo da poter ottenere l'ultimo (al momento della stesura di questo documento) facendo il seguenti:
pip install git+git://github.com/Pylons/colander.git@1.0b1
I documenti sono qui: http://vcatalano.github.io/py-authorize /index.html
Funziona alla grande con la mia esperienza, tuttavia per il progetto su cui lo sto usando ho solo bisogno di AuthCapture e non di ARB o altro ... provalo. Il miglior pacchetto che ho trovato finora.