Git Product home page Git Product logo

pagarme-python's Introduction

pagarme-python

Build status Coverage

Pagar.me Python library

Installing

This lib can be found on pip. To install it, use:

$ pip install pagarme-python

Documentation

Support

If you have any problem or suggestion please open an issue here.

License

Check here.

pagarme-python's People

Contributors

alessandra1408 avatar allisson avatar aroncds avatar chrisenytc avatar evaporei avatar heyvito avatar igoryouiti avatar iurisilvio avatar joaobarbosa avatar jonatasmaxi avatar leonampd avatar lerrua avatar matheus-maciel avatar mbodock avatar murilohns avatar nossila avatar reginaldojunior avatar rodrigopgsup avatar rserro avatar victormessina avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pagarme-python's Issues

Migração para o protocolo TLS 1.2

Recebi um e-mail sobre a "Migração para o protocolo TLS 1.2" e gostaria de saber se a biblioteca terá suporte para esse protocolo?

Grato.

Trocar de pip para Pipenv

Atualmente desenvolvedores python estão utilizando o PIpenv como gerenciador de pacotes. Eu acho que seria uma boa ideia pelo versionamento que ele trás ao projeto, implementar está feature.

Build falhando

Olá pessoal,

Estou querendo usar a biblioteca de vocês mas, pelo code climate aparentemente o build está falhando.

Possível bug - NameError: name 'sys' is not defined

Durante a execução do pagarme.transaction.create(data) é retornado no terminal algo como:

Traceback (most recent call last):
File "pg.py", line 81, in
trx = pagarme.transaction.create(data)
File "/home/haw/.local/lib/python3.7/site-packages/pagarme/transaction.py", line 14, in create
return handler_request.post(transaction_routes.BASE_URL, dictionary)
File "/home/haw/.local/lib/python3.7/site-packages/pagarme/resources/handler_request.py", line 46, in post
pagarme_response = requests_retry_session().post(end_point, json=data)
File "/home/haw/.local/lib/python3.7/site-packages/pagarme/resources/requests_retry.py", line 21, in requests_retry_session
session.headers.update(headers())
File "/home/haw/.local/lib/python3.7/site-packages/pagarme/resources/requests_retry.py", line 9, in headers
'User-Agent': 'pagarme-python/{} python/{}'.format(sdk.VERSION, sys.version.split(' ',1)[0]),
NameError: name 'sys' is not defined

Resolvi localmente em meu ambiente virtual apenas adicionando: import sys em:
~/.virtualenvs/brioche_food/lib/python3.7/site-packages/pagarme/resources/requests_retry.py

versão request 2.18.2

O arquivo requirements possui a seguinte dependência:

requests==2.18.2

Sugiro alterar para o que consta abaixo para não ter que obter uma versão antiga de requests sendo que é uma lib muito usada e a versão atual é maior que essa acima.

requests>=2.18.2

Ao instalar consta o seguinte erro:
ERROR: pagarme-python 3.3.0 has requirement requests==2.18.2, but you'll have requests X.XX.X (versão que possuo) which is incompatible.

Can't create card hash

Do I need the JS library to create a cardhash?
I wanted to create an entirely backend app.

If there's no way to do that using this library, is there some other way?
I went over the js script and noticed is merely a post to a pagarme endpoint with some encrypted parameters.
I just wanted to know if there was other ways to accomplish this.

Erros na lib

pequeno erro nos testes. Falta o módulo Mock no requirements e existe um ponto a mais no parâmetro de importação do pagarme_test.py na linha 13.
Caso alguém mais iniciante tente utilizar o modelo irá ter dificuldades para começar a implementar.

New authentication schema

It's not in the docs but using api_key and encryption_key fields in the body is deprecated.

The correct way is to send the API Key with HTTP basic authentication as the username. Also, the password must be x.

Python 3.5 support

Python 3.5 has just been born, we can test this version and check the compatibility.

Não refaça chamadas não-idempotentes

66575f6

Esse commit é bem crítico, podendo inclusive gerar cobranças duplicadas porque o pagarme travou na resposta mas a operação aconteceu internamente.

Isso acontece, a gente ocasionalmente tem cobranças duplicadas por retentar algum caso, mas temos controle sobre isso. Transformar isso em built-in da lib é uma breaking change bem significativa.

Não fixar versões de dependência transitivas no setup.py

Como isso é um biblioteca, o ideal é não fixar as versões. Caso contrário, o usuário é obrigado a usar uma versão antiga do requests, potencialmente com vulnerabilidades de segurança, o que é crítico para uma lib que transaciona pagamentos.

Veja o exemplo:

