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?

Était-ce utile?

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:

  1. Authorize.net
  2. First Data / Linkpoint
  3. Passerelle innovante (de intuit)
  4. PlugnPay
  5. 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.

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

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top