Pergunta

Eu preciso integração authorize.net para pagamentos de assinaturas, provavelmente usando CIM. Os requisitos são simples - recorrentes pagamentos mensais, com alguns pontos diferentes do preço. informações de clientes de cartão de crédito será armazenado um authorize.net.

Existem algumas bibliotecas e trechos de código ao redor, eu estou procurando recomendações a respeito de que trabalho melhor.

  • Satchmo parece mais do que eu preciso, e parece que é complexo.
  • Django-tesoureiro parece ser o que eu preciso, mas está listado como alpha.
  • AdRoll / autorizar biblioteca também parece bom bonito.
  • As APIs XML CIM não parece tão ruim, eu poderia ligar diretamente com eles.

E há muito poucos outros trechos de código.

O que é a melhor escolha neste momento, dadas as minhas exigências bastante simples?

Foi útil?

Solução 5

Por que vale a pena acabamos usando o AdRoll autorizar biblioteca. Ambos Paython e django-authorizenet olhar interessante, será verificar os para fora.

Outras dicas

Para encurtar a história, nenhuma das soluções existentes atendeu minhas necessidades. Eles eram ou não mantido, comentada, não testada, ou faltou cartões salvos. Então é claro que eu construí a minha própria solução e open-source-lo:

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

Ele lida com transações básicas (a API AIM), cartões salvos (o API CIM), e pagamentos recorrentes (ARB API). Ele está totalmente documentado e tem um pacote de teste completo.

Espero que o autor original há muito tempo já seguiu em frente, mas se ele pode ajudar alguém evitar um pouco da dor de processamento de pagamento, eu estaria muito feliz.

Edit: https://github.com/agiliq /merchant/blob/master/billing/gateways/authorize_net_gateway.py parece muito bom, não tentei ainda.

Edit: [Para o próximo projeto eu tenho que usos authorize.net, eu vou dar uma olhada em: http://github.com/zen4ever/django-authorizenet parece bastante agradável. Eu não acho que ele tem suporte para pagamentos embora recorrentes.]

No passado eu fiz pouco one-off implementações.

Para simples correio para o gateway de pagamento AIM, você pode usar algo como isto:

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, você fazer 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])

então, 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]

Há mais opções, formas de solicitar, nuances na resposta para analisar ... Presumo b / c A em AIM significa advanced que todas as opções Authorize.net estão disponíveis.

http://developer.authorize.net/guides/AIM/

Eu sei que sua pergunta é o que lib é melhor .. bem, talvez seja mais fácil apenas para implementar seu próprio pouco de pedido ad-hoc e de resposta para as suas necessidades específicas em vez de tentar tesouro através de uma API em cima uma API.

Há sempre Paython: https://github.com/abunsen/Paython

Atualmente suporta 5+ gateways de pagamento:

  1. Authorize.net
  2. First Data / Linkpoint
  3. gateway inovador (da Intuit)
  4. PlugnPay
  5. Stripe

Aqui está um exemplo:

from paython import CreditCard, AuthorizeNet

configurar um cartão de primeira:

credit_card = CreditCard(
      number = '4111111111111111',
      exp_mo = '02',
      exp_yr = '2012',
      first_name = 'John',
      last_name = 'Doe',
      cvv = '911',
      strict = False
  )

verificar se o seu válido:

if not credit_card.is_valid(): return 'houston, we have a problem' # checks card number + expiration date

Configurar dados de clientes para cobrar, nem todos os campos são obrigatórios:

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')

Autorizar contra a porta de entrada, as opções incluem saída ou teste credenciais de depuração:

  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)

Agora você pode resolver:

  api = AuthorizeNet(username='test', password='testpassword', debug=True, test=True)
  gateway_response = api.settle(amount='0.05', trans_id='2156729380')

Eu escrevi recentemente esta API para Python e Authorize.net depois de não conseguir encontrar um que apoiou todas as funcionalidades do Authorize.net.

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

Sei que isso é um pouco tarde, mas espero que ele ajuda os outros.

Recentemente, deparei com Py-Authorize que tem algum grande documentação, em comparação com os outros pacotes disponíveis. Você pode instalá-lo via:

pip install Py-Authorize

Parece instalar uma dependência (colondar) que, quando instalado através pip está desatualizado para que possa obter o mais recente (no momento da redação deste texto), fazendo o seguinte:

pip install git+git://github.com/Pylons/colander.git@1.0b1

Os docs aqui: http://vcatalano.github.io/py-authorize /index.html

Funciona muito bem na minha experiência, no entanto, para o projeto que eu estou usando-o em Eu só precisava AuthCapture e não ARB ou qualquer coisa ... experimentá-lo. Melhor pacote que eu encontrei até agora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top