pythonpro-website $ pipenv update -d
Running $ pipenv lock then $ pipenv sync.
Locking [dev-packages] dependencies…
Building requirements...
✔ Success! 
Locking [packages] dependencies…
✘ Locking Failed! 
[ResolutionFailure]:   File "/home/renzo/.pyenv/versions/3.8.2/lib/python3.8/site-packages/pipenv/resolver.py", line 785, in _main
[ResolutionFailure]:       resolve_packages(pre, clear, verbose, system, write, requirements_dir, packages)
[ResolutionFailure]:   File "/home/renzo/.pyenv/versions/3.8.2/lib/python3.8/site-packages/pipenv/resolver.py", line 746, in resolve_packages
[ResolutionFailure]:       results, resolver = resolve(
[ResolutionFailure]:   File "/home/renzo/.pyenv/versions/3.8.2/lib/python3.8/site-packages/pipenv/resolver.py", line 728, in resolve
[ResolutionFailure]:       return resolve_deps(
[ResolutionFailure]:   File "/home/renzo/.pyenv/versions/3.8.2/lib/python3.8/site-packages/pipenv/utils.py", line 1378, in resolve_deps
[ResolutionFailure]:       results, hashes, markers_lookup, resolver, skipped = actually_resolve_deps(
[ResolutionFailure]:   File "/home/renzo/.pyenv/versions/3.8.2/lib/python3.8/site-packages/pipenv/utils.py", line 1093, in actually_resolve_deps
[ResolutionFailure]:       resolver.resolve()
[ResolutionFailure]:   File "/home/renzo/.pyenv/versions/3.8.2/lib/python3.8/site-packages/pipenv/utils.py", line 818, in resolve
[ResolutionFailure]:       raise ResolutionFailure(message=str(e))
[pipenv.exceptions.ResolutionFailure]: Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
  First try clearing your dependency cache with $ pipenv lock --clear, then try the original command again.
 Alternatively, you can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
  Hint: try $ pipenv lock --pre if it is a pre-release dependency.
ERROR: Could not find a version that matches urllib3<1.25,<1.26,>=1.10.0,>=1.20,>=1.21.1,>=1.25.10 (from requests==2.21.0->-r /tmp/pipenvemk0vw5xrequirements/pipenv-4bx91kc9-constraints.txt (line 31))
Tried: 0.3, 1.0, 1.0.1, 1.0.2, 1.1, 1.2, 1.2.1, 1.2.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.7.1, 1.8, 1.8.2, 1.8.3, 1.9, 1.9.1, 1.10, 1.10.1, 1.10.2, 1.10.3, 1.10.4, 1.11, 1.11, 1.12, 1.12, 1.13, 1.13, 1.13.1, 1.13.1, 1.14, 1.14, 1.15, 1.15, 1.15.1, 1.15.1, 1.16, 1.16, 1.17, 1.17, 1.18, 1.18, 1.18.1, 1.18.1, 1.19, 1.19, 1.19.1, 1.19.1, 1.20, 1.20, 1.21, 1.21, 1.21.1, 1.21.1, 1.22, 1.22, 1.23, 1.23, 1.24, 1.24, 1.24.1, 1.24.1, 1.24.2, 1.24.2, 1.24.3, 1.24.3, 1.25, 1.25, 1.25.1, 1.25.1, 1.25.2, 1.25.2, 1.25.3, 1.25.3, 1.25.4, 1.25.4, 1.25.5, 1.25.5, 1.25.6, 1.25.6, 1.25.7, 1.25.7, 1.25.8, 1.25.8, 1.25.9, 1.25.9, 1.25.10, 1.25.10
There are incompatible versions in the resolved dependencies:
  urllib3<1.25,>=1.21.1 (from requests==2.21.0->-r /tmp/pipenvemk0vw5xrequirements/pipenv-4bx91kc9-constraints.txt (line 31))
  urllib3<1.26,>=1.20 (from botocore==1.17.50->boto3==1.14.50->-r /tmp/pipenvemk0vw5xrequirements/pipenv-4bx91kc9-constraints.txt (line 12))
  urllib3>=1.10.0 (from sentry-sdk==0.17.0->-r /tmp/pipenvemk0vw5xrequirements/pipenv-4bx91kc9-constraints.txt (line 28))
  urllib3>=1.25.10 (from responses==0.11.0->-r /tmp/pipenvemk0vw5xrequirements/pipenv-4bx91kc9-constraints.txt (line 25))

O problema é que o requirements.txt é um arquivo destinado ao desenvolvimento, cujo objetivo é ter build determinístico, por isso ele deve fixar as versões. Mas o setup.py não. Portanto, não se deve ler as versões fixas do requirements no setup.py.

(Python e Django) Erro ao enviar checkout usando encryption_key. Ao enviar o servidor acusa falta da api_key mesmo ela estando configurada no backend

Saudações à equipe do Pagarme, gostaria de relatar um problema que estou tendo ao implementar a API ao meu site, o mesmo é feito com Python e Django. O problema é que quando envio os dados para o checkout através do formulário JS utilizando a encryption_key, o servidor barra a transação acusando a falta da api_key, sendo que a mesma ja foi configurada no backend. No settings.py importei o decouple que chama o arquivo .env que contém as duas chaves, e através do settings.chave que as chamo nas requisições.

OBS: já inseri as chaves hardcoded também e não funcionou, é como se o servidor nem pegasse essas chaves, como se a api_key não existisse.

Segue abaixo algumas imagens referentes ao formulário em JS:

js_pagarme

js_pagarme2

E mais abaixo o formulário que recebe as informações de configurações de pagamentos e também abre o modal responsável por enviar o pagamento:

formulario

Aqui vai o arquivo .env com as chaves escondidas:

arquivo( env)

Aqui vai o settings.py do django:

settings_django

Esse arquivo é o responsável por enviar a chave pública

Envio informações para o modal

Erro no navegador:

erro_navegador

Resposta de erro do servidor:

erro_pagarme

De já agradeço a atenção da equipe! Lembrado que utilizo Python e Django

Pypi's metadata

The pypi version (this) doesn't seem to work with subscription metadata:

sub = Subscription(
            api_key='API_KEY",
            plan_id=87509,
            card_id='card_cixm63x0l00krin6d6tmhrnvh',
            customer=customer,
            metadata={
                "object": {
                    "sdfsdfsd": "algo"
                }
            }
        )
sub.create()

setup.py não deve ter dependências fixas

O problema dessa abordagem é que nos obriga a usar dependências antigas em nossos projetos, como a requests 2.18 que tem vulnerabilidade.

O objetivo do requirements é ter um build determinístico para quem desenvolve a lib. Já o setup deve manter o máximo de liberdade ao escolher as dependências. Não só pelo fato de obrigar a usar libs antigas, mas também as vezes inviabilizar o uso da lib com outras dependências que precisam de outras versões.

Eu sei que manter isso tudo dá trabalho. Por isso recomendo migraram para o Pipenv, que evita ter que ficar gerenciando isso tudo. Vou ver se consigo mandar um PR para isso.

Qual a versão da API de cada release dessa lib?

Devo estar comendo bola, mas estou tentando encontrar a versão de API da pagarme correspondente a cada release da lib e não achei.

  • A versão 3.3.2 usa a API versão 3? A versão 4.0 usa a API versão 4? Não tem release pra API v5?
  • Ou não tem correlação?
    • Se não tem, eu posso usar qualquer versão dessa lib com qualquer versão de API da pagarme, basta configurar no dashboard da pagarme?

Obrigado!

Suportar range de datas nos métodos find_by

Os métodos find_by para transações e recebíveis deveriam suportar ranges de data. A documentação mostra o uso via cURL enviando duas keys com os valores mas no entanto, como no Python o find_by recebe dicionários, não é possível ter duas keys.

Talvez fosse interessante suportar o formato {'created_at': ('>=1546318800', '<=1546491600')} para ranges de data.

Unable to identify errors (or any other request status_code)

Hi guys,

Correct me if I'm wrong, but in the way the API is coded now there is no way to know what was the HTTP response code. Let`s say I do the following request:

pagarme.authentication_key('...')
subscription = pagarme.subscription.create({...})

If everything goes well and the subscription is registered, this approach has no problems. However, if something goes wrong on pagarme.subscription.create, than the following happens:

  • pagarme.subscription.create calls handler_request.post
  • handler_request.post calls pagarme.resources.handler_request.validate_response
  • pagarme.resources.handler_request.validate_response calls pagarme.resources.handler_request.error
  • pagarme.resources.handler_request.error simply returns
    the error data array

In this process, we completely miss the status_code. This means that, once subscription = pagarme.subscription.create has gone wrong, there is no if subscription.status_code == 400 or some try: ... except: PagarmeException e: ... that we can use.

The only current way I see to know if the response is an error would be some odd array format testing, like: if 'message' in subscription and 'parameter_name' in subscription and 'type' in subscription: # we have an error.

Please let me know if there is another way that I did not see or if you intend to fix this.
I used pagarme.subscription.create in the example, but as far as I know this problem affects any other methods having HTTP calls as they go by pagarme.resources.handler_request.validate_response.

JSON parsing error after request in python 3

When testing on python3, every request I try to make greets me with an error:

Traceback (most recent call last):
  File "script.py", line 9, in <module>
    transaction.charge()
  File "/home/hugollm/.virtualenvs/pagarme/lib/python3.4/site-packages/pagarme/transaction.py", line 56, in charge
    self.error(pagarme_response.content)
  File "/home/hugollm/.virtualenvs/pagarme/lib/python3.4/site-packages/pagarme/transaction.py", line 44, in error
    data = json.loads(response)
  File "/usr/lib/python3.4/json/__init__.py", line 312, in loads
    s.__class__.__name__))
TypeError: the JSON object must be str, not 'bytes'

It seems to be happening on unsucessful requests (not 200 response). I wasn't able to test on a successful one, though. Tested with the following code:

from pagarme import Pagarme

pagarme = Pagarme('ak_test_***')
transaction = pagarme.start_transaction(
    amount=10,
    card_hash='***==',
    payment_method='credit_card'
)
transaction.charge()

Used *** to omit sensitive information.

Missing requirements.txt when installing from PyPi (pip)

When calling pip install pagarme-python, it gives the following output:

Traceback (most recent call last):
  File "<string>", line 20, in <module>
  File "/tmp/pip-build-o69jyrm9/pagarme-python/setup.py", line 5, in <module>
    requires = [i.strip() for i in open("requirements.txt").readlines()]
FileNotFoundError: [Errno 2] No such file or directory: 'requirements.txt'

And looking into the package pagarme-python-2.0.0.tar.gz , there's no file named requirements.txt.

Testes quebrando

Corrigir os testes para que eles passem a funcionar corretamente.

Atualmente sleeps são utilizados, mas em pesquisas notei que a lib requests já trabalha sincronamente, não sendo necessário o uso dessa função.

Setup dando pau na hora de instalar lib em projetos

A razão é esse commit aqui:

eff2951

Ele altera a versão para referenciar o pacote sdk dentro do setup. O problema disso é que sdk está dentro de pagarme/init.py. Logo, quando o setup rodar na fase de build vai importar todos pacotes internos. E aí o problema ocorre quando um pacote importar requests, uma vez que na hora que o sistema roda o arquivo setup do pacote, requests ainda não está instalado. Segue log do Heroku onde uso o Pagarme para o site www.python.pro.br:

-----> Installing dependencies with Pipenv 2018.5.18…
Installing -e git+https://github.com/pagarme/pagarme-python.git@master#egg=pagarme-python…
Obtaining pagarme-python from git+https://github.com/pagarme/pagarme-python.git@master#egg=pagarme-python
Cloning https://github.com/pagarme/pagarme-python.git (to master) to ./src/pagarme-python
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "", line 1, in
File "/tmp/build_cfb8612950954d19070f198e19ca55d6/src/pagarme-python/setup.py", line 3, in
from pagarme import sdk
File "/tmp/build_cfb8612950954d19070f198e19ca55d6/src/pagarme-python/pagarme/init.py", line 1, in
from pagarme.resources.handler_request import authentication_key
File "/tmp/build_cfb8612950954d19070f198e19ca55d6/src/pagarme-python/pagarme/resources/handler_request.py", line 1, in
import requests
ModuleNotFoundError: No module named 'requests'

       ----------------------------------------
   
   Error:  An error occurred while installing -e git+https://github.com/pagarme/pagarme-python.git@master#egg=pagarme-python!
   Command "python setup.py egg_info" failed with error code 1 in /tmp/build_cfb8612950954d19070f198e19ca55d6/src/pagarme-python/
   You are using pip version 9.0.2, however version 19.2.3 is available.
   You should consider upgrading via the 'pip install --upgrade pip' command.
   
   This is likely caused by a bug in -e git+https://github.com/pagarme/pagarme-python.git@master#egg=pagarme-python. Report this to its maintainers.

! Push rejected, failed to compile Python app.
! Push failed

Disparar exceção específica para separar dos problemas comuns de linguagem

Ao integrar minha plataforma com o pagarme percebi que existe uma função de error no handler.py que dispara uma Exception genérica do python, o que me traz certos problemas, pois eles se misturam com todas as outras exceções disparadas na linguagem por exemplo.
Não seria melhor que fosse implementado uma exception específica para que possamos identificar especificamente aquilo que é retornado do pagarme?
Gerei um pull request com o ID #114 com sugestão para resolução dessa issue.

Persistência do problema de fixação de versões no setup.py

Saudações,
Conforme reportado pelo usuário rezon a lib, até a versão atual disponibilizada, apresenta problemas devido a fixação das depedências no setup.py, conforme pode ser confirmado a seguir:

ERROR: pagarme-python 4.0.1 has requirement requests[security]<=2.23.0,>=2.18.2, but you'll have requests 2.25.1 which is incompatible.

Pergunto se existe alguma previsão de resolução desse problema, tendo em vista que ele já foi levantada a um bom tempo e inclusive já foi solucionado pelo mesmo usuário renzon na pull request #118. Estamos usando a lib em um projeto comercial importante e é necessário saber se a biblioteca ainda esta sendo mantida e atualizada, caso contrário peço um feedback e seguiremos na busca de outras alternativa de API.

Generate Card Hash method

Hey, I've implemented the card_hash method in my python project, but I'm not sure where to implement it in the library, could someone please enlighten me?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.