Python / Django: Quelle bibliothèque authorize.net dois-je utiliser?
-
08-07-2019 - |
Question
J'ai besoin de l'intégration authorize.net pour les paiements d'abonnement, probablement à l'aide de CIM. Les conditions sont simples: paiements mensuels récurrents, avec quelques prix différents. Les informations de carte de crédit du client seront stockées sur authorize.net.
Il y a pas mal de bibliothèques et d'extraits de code, je cherche des recommandations sur celles qui fonctionnent le mieux.
- Satchmo semble être plus que nécessaire et complexe.
- Django-Bursar semble être ce dont j'ai besoin, mais sa liste est alpha.
- La bibliothèque adroll / authorize est également très jolie.
- Les API XML CIM ne sont pas très mauvaises, je pouvais me connecter directement avec elles.
Et il existe de nombreux autres extraits de code.
Quel est le meilleur choix pour le moment, compte tenu de mes exigences assez simples?
La solution 5
Pour ce que cela vaut la peine, nous avons fini par utiliser la adroll autorize library . Paython et django-authorizenet ont tous deux un aspect intéressant. Ils vérifieront ces informations.
Autres conseils
Bref, aucune des solutions existantes ne répondait à mes besoins. Ils étaient soit non maintenus, non commentés, non testés ou manquaient de cartes sauvegardées. Alors bien sûr, j'ai construit ma propre solution et je l'ai ouverte:
AuthorizeSauce: https://github.com/jeffschenck/authorizesauce
Il gère les transactions de base (l’API AIM), les cartes enregistrées (l’API CIM) et les paiements récurrents (l’API ARB). Il est entièrement documenté et dispose d'une suite de tests complète.
Je pense que l'affiche originale a évolué depuis longtemps, mais si elle pouvait aider quelqu'un d'autre à éviter certaines des difficultés liées au traitement des paiements, je serais ravi.
Modifier: https://github.com/agiliq /merchant/blob/master/billing/gateways/authorize_net_gateway.py semble assez sympa, je ne l'ai pas encore essayé.
Edit: [Pour mon prochain projet utilisant authorize.net, je vais regarder de près: http://github.com/zen4ever/django-authorizenet C'est très joli. Je ne pense cependant pas que cela prenne en charge les paiements récurrents.]
Dans le passé, j'ai réalisé de petites implémentations ponctuelles.
Pour une publication simple sur la passerelle de paiement AIM, vous pouvez utiliser quelque chose comme ceci:
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
Pour autoriser, vous faites quelque chose comme:
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])
alors, nous pouvons capturer:
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]
Il y a plus d'options, de manières de demander, des nuances dans la réponse à l'analyse ... Je suppose que b / c A
dans AIM
signifie avancé
que toutes les options authorize.net sont disponibles.
http://developer.authorize.net/guides/AIM/
Je sais que votre question est de savoir quelle bibliothèque est la meilleure .. eh bien, il serait peut-être plus simple d'implémenter votre propre requête et réponse ad-hoc pour vos besoins spécifiques plutôt que d'essayer de passer par une API au-dessus de une api.
Il y a toujours Paython: https://github.com/abunsen/Paython
Prend actuellement en charge plus de 5 passerelles de paiement:
- Authorize.net
- First Data / Linkpoint
- Passerelle innovante (de intuit)
- PlugnPay
- rayure
Voici un exemple:
from paython import CreditCard, AuthorizeNet
commencez par configurer une carte:
credit_card = CreditCard(
number = '4111111111111111',
exp_mo = '02',
exp_yr = '2012',
first_name = 'John',
last_name = 'Doe',
cvv = '911',
strict = False
)
vérifie si sa validité est:
if not credit_card.is_valid(): return 'houston, we have a problem' # checks card number + expiration date
Configurez les données client pour facturer, tous les champs ne sont pas obligatoires:
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')
autoriser contre passerelle, les options incluent la sortie de débogage ou les informations d'identification de 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)
maintenant vous pouvez régler:
api = AuthorizeNet(username='test', password='testpassword', debug=True, test=True)
gateway_response = api.settle(amount='0.05', trans_id='2156729380')
J'ai récemment écrit cette API pour Python et Authorize.net après ne pas en trouver une qui prenne en charge toutes les fonctionnalités d'Autorize.net.
Je réalise que c'est un peu tard, mais j'espère que cela aidera les autres.
Je suis récemment tombé sur Py-Authorize
, qui contient une excellente documentation par rapport aux autres packages disponibles. Vous pouvez l'installer via:
pip install Py-Authorize
Il semble installer une dépendance ( colondar
) qui, une fois installée via pip
, est obsolète afin que vous puissiez obtenir la dernière (au moment de l'écriture) en procédant comme suit: suivant:
pip install git+git://github.com/Pylons/colander.git@1.0b1
Les documents sont ici: http://vcatalano.github.io/py-authorize /index.html
Fonctionne bien dans mon expérience, mais pour le projet sur lequel je l’utilise, je n’avais besoin que d’AutCCapture et non d’ARB ou de quoi que ce soit… essayez-le. Meilleur forfait que j'ai trouvé jusqu'à présent.