Python / Django: Welche authorize.net Bibliothek soll ich verwenden?
-
08-07-2019 - |
Frage
Ich brauche authorize.net Integration für Abonnementzahlungen, wahrscheinlich CIM verwenden. Die Anforderungen sind einfach - wiederkehrende monatliche Zahlungen, mit ein paar verschiedenen Preisklassen. Kundenkreditkartendaten werden eine authorize.net gespeichert werden.
Es gibt durchaus ein paar Bibliotheken und Code-Schnipsel um, ich bin auf der Suche nach Empfehlungen, welche am besten funktionieren.
- scheint Satchmo mehr als ich brauche, und es sieht aus wie es komplex ist.
- Django-Bursar scheint wie das, was ich brauche, aber es ist als alpha aufgeführt.
- Die AdRoll / Bibliothek autorisieren auch ziemlich gut aussieht.
- Die CIM XML APIs sieht nicht allzu schlecht, ich direkt mit ihnen verbinden kann.
Und es gibt durchaus ein paar anderen Code-Schnipsel.
Was ist die beste Wahl, gerade jetzt, meine ziemlich einfachen Anforderungen gegeben?
Lösung 5
Für was es wert, den wir am Ende mit der AdRoll Bibliothek genehmigen. Sowohl Paython und django-AuthorizeNet interessant aussehen, werden diejenigen, werden überprüft.
Andere Tipps
Lange Rede kurzer Sinn, keine der bestehenden Lösungen erfüllt meine Bedürfnisse. Sie waren entweder nicht betreut, unkommentiert, ungetestet, oder fehlte gespeichert Karten. So natürlich baute ich meine eigene Lösung und Open-Source-it:
AuthorizeSauce: https://github.com/jeffschenck/authorizesauce
Es behandelt grundlegende Transaktionen (die AIM API), gespeichert Karten (CIM API), und wiederkehrende Zahlungen (die ARB API). Es ist vollständig dokumentiert und verfügt über eine vollständige Testsuite.
Ich erwarte, dass das ursprüngliche Plakat längst weitergezogen, aber wenn es jemand helfen kann sonst etwas von dem Schmerz der Zahlungsabwicklung zu vermeiden, würde ich überglücklich sein.
Edit: https://github.com/agiliq /merchant/blob/master/billing/gateways/authorize_net_gateway.py sieht ziemlich schön, es noch nicht ausprobiert haben.
Edit: [Für das nächste Projekt, das ich habe, dass authorize.net verwendet, werde ich einen Blick nehmen auf: http://github.com/zen4ever/django-authorizenet Es ziemlich schön aussieht. Ich glaube nicht, dass es Unterstützung hat jedoch Zahlungen für wiederkehrende.]
In der Vergangenheit habe ich wenig einmalige Implementierungen gemacht.
Für einfache Post an die AIM Payment-Gateway, Sie so etwas wie diese verwenden können:
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
So autorisieren, Sie tun so etwas wie:
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])
dann können wir erfassen:
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]
Es gibt mehr Möglichkeiten, Wege zu verlangen, Nuancen in der Antwort zu analysieren ... Ich gehe davon aus b / c A
in AIM
steht für advanced
die mit allen von authorize.net Optionen zur Verfügung stehen.
http://developer.authorize.net/guides/AIM/
Ich weiß, dass Ihre Frage ist, was lib am besten ist .. gut, könnte es am einfachsten, nur Ihr eigenes kleines bisschen Ad-hoc-Anfrage und Antwort für Ihre spezifischen Anforderungen zu implementieren, anstatt zu versuchen, durch eine api oben auf Grube ein api.
Es gibt immer Paython: https://github.com/abunsen/Paython
Derzeit unterstützt 5+ Zahlungs-Gateways:
- Authorize.net
- First Data / Linkpoint
- Innovative-Gateway (von Intuit)
- PlugnPay
- Streifen
Hier ist ein Beispiel:
from paython import CreditCard, AuthorizeNet
Eine Karte einrichten zuerst:
credit_card = CreditCard(
number = '4111111111111111',
exp_mo = '02',
exp_yr = '2012',
first_name = 'John',
last_name = 'Doe',
cvv = '911',
strict = False
)
überprüfen, ob seine Gültigkeit:
if not credit_card.is_valid(): return 'houston, we have a problem' # checks card number + expiration date
Kundendaten einrichten zu berechnen, sind nicht alle Felder sind erforderlich:
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')
autorisieren gegen Gateway, Optionen umfassen Debug-Ausgabe oder Testanmeldeinformationen:
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)
Jetzt können Sie begleichen:
api = AuthorizeNet(username='test', password='testpassword', debug=True, test=True)
gateway_response = api.settle(amount='0.05', trans_id='2156729380')
Ich schrieb vor kurzem diese API für Python und Authorize.net nach dem Fehlschlagen zu finden, die alle von Authorize.net Funktionalität unterstützt.
Ich weiß, das ist ein bisschen spät, aber hoffentlich hilft es anderen.
Ich kam vor kurzem in Py-Authorize
, das einige große Dokumentation hat, im Vergleich zu den anderen Paketen zur Verfügung. Sie können es über installieren:
pip install Py-Authorize
Es scheint eine Abhängigkeit (colondar
) zu installieren, die, wenn sie über pip
installiert ist veraltet, so dass Sie die neueste (zum Zeitpunkt des Schreibens dieses Artikels) bekommen kann durch die folgenden Aktionen ausführen:
pip install git+git://github.com/Pylons/colander.git@1.0b1
Die Dokumente sind hier: http://vcatalano.github.io/py-authorize /index.html
Arbeiten groß in meiner Erfahrung, aber für das Projekt, das ich es auf Ich verwende nur benötigt AuthCapture und nicht ARB oder etwas ... es zu versuchen. Bestes Paket, das ich bisher gefunden habe